Android构建、打包流程
从APK倒推分析
一个APK包的组成
- AndroidManifest.xml
- assets 文件夹
- dex文件
- lib文件夹
- META-INF 文件夹
- res
- resource.arsc
构建工具
打包流程
资源合并
- 如果项目引入了android support包,又或许依赖于其它第三方aar库,那构建前会将aar解压并与本地资源合并,这里的资源主要包括assets目录,res目录及Androidmanifest.xml
- 当第三方依赖中的assets或res文件与本地文件有冲突时,会优先选用本地文件
处理资源文件(编译阶段)
- aapt(先会把项目资源中的xml编译成二进制并生成R.java及资源索引表resources.arsc)
- AndroidManifest.xml, res 文件夹,resource.arsc 文件
- aapt 解析项目代码中的 AndroidManifest.xml,收集项目中 res 文件夹的资源文件及 xml 文件,对其做压缩以及编译的处理。在此过程中,分配了资源 id 并生成了 R.java 文件 以及 arsc 文件
生成Dex文件
- 上一步得到 R.java
- 混淆代码
- 打成jar包
- dx工具打成dex
- 5.0 以前的系统且超过了 65535 方法数的限制,需要人为的分 dex,5.0 以后则由 dx 工具包办
打包进apk
- apk 所需要的主要内容已经大致齐全了。只需要把上面生成的 AndroidManifest.xml,classes.dex,res文件夹,resource.arsc 打包进 apk,并且将项目工程中的 assets 以及 lib 目录一并放入,就有了一个未经签名的 Android 安装包了
签名
- apk 包的签名
- 按步骤生成 MANIFEST.MF, CERT.RSA,CERT.SF 并放入META-INF 文件夹即可
APK加固
快速多渠道包
资源混淆