Android 构建系统概览

阿里云产品限时红包,最高 ¥1888 元,立即领取

Android 构建系统是一个用来构建、测试、运行和打包应用程序的工具箱。构建系统可以作为 Android Studio 菜单中的集成工具运行,也可以独立地从命令行运行。构建系统可以用来:

  • 对构建过程进行自定义,配置和扩展。
  • 使用相同的项目和模块来为应用程序创建拥有不同特性的多个 APK。
  • 跨源的集合来复用代码和资源。

Android 构建系统的灵活性使得可以在不修改应用程序核心源文件的情况下实现这些目标。想要构建一个 Android Studio 项目,参见从 Android Studio 构建和运行。想要在 Android Studio 项目中配置自定义的构建设置,参见配置 Gradle 构建

构建进程详解

整个构建过程包含有许多工具和过程产生中间文件,并最终生成一个 .apk 文件。如果你使用 Android Studio 进行开发,那么当你每次为项目或者模块运行 Gradle 构建任务时,完整的构建过程就完成了。由于许多的构建过程是可配置和扩展的,因此理解每个覆盖下发生了对于理解构建过程的灵活性是很有用的。下面的图标描述整个构建中包含的不同的工具和过程:

Android 构建工具与过程

一个典型构建的大概过程如下。构建系统从所有配置的产品修饰、构建类型和依赖中合并资源。如果不同文件夹包含有相同名字或设置的资源,将按照下面的优先级覆盖:依赖覆盖构建类型,构建类型覆盖产品修饰,产品修饰覆盖主源文件夹。

  • 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 的密钥来签名才能被安装到设备上。
  • 最后,如果应用程序以 release 模式被签名,需要通过 zipalign 工具来对齐 .apk 文件。对齐最终的 .apk 能够在设备上运行应用程序时降低内存使用。

注意: 应用程序有最多 64k 个方法引用的限制。如果你的应用程序达到这个限制,构建过程将输出下列的错误信息:

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

要避免这个错误,查看构建超过65k方法的应用程序

构建输出

构建过程为每个构建变量在 app/build 文件夹下生成一个 APK: app/build/outputs/apk/ 文件夹包含名为 app-<flavor>-<buildtype>.apk 的安装包;例如 app-full-release.apkapp-demo-debug.apk

原文链接:Build System Overview