之前有试过重打包APK,是比较简单的一些demo,一路顺风,今天在尝试一款商业APP的重打包签名过程中,出现了一些坎,记录一下。
反编译
反编译不多说了,APK并没有加固,加固的话就需要修复之后才能打包签名了
|
|
修改icon及app_name
app_name在AndroidManifest.xml中,将android:label项改为“哈哈”,之后在反编译之后的res中,将所有的mipmap相关文件夹中的图标全部替换为微信图标。
重打包
这里重打包出现两个问题导致失败
第一个问题如下:
报错的原因是在编译时compileSdkVersion版本过高导致的。
网上查找解决办法有的说升级apktools即可解决,我把之前的2.2.4升级到最新的2.5.0并没有解决,pass,正确的解决方案,我们在回编译过程中只需要新建一个空文件夹
mkdir framework
然后使用Apktools重打包APK
java -jar apktool_2.5.0.jar b xx -p framework -o xx_new.apk
第二个问题:
Error: Integer types not allowed (at 'foregroundServiceType' with value '0x00000008').
这个错误主要是由于android:foregroundServiceType项对应的value有问题,将0x00000008修改为mediaProjection即可。这样最终即可打包为完整的APK。
签名
签名就不得不提一个重签名神器ApkSignatureKiller。
github地址为https://github.com/L-JINBIN/ApkSignatureKiller
使用起来很方便,将需要提取签名的原xx.apk,打包之后的new_xx.apk,和签名输出的out_xx.apk写在对应位置运行run.bat即可。
# 获取签名信息
apk.signed=xx.apk
# 要处理的APK
apk.src=new_xx.apk
# 写出的APK名
apk.out=out_xx.apk
# 签名配置
sign.enable=true
sign.file=test.keystore
sign.password=123456
sign.alias=user
sign.aliasPassword=654321
最终签名成功后的APK长者微信图标,名字叫做哈哈。