1.先来张图压压惊
aapt->aidl -> javac-> dx(dex)-> apkbuilder-> jarsigner-> zipalign
- aapt:Android资源打包工具( …\Android\sdk\build-tools\25.0.0\aapt.exe)。
打包资源文件,生产R.java文件,在这个过程中,项目中的AndroidManifest.xml文件和布局文件XML都会编译,然后生成相应的R.java,另外AndroidManifest.xml会被aapt编译成二进制。存放在APP的res目录下的资源,该类资源在APP打包前大多会被编译,变成二进制文件,并会为每个该类文件赋予一个resource id。对于该类资源的访问,应用层代码则是通过resource id进行访问的。Android应用在编译过程中aapt工具会对资源文件进行编译,并生成一个resource.arsc文件,
resource.arsc文件相当于一个文件索引表,记录了很多跟资源相关的信息。 - aidl :Android接口描述语言转化为.java文件的工具(…\Android\sdk\build-tools\25.0.0\aidl.exe)
aidl工具解析接口定义文件,然后生成相应的java接口,供程序调用。
如果项目中没有使用到aidl文件,那么这个过程可以跳过。 - javac:编译项目源代码,生成.class文件
项目中所有的java文件,包括R.java文件和**.**aidl文件,都会被java编译器(Java Compiler)编译成.class文件。
生成的class文件位于工程中的bin/classes目录下。 - dx(dex):通过dex命令,将.class文件和第三方库中的.class文件处理生成classes.dex。因为Android虚拟机只能执行dex文件!
- apkbuilder:生成apk包
将classes.dex、resources.arsc、res文件夹(res/raw资源被原装不动地打包进APK之外,其它的资源都会被编译或者处理)、 Other Resources(assets文件夹)、AndroidManifest.xml打包成apk文件。 - jarsigner:对apk进行签名,可以进行Debug和Release 签名
- zipalign:release mode 下使用 aipalign进行align,即对签名后的apk进行对齐处理。
在生成最终 APK 之前,打包器会使用 zipalign 工具对应用进行优化,位于android-sdk/tools目录下。
对齐的主要过程是:
将Apk包中的所有资源文件距离文件起始位置偏移4字节整数倍。
对齐之后可以减少运行时内存的使用。
学习笔记会有一些别人写的内直接复制过来了,感觉好偷懒,哈哈,一个集美貌与才华与一身的傲娇程序媛。