构建系统概述(Build System Overview)
Android构建系统(Android build system)是一个你可以用它来创建,测试,运行及打包应用的工具集。这个构建系统可以作为一个集成的工具运行在Android Studio的菜单上,也可以独立的运行在命令行工具上。你可以使用构建系统的这些特性去实现:
定制,配置及扩展构建过程
使用相同的项目及模块为你的应用创建多个不同特性的APKs
跨代码集的重用代码和资源文件
Android构建系统的灵活性使你可以完成这些目标,而不用去修改应用核心源码文件。要创建一个Android Studio项目,请参考 从Android Studio创建及运行程序。要为Android Studio项目进行自定义构建配置,请参考配置Gradle Builds。
构建流程详述(A Detailed Look at the Build Process)
构建流程在生成APK程序的过程中会调用到很多工具去处理并自动生成很多中间文件。如果你在Android Studio中开发,你每次为你的工程或模块执行Gradle Build任务时,都会完整的执行一次构建流程。构建流程相当灵活,所以很有用,然而,由于构建流程的可配置性及可扩展性,要理解在构建过程中发生了什么就需要付出更多精力。下面这个流程图描述了构建流程中不同工具的调用及处理:
下面简述一个典型的构建流程。构建系统从产品配置特点,构建类型及依赖中合并所有资源。如果不同文件夹下面包含了同一名称的资源或配置,相关的覆盖优先级从高到低为:依赖(dependencies)->构建类型(build types)->产品特性(product flavors)->主源代码目录(main source directory).
Android资源打包工具(aapt)将你应用的资源文件,例如 AndroidManifest.xml,Activity引用到的XML文件编译,并且生成一个R.java源码,以便你可以在你的java代码中引用你的资源。
aidl工具转换所有的.aidl文件并生成对应的java接口
所有的java源码,包括R.java和.aidl文件,都被java编译器编译成.class文件
dex工具转换所有.class文件为Dalvik字节码。任何第三方的库及你引用到的相关模块生成的.class文件也一起被转换成.dex文件,以便它们可以被打包进最终的.apk文件中。
所有不可编译的资源文件(例如图片),已经编译的资源,及.dex文件都被apkbuilder工具打包为一个.apk文件
一旦.apk文件生成后,它必须用一个(debug或release)key去签名,才能被安装到设备上。
最后,如果应用是用release key签名的,还必须用zipalign工具将.apk文件对齐。经过对齐处理的.apk文件在应用实际运行过程中可以有效减少内存占用。
提示:一个应用被限制最多可以有64K个方法索引,如果你的应用超过这个限制,构建过程会输出以下错误信息:
Unable to execute dex: method ID not in [0, 0xffff]: 65536.
要避免这个错误,可以参考构建超过65K方法的应用。
构建输出(Build output)
构建系统分别为不同的构建需求在app/build文件夹生成不同的APK文件:在app/build/outputs/apk目录下包含着以app--.apk的文件,例如app-full-release.apk 及 app-demo-debug.apk。