apktool反编译参考
https://blog.csdn.net/aidijava/article/details/136120097
apktool修改targetsdk参考
https://blog.csdn.net/Deadeyess/article/details/122251359
apksigner重签名参考
https://blog.csdn.net/xiaxl/article/details/118791874
https://blog.csdn.net/Andrio/article/details/107855762
apktool安装步骤不再赘述,第一个参考博主写得十分清楚。
1 apktool反编译步骤
1解包
切换路径到apk路径,app-release.apk为apk名称
apktool d app-release.apk
在同路径下得到同名项目文件
2修改内容
apktool得到的项目文件可简单实现xml文件修改,日后再继续学习smail文件修改。
3打包
删除meta-inf
仍在同路径下 app-release为项目名称
apktool b app-release
在项目路径\dist下可看到新生成的apk
4签名
4.1生成密钥库
keytool -genkey -alias android_keystore -keyalg RSA -validity 20000 -keystore android.keystore
此时可能出现乱码,参考解决方法如下
在命令行运行chcp 936
https://blog.csdn.net/dongheli/article/details/84065118
4.2拷贝密钥库到打包apk的同级目录
4.3签名
cd 进入项目的dist路径,即apk和秘钥库文件夹
android.keystore为秘钥库名称
app-release-signed.apk 为自定义签名后的apk名称
app-release.apk 为当前目录下的apk名称
jarsigner -verbose -keystore android.keystore -signedjar app-release-signed.apk app-release.apk android_keystore
但是
部分app会出现APK安装失败:Failed to extract native libraries, res=-2,可参考以下博客内容
https://blog.csdn.net/baidu_36743221/article/details/108766864
即在AndroidManifest.xml加上
android:extractNativeLibs="true"
2 apksigner实现v2签名
jarsigner只是对apk进行了V1签名,当targetsdk>=30时,需要v2签名。(https://blog.csdn.net/qq_35559358/article/details/107408471)
sdk\25.0.0及后续版本,会有一个apksigner.bat执行脚本,可用于v2签名
cd到该路径下进行签名
key.jks是使用as签名时生成的jks文件
//直接用apksigner进行签名
apksigner sign --ks (签名地址) --ks-key-alias (别名) --out (签名后的apk地址) (待签名apk地址)
//使用Jar命令进行签名
java -jar apksigner.jar sign --ks (签名地址) --ks-key-alias (别名) --out (签名后的apk地址) (待签名apk地址)
验证签名
//直接用apksigner进行验证
apksigner verify -v --print-certs (apk地址)
//使用Jar命令进行验证
java -jar apksigner.jar verify -v --print-certs (apk地址)