APK 加固流程
打包APK
通过 ./gradlew assembleRelease 命令打包,此时的apk没有加固,不符合安全需要
登录腾讯云执行加固操作
加固使用 腾讯云 -> 移动应用安全 -> 应用安全 加固方案,加固服务需要认证,自行选择适合自己的方式就行了
认证成功后,进入 应用加固 页面
点击去加固,点击 立即加固 ,上传应用
点击 确认加固, 在线加固需要几分钟,加固完成后有加固结果显示
此时加固就完成了,下载加固包就行了
重新签名
由于腾讯云应用安全需要将APK签名信息删除后才能加固,所以加固后的安装包是没有签名信息的,现在需要对加固包重新签名
1、使用 JDK 中的签名工具 jarsigner
运行 jarsigner,如果没有设置PATH环境变量,那可以从JDK安装路径下的bin目录中找到
签名命令
jarsigner -verbose -keystore keystore文件路径 -signedjar 签名后生成的apk路径 待签名的apk路径 alias别名
个人本地apk添加签名,签名文件 keystore 和 apk 都在同一个目录下, 签名后的 apk1.apk 也在本地
$ jarsigner -verbose -keystore .\my-key.keystore -signedjar .\myapp1.apk .\myapp.apk my-key-alias
输入密钥库的密码短语:
正在添加: META-INF/MANIFEST.MF
正在添加: META-INF/MY-KEY-A.SF
正在添加: META-INF/MY-KEY-A.RSA
正在签名: lib/arm64-v8a/libbetter.so
正在签名: lib/arm64-v8a/libc++_shared.so
...
正在签名: assets/0OO00l111l1l
正在签名: tencent_stub
[可信证书]
jar 已签名。
警告:
签名者证书为自签名证书。
这样就签名成功了。
备注:签名成功之后的apk在华为鸿蒙、Android8系统可以正常解析安装,在Android11解析安装包失败,需要使用zipalign工具进行对齐操作,再用apksigner重新签名
2、使用 JDK 中的zipalign工具对齐
zipalign和apksigner在Android SDK/build-tools/SDK版本/目录,需要先配置环境变量
控制面板->系统和安全->系统->高级系统设置->高级->环境变量->系统变量path
签名文件 keystore 和 apk 的目录下执行命令
对齐命令
zipalign -p -f -v 4 未对齐(jarsigner已签名)APK文件 生成的APK文件
zipalign -p -f -v 4 .\myapp1.apk .\myapp2.apk
验证对齐
zipalign -c -v 4 要验证的APK文件
对齐成功
3、使用 JDK 中的apksigner再次签名
apksigner sign --ks 密钥库文件 --ks-key-alias 密钥库别名 --ks-pass pass:密码 --v2-signing-enabled true -v --out 签名后的APK文件 要签名的(对齐后)APK文件
apksigner sign --ks .\my-release-key.keystore --ks-key-alias my-key-alias --ks-pass pass:cbf123456. --v2-signing-enabled true -v --out .\myapp3.apk .\myapp2.apk
出现Signed,签名成功