Android 基础编译流程
Android 工程的构建打包是一个复杂的流程,涉及工程源代码、资源文件、AIDL 文件以及工程所依赖的库文件的编译转换。
官方提供的构建流程图:
编译构建的4个步骤:源代码编译->代码合成->资源打包->签名和对齐。
- Java 编译器对工程的代码资源进行编译,代码资源包括 App 的源代码、apt 编译生成的 R 文件和 AIDL 文件生成的 Java 接口文件。通过 Java 编译器编译生成 *.class 文件。
- 通过 dex 工具,将 *.class 文件和项目依赖的第三方库文件生成虚拟机可执行的 .dex 文件,如果使用了 MultiDex,会产生多个 dex 文件,包含编译后的所有 .class 文件,即自身的 class文件和依赖库的 .class 文件。
- apkbuilder 工具将 .dex 文件、apt 编译后的资源文件、依赖中的第三方库内的资源文件打包生成签名对齐的 apk 文件。
- 使用 Jarsigner 和 Zipalign 对文件进行签名和对齐,最终生成 apk 文件。
通过 Gradle工具可以看到每个运行的 Task 的情况,还可以看到 Gradle 编译的流程,详细地显示出每个任务的 Task 耗时,如图:
以下为执行 ./gradlew assembleDebug
的 Task 输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| :app:preBuild :app:preDebugBuild :app:checkDebugManifest :app:prepareDebugDependencies :app:compileDebugAidl :app:compileDebugRenderscript :app:generateDebugBuildConfig :app:generateDebugAssets :app:mergeDebugAssets :app:generateDebugResValues :app:generateDebugResources :app:mergeDebugResources :app:processDebugManifest :app:processDebugResources :app:generateDebugSources :app:compileDebugJavaWithJavac :app:compileDebugNdk :app:compileDebugSources :app:transformClassesWithDexForDebug :app:mergeDebugJniLibFolders :app:transformNative_libsWithMergeJniLibsForDebug :app:processDebugJavaRes :app:transformResourcesWithMergeJavaResForDebug :app:validateDebugSigning :app:packageDebug :app:assembleDebug
|
参考