android构建系统总览

Android构建系统是你用于构建,测试,运行及打包你的apps的工具包。构建系统既可以作为一个集成工具通过Android Studio的菜单运行,也可以在命令行中独立地运行。你可以使用构建系统的功能来做这些事情:

  • 定制,配置,及扩展构建过程
  • 使用相同的项目及模块,为你具有不同功能的app创建多个APKs。
  • 在源码集合间复用代码和资源。

Android构建系统的灵活性使得你能够在不改变你的app的核心源代码文件的情况下达成所有这些目标。要编译一个Android Studio项目,请参考Building and Running from Android Studio。要对Android Studio项目配置特别的构建设置,请参考 Configuring Gradle Builds。

构建过程详解

构建过程包含了在产生.apk的过程中用到的许多工具及有中间文件产生的子过程。如果你在使用Android Studio做开发,则在你每次为你的项目或模块运行Gradle build task时,都会完成完整的构建过程。构建过程是非常灵活的,而由于许多构建过程是可配置并可扩展的,因而理解构建过程背后都发生了什么是很有用的。下图描述了包含在一次构建中的不同工具及过程:

android构建系统总览_第1张图片

一次典型构建的常规过程大体如下。构建系统从配置的product flavors,build types,和dependencies合并所有的资源。如果不同目录下包含的资源具有相同的名字或设定,则遵循的覆盖优先级顺序为:dependencies覆盖build types,build types覆盖product flavors,product flavors覆盖main source目录:

  • Android Asset Packaging Tool (aapt)获取你的应用程序的资源文件,比如AndroidManifest.xml文件及你的Activities的XML文件,并编译它们。同时会产生R.java文件,以便于你可以在你的Java代码中引用你的资源。
  • aidl工具将你所有的.aidl接口转换为Java接口。
  • 你所有的Java代码,包括R.java和.aidl文件,被Java编译器编译为.class文件输出。
  • dex工具将.class文件转换为Dalvik字节码。你的模块中包含的所有第3方库及.class文件也会被转换为.dex文件,以便于它们可以被打包进最后的.apk文件。
  • 所有没有被编译的资源(比如图片),已编译的资源,及.dex文件被发送给apkbuilder工具来打包成一个.apk文件。
  • 一旦构建了.apk,则在它能够被安装到一个设备之前必须用一个debug或release key来签名。
  • 最后,如果应用以release模式签名,则你必须用zipalign工具来align你的.apk。Aligning最后的.apk在应用程序运行于一个设备上时可以降低内存的用量。

注意:Apps有一个限制,引用的method数被限制在64K以内。如果你的app达到了这个限制,构建过程将输出如下的错误消息:

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

要避免这个错误,请参考Building Apps with Over 65K Methods。

构建输出

构建过程为每次构建在app/build目录下产生一个不同的APK:app/build/outputs/apk/目录包含名为app-<flavor>-<buildtype>.apk的包;比如app-full-release.apk和app-demo-debug.apk。

Done

原文。

你可能感兴趣的:(android构建系统总览)