Android重打包签名实例

之前有试过重打包APK,是比较简单的一些demo,一路顺风,今天在尝试一款商业APP的重打包签名过程中,出现了一些坎,记录一下。

反编译

反编译不多说了,APK并没有加固,加固的话就需要修复之后才能打包签名了

1
java -jar apktool_2.5.0.jar d xx.apk

修改icon及app_name

app_name在AndroidManifest.xml中,将android:label项改为“哈哈”,之后在反编译之后的res中,将所有的mipmap相关文件夹中的图标全部替换为微信图标。

重打包

这里重打包出现两个问题导致失败
第一个问题如下:

1
2
AndroidManifest.xml:1: error: No resource identifier found for attribute 'compileSdkVersion' in package 'android'
AndroidManifest.xml:1: error: No resource identifier found for attribute 'compileSdkVersionCodename' in package 'android'

报错的原因是在编译时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长者微信图标,名字叫做哈哈。

有钱的捧个钱场
0%