Android 构建系统可以用来构建、测试、运行和打包你的应用。位于Android Studio菜单栏中的构建系统是一个完整的工具,不需要依赖命令行。你可以使用构建系统:

  1. 自定义、配置和扩展构建程序
  2. 使用同一份代码为你的app创建多个版本的apk
  3. 可以在源代码块间复用代码和资源文件

构建系统的灵活性使你不用更改代码就可以实现这些。


构建详细流程



构建过程为了生成apk,调用了很多生成中间文件的工具和进程。如果你使用Android Studio开发,你每次给项目或者模块运行Gradle构建任务的时候,都会运行完整的构建流程。构建流程非常灵活,所以很有用,然而,需要了解其内部都有哪些操作,因为很多构建流程都是可配置、可扩展的。下面这张图描述了一个构建过程中可能调用的工具和进程:




下面列出了一个典型的构建步骤。构建系统将产品偏好、构建类型、和依赖中指定的资源合并在一起。如果不同的文件夹中含有相同的资源名字或者配置,那么优先级为:依赖大于构建类型,大于产品偏好,大于主源文件目录。

  1. Andorid资源打包工具(aapt)获取应用资源文件,例如AndroidManifest.xml文件和被Activity使用的XML文件,然后编译它们。一个R.java文件就被生成出来,这样你就可以在代码中访问你的资源。
  2. aidl工具将所有.aidl文件转换成java接口。
  3. 所有java代码,包括R.java和.aidl,都会被java编译器编译成.class文件。
  4. Dex工具将.class文件转换成Dalvik字节码。任何在模块中的第三方库和.class文件也会被转换成dex文件,这样才可以打包成最终的.apk文件。
  5. 所有的非编译文件(比如图片)、编译过的资源文件和dex文件被apkbuilder工具打包成一个.apk文件。
  6. 一旦.apk文件建立,它必须在安装在手机上之前被标注为debug版本活着release版本。
  7. 最后,如果应用被标注为release版本,必须使用zipalign工具对齐.apkl文件。当应用在设备上运行时,对齐.apk文件可以减少应用的内存使用。

注意:应用被限制方法引用不能超过64K。如果你的应用超过这个这个限制,构建进程会输出这个错误信息:

Unable to execute dex: method ID not in [0, 0xffff]: 65536





构建输出:

构建系统为不同的构建版本在app/build文件夹下生成APK:目录app/build/outputs/apk/包含app-<flavor>-<buildtype>.apk;例如,app-full-release.apk和app-demo-debug.apkl。