APK构建过程

APK的编译打包流程:编译–>DEX–>打包–>签名和对齐

APK构建过程_第1张图片
image.png

1、编译

Java编译器对工程本身的java代码进行编译,这些java代码有三个来源:app的源代码,由资源文件生成的R文件(aapt工具),以及有aidl文件生成的java接口文件(aidl工具)。产出为.class文件。
①工程的资源文件(res文件夹下的文件),通过AAPT打包成R.java类(资源索引表),以及.arsc资源文件
②如果有aidl,通过aidl工具,打包成java接口类
③把Java文件和aidl.java和R.java编译成.class文件

2、dex

.class文件和依赖的三方库文件通过dex工具生成Delvik虚拟机可执行的.dex文件,包含了所有的class信息,包括项目自身的class和依赖的class。产出为.dex文件。
dx工具的主要作用是将java字节码转换成Dalvik字节码,在此过程中会压缩常量池,消除一些冗余信息等。

3、打包

apkbuilder工具将.dex文件和编译后的资源文件生成未经签名对齐的apk文件。这里编译后的资源文件包括两部分,一是由aapt编译产生的编译后的资源文件,二是依赖的三方库里的资源文件。产出为未经签名的.apk文件。

4、签名和对齐

分别由Jarsigner和zipalign对apk文件进行签名和对齐,生成最终的apk文件。

AAPT

前面讲到,apk的打包流程第一步包含AAPT编译资源文件生成R.java文件,那AAPT又是什么呢
AAPT- Android Asset Packaging Tool,看这个全称可以看出,他是android的资源打包工具,

  • 输入:res文件夹所有的资源(layout\drawable\string\array等),asset下的资源,AndroidManifest.xml,Android.jar文件
  • 工具: aapt 地址(/your sdk path/build-tools/your build tools version/aapt)
  • 输出:res下的资源都会被编译成一个资源索引文件resource.arsc以及一个R.java类。asset下的资源不会编译,�直接压缩进apk。

你可能感兴趣的:(APK构建过程)