摘要:Android 里给我们提供了 很多 用来打包的工具

资料来自《Android软件安全与逆向分析》

Android应用打包过程一共分为以下七步

1.打包资源文件 生成R文件

通过aapt工具(位于sdk/platform-tools),主要调用aapt源码下的Resurce.cpp文件

  • buildResource() 函数检查AndroidManifest.xml的合法性
  • makeFileResources() 对res下的目录进行处理
  • ResourceTable.cpp —-compieResourceFile() 编译res和asserts文件 生成resource.arsc
  • pareeAndAddENTRY() 生成R.java文件
  • compileXmlFile() 对res下的xml文件进行加密处理

2.处理aidl文件

通过aidl文件生成相应的java文件,如果没有使用到aidl会跳过该步骤

3.编译所有java代码

通过调用javac 命令编译所有src下的java代码,生成class文件

4.转换class文件 生成classes.dex

android 运行的是dex文件 通过dx工具(位于sdk/platform-tools)将所有class文件转换成一个classes.dex,这阶段可以 压缩常量池,消除冗余信息等

5.打包APK文件

打包工具为apkbuilder(sdk/tools) 实际用到的是AplBuilderMain.java文件

6.签名文件

一种是使用JDK提供的jarsigner工具签名,一种是使用android提供的signapk工具

7.对签名后的APK文件 对其处理

使用的工具是zipalign(位于build/tools/zipalign),主要目的是 使APK包中的所有资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk
文件时速度更快