Android 构建系统可以用来构建、测试、运行和打包你的应用。位于Android Studio菜单栏中的构建系统是一个完整的工具,不需要依赖命令行。你可以使用构建系统:
- 自定义、配置和扩展构建程序
- 使用同一份代码为你的app创建多个版本的apk
- 可以在源代码块间复用代码和资源文件
构建系统的灵活性使你不用更改代码就可以实现这些。
构建详细流程
构建过程为了生成apk,调用了很多生成中间文件的工具和进程。如果你使用Android Studio开发,你每次给项目或者模块运行Gradle构建任务的时候,都会运行完整的构建流程。构建流程非常灵活,所以很有用,然而,需要了解其内部都有哪些操作,因为很多构建流程都是可配置、可扩展的。下面这张图描述了一个构建过程中可能调用的工具和进程:
下面列出了一个典型的构建步骤。构建系统将产品偏好、构建类型、和依赖中指定的资源合并在一起。如果不同的文件夹中含有相同的资源名字或者配置,那么优先级为:依赖大于构建类型,大于产品偏好,大于主源文件目录。
- Andorid资源打包工具(aapt)获取应用资源文件,例如AndroidManifest.xml文件和被Activity使用的XML文件,然后编译它们。一个R.java文件就被生成出来,这样你就可以在代码中访问你的资源。
- aidl工具将所有.aidl文件转换成java接口。
- 所有java代码,包括R.java和.aidl,都会被java编译器编译成.class文件。
- Dex工具将.class文件转换成Dalvik字节码。任何在模块中的第三方库和.class文件也会被转换成dex文件,这样才可以打包成最终的.apk文件。
- 所有的非编译文件(比如图片)、编译过的资源文件和dex文件被apkbuilder工具打包成一个.apk文件。
- 一旦.apk文件建立,它必须在安装在手机上之前被标注为debug版本活着release版本。
- 最后,如果应用被标注为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。