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)不让用户截图和录屏输入监听风险用户输入的信息被监听自定义键盘
版权归原作者 hzulwy 所有, 如有侵权,请联系我们删除。