aapt2命令行实现apk打包
apk文件结构
-
classes.dex:Dex,即Android Dalvik执行文件
-
AndroidManifest.xml:工程中AndroidManifest.xml编译后得到的二进制xml文件
-
META-INF:主要保存各个资源文件的SHA1 hash值,用于校验资源文件是否被篡改,防止二次打包时资源文件被替换,该目录下主要包括下面三个文件:
- MANIFEST.MF:保存版本号以及对每个文件(包括资源文件)整体的SHA1 hash
- CERT.SF:保存对每个文件头3行的SHA1 hash
- CERT.RSA:保存签名和公钥证书
-
res:res目录下资源文件编译后得到的二进制xml文件
-
resources.arsc:包含了所有资源文件的映射,可以理解为资源索引,通过该文件能找到对应的资源文件信息
aapt2打包流程
- 通过aapt2打包res资源文件:生成R.java、resoucres.arsc和res文件
- 通过Javac编译R.java、Java源文件:生成class文件
- 通过d8命令:将class文件和第三方库中的class文件处理生成classes.dex
- 通过aapt2工具:将aapt生成的resoucres.arsc和res文件、未编译的资源assets文件和classes.dex一起打包生成apk
- 通过zipalign工具:将未签名的apk进行对齐处理
- 通过apksigner工具:对上面的apk进行debug或release签名
aapt2命令行实现打包
按照上面的顺序使用各个命令便可以打包生成一个apk包了。
Gradle构建工具打包
如果使用传统的aapt2的方式打包,在多模块的情况下将会十分的麻烦。幸好,gradle已经将上述的命令集成了在了各个task中。
APK安全攻守道
风险种类 | 风险描述 | 解决方案 |
---|---|---|
App防止反编译 | 被反编译会暴露客户端逻辑,加密算法,密钥等等 | I加密,邦邦加固,360加固包等 |
资源文件泄漏风险 | 获取图片,js等文件 | 资源混淆(AndResGuard),加固等 |
so文件破解风险 | 导致核心代码逻辑泄漏 | so加固 |
测试开关的代码被打包发布 | 通过测试的url,测试账号等对正式服务器进行攻击 | 正式服务器与测试服务器不要使用同一个 |
Root设备运行风险 | 已经root的手机通过获取应用的敏感信息等 | root手机禁止应用启动 |
模拟器运行风险 | 刷单,模拟虚拟位置等 | 禁止在虚拟器上运行 |
截屏攻击风险 | 对app运行中的界面进行截图或录制来获取用户信息 | 添加属性getWindow().setFlags(FLAG_SECURE,FLAG_SECURE)不让用户截图和录屏 |
输入监听风险 | 用户输入的信息被监听 | 自定义键盘 |