gradle插件

我们创建一个Android Application,至少要包含一个application module,并且在build.gradle中设置application 的gradle 插件:

apply plugin: 'com.android.application'

 

这样,编译这种module时将才成.apk文件。

一个application module不可以依赖另一个application module,只可以依赖library,就是配置 gradle library 插件的module:

apply plugin: 'com.android.library'

 

发布这样的module时,得到的将是一个.aar文件,与.jar文件相比,aar文件可以包含一些android相关的东西:比如资源文件和manifest文件。

 

 

编译

编译一个application module或者library文件,大致可以分为gradle task代表的五个阶段:

  1. 准备依赖包(Preparation of dependecies):在这个阶段gradle检测module依赖的所有library是否ready。如果这个module依赖于另一个module,则另一个module也要被编译。
  2. 合并资源并处理清单(Merging resources and processing Manifest):在这个阶段之后,资源和Manifest文件被打包。
  3. 编译(Compiling):在这个阶段处理编译器的注解,源码被编译成字节码。
  4. 后期处理(Postprocessing): 所有带 “transform”前缀的task都是这个阶段进行处理的。
  5. 包装和出版(Packaging and publishing):这个阶段library生成.aar文件,application生成.apk文件。

 

 

一个粗糙的构建流程

gradle构建APK的流程大致如下图: 
1. Android编译器(5.0之前是Dalvik,之后是ART)将项目的源代码(包括一些第三方库、jar包和aar包)转换成DEX文件,将其他资源转换成已编译资源。 

2. APK打包器将DEX文件和已编译资源在使用秘钥签署后打包。 

3. 在生成最终 APK 之前,打包器会使用zipalign等工具对应用进行优化,减少其在设备上运行时的内存占用。 

构建流程结束后获得测试或发布用的apk。

 

一个稍详细的构建流程

更详细的gradle构建过程如下图: 
 
图中的矩形表示用到或者生成的文件,椭圆表示工具。 

1. 通过aapt打包res资源文件,生成R.java、resources.arsc和res文件 

2. 处理.aidl文件,生成对应的Java接口文件 

3. 通过Java Compiler编译R.java、Java接口文件、Java源文件,生成.class文件 

4. 通过dex命令,将.class文件和第三方库中的.class文件处理生成classes.dex 

5. 通过apkbuilder工具,将aapt生成的resources.arsc和res文件、assets文件和classes.dex一起打包生成apk 

6. 通过Jarsigner工具,对上面的apk进行debug或release签名 

7. 通过zipalign工具,将签名后的apk进行对齐处理。 

这样就得到了一个可以安装运行的Android程序。 

这样的流程仍然不是详细的,下面的这幅图带你看下什么叫详细。

Android使用gradle构建生成的apk关键就是aapt处理资源文件,aidl处理.aidl,javac生成.class文件,proguard混淆后再由dex生成.dex文件,由apkbuilder签名后再经zipalign对齐字节码就可以上线发布了。

更多相关文章

  1. Android遇到的异常及解决方法
  2. Android(安卓)Studio中如何新建assets文件夹
  3. 【Android-FaceBook】facebook Android配置过程中生成密钥哈希+o
  4. Android(安卓)SDK Manager 代理服务器设置
  5. android开发给linearlayout设置边框
  6. 将x264移植到Android
  7. webview 设定和使用缓存来获取网页中的js,css和图片资源
  8. android外包公司—技术分享:Android开发环境搭建(长年承接安卓应用
  9. 搭建 Win7 Android(安卓)NDK 开发环境

随机推荐

  1. Android -- TextView与EditText 同步显示
  2. android如何取得本地通讯录的头像的原图
  3. android纯Java代码写的addView弹窗(亲测可
  4. android获取本机号码
  5. 《Android》Lesson22-数据存储
  6. JS判断请求来自Android手机还是iPhone手
  7. 整理的Android多种控件步骤
  8. Android 干货文章集锦
  9. Android通过SystemProperties获取build.p
  10. 最新版的Android4.4.2 SDK无法下载解决