概述
APK构建流程涉及许多将项目转换成 Android 应用软件包 (APK) 的工具和流程。构建流程非常灵活,因此了解它的一些底层工作原理会很有帮助。
APK的详细构建流程稍微有点复杂,本文将分为四步由浅入深带读者深入分析构建流程。
- 第一步:初见构建
- 第二步:再探构建
- 第三步:深入构建
- 第四步:放弃构建
初见构建
首先『初见构建』,这步中我们可以先忽略构建中的细节,先对主流程有个大致了解。
如上图所示(方形:表示文件,菱形:表示操作):
1、 整个构建分为两个主要操作:编译(Compile)、打包(APK Package)
2、 编译 :编译器(Compiler)通过编译 源码 、AIDL文件 、资源文件 、依赖包,最终生成Dex文件和编译后的资源文件。
3、打包 :打包器(APK Packager)利用签名文件(KeyStore)和上一步编译过程中生成的Dex文件、编译后的资源文件打包成最终的APK文件。
再探构建
在上一步「初见构建」中,我们已经对APK打包的流程有了大致了解,接下来再详细一点。
(方形:表示文件,椭圆:表示工具及操作)
上面这张图,显示了更为详细的构建流程。以虚线为界,前半部分描述了 编译流程 ,后半部分则描述了 打包流程。
下面具体分析构建流,分为七步(其中编译1-4、打包5-7):
1、使用__aapt__工具,编译res/
文件,生成编译后的二进制资源文件(.ap_文件)、R.java文件。(目前新版使用aapt2工具,R.java也替换成了R.jar)
2、使用__aidl__工具,根据aidl文件生成对应的Java接口文件
3、使用__Java Compiler__工具,Java Compiler(俗称javac)将R.java、项目中的代码、Aidl接口文件编译成.class文件。
4、使用__dex__工具,将上一步产生的.class文件和第三方依赖中的.class编译成.dex文件。(目前新版使用d8工具)
5、使用__apkbuilder__工具,将编译后的资源(.ap_文件)、dex文件及其他资源文件(例如:so文件),压