1.前期准备不充分的地方
--没有确认加固操作到底是做了哪些事
优化class.dex,将根目录下的多个class.dex文件加密后放到特定目录下,根目录只保留一个加密相关的class.dex。apk安装的时候再解密并恢复原来的多个class.dex文件。
脚本中完全删除了META-INF文件夹,但实际可根据需要,只删除签名相关的.SF文件
--没有完全了解多渠道打包的原理
content of zip,center of directory,EOCD,这三个目录是zip文件的格式,并不是apk特有的格式。第一次发现加固后取不到渠道号,以为是加固方案的删除操作修改了EOCD,导致多渠道注入失效。但其实加固后,对文件夹重新zip了,最后发现其实是因为签名方案的问题导致多渠道注入失败。(用了29.0.1目录下的apksigner,导致apkverify验证不通过)
2.学到的内容
--签名相关
jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore [*.keystore] -storepass [... ] -signedjar [签名后.apk] [签名前.apk] [keystore别名]
jarsigner -verify 签名后.apk //验证签名
sdk目录\build-tools\28.0.3\apksigner sign --out [签名后文件.apk(不指定则替换原apk)] --ks [*.keystore] --ks-key-alias [别名] --key-pass [签名的keyPassword] --ks-pass [keystore的password]
sdk目录\build-tools\28.0.3\apksigner verify -v [签名后apk] | more
apksigner 不同sdk版