gradle assembleRelease
打开gradle assembleRelease后,看都Task的执行,这么多!瞬间懵逼。
Android 打包
我们的Android项目中有java文件、xml文件、图片等是如何编译、打包成了一个apk文件的呢?下图就是Android apk的打包流程,下面进行具体分析:
1 AAPT阶段
AAPT阶段主要是用AAPT来打包res资源文件。会生成:R.java、resources.arsc和res文件(二进制 & 非二进制如res/raw和pic保持原样)。
R.java, 这里将所有的引用资源都用一个映射了的int值来方便引用。
resources.arsc文件,记录了所有应用程序资源目录的信息。包括资源名称、类型、值、ID等信息。此文件类似一个资源索引表,可以在给定资源ID和设备配置信息的情况下快速找到资源。
2 aidl阶段
处理.aidl文件,生成相应的Java接口文件。
3 Java Compiler阶段
通过Java Compiler把R.java、Java接口文件、Java源文件,编译成.class文件。
4 dex阶段
通过dex编译器将.class文件和第三方库中的.class文件编译成classes.dex。
5 apkbuilder阶段
将classes.dex、resources.arsc、res文件夹、Other Resources(assets文件夹)、AndroidManifest.xml打包成apk。
6 Jarsigner阶段
对apk进行签名。
7 zipalign阶段
对签名后的apk进行对齐处理。使用Zipalign,将apk中未压缩的数据进行4字节对齐,对齐后就可以使用mmap函数读取文件,可以像读取内存一样对普通文件进行操作。
“zipalign” 的工具,位于 SDK \build-tools\23.0.2\zipalign.exe。