Apk反编译修改版本号&资源文件方案(基于AndroidKiller)
图文操作版
1、解压文件
解压文件,打开AndroidKiller.exe
密钥配置
2、下面就是进行签名密钥配置的一个过程,用来准备等待后续执行,配置好签名是为了后续编译打包使用。(签名文件在AndroidSrutdio生成,或找应用开发人员提供)记住这里的签名名称,再后续打包时会使用到。
3、下面在主页选择打开,找到要修改的apk打开
4、等待加载反编译,编译好后能在工程信息里看到版本名(版本号)(可能会弹出分析界面的选择框,点是就行,然后等待分析完成)
修改版本号
5、点击工程管理器,如果是签名过的文件一般都会生成aoktool.yml文件,双击打开并下拉到最后面,能看到整理是应用的版本信息,在此处修改版本号即可。
6、如上图目前版本号 version:‘48’ 版本名 versionName:2.1.9 我们在此基础上进行修改为 version:‘49’ 版本名 versionName:2.1.10,表示升级版本,一些应用市场需要每次在之前的版本号基础上进行升级,所以升级时确认比当前应用市场的版本号高即可。
7、其中在assets中,一些三方so库,sdk,h5资源文件等都会存在,我们在解压后如果需要替换其中的资源或增加相应的文件都可在此目录下进行操作。
替换资源文件
8、替换Assert里的资源文件
(1)如下添加对应的assert文件,先右击assert文件夹,选择打开方式—> 打开文件路径
(2)打开后我们进入解压后的目录路径,如下为进入的目录路径
(3)进入assert替换或添加我们想增加的h5资源包,如下我们添加了webapp_carsearch.zip的资源包
(4)然后返回Android Killer即可看到资源文件被替换,如果没有看到点击下图的刷新即可。
重新编译
9、最后选择顶部Android板块,点击编译下方的下箭头,选择之前配置的签名文件,在确认选择的密钥是之前配置的之后点击编译,等待项目重写编译完成即可,时间根据要打包的Apk内容长度不一,稍微歇息等待一下,最后会弹出编译好后的路径位置(下图蓝色链接),单击打开或前往目录便是最终生成的apk。
命令操作版(适用于exe无法打开的情况)
1、解压文件后,打开AndroidKiller.exe
2、打开命令操作窗口进入对应的反编译目录,如下图D:\AndroidKiller\bin\apktool(反编译工具在此目录下,可添加到电脑环境变量,这里不进行赘述)
前提条件
3、在进行操作前先确定几个前提条件,一个被编译的包,一个空文件夹out作为输出目录,一个签名文件(签名文件在AndroidSrutdio生成,或找应用开发人员提供)这里的签名名称,在后续打包时会使用到。
如图我将这些文件放在这个目录下,后续也根据此目录进行命令操作
解包APK命令
4、首先输入命令进行解包操作
解包 APK命令:apktool.jar d -f *.apk -o out
其中 *.apk 是被解包的 APK 文件名, out 是输出目录名称
例:apktool d -f E:\TempApk\test.apk -o E:\TempApk\out
5、解压好后进入out目录会出现如下反编译文件
修改版本号
6、在目录中可以关注俩个地方,一个是apktool.yml文件,这里是包含应用签名版本号地方,一个是assets 这里一般是存放一些资源文件的地方。
其中修改版本号可以用记事本或其他方式打开apktool.yml,拉进度条到最后,可以看到 versionCode: ‘48’,versionName: 2.1.9
7、我们修改其中versionCode和versionName为versionCode: ‘49’,versionName: 2.1.10即可改变版本号和版本名,最后保存一下
修改资源
7、同样对于资源文件我们可以进入assert文件夹里,将我们想要的资源进行替换,删除或增加。如下为assert文件夹内容
8、我们将webapp_carsearsh.zip文件进行删除,并添加webapp_appsss.zip文件。
回编译命令
9、然后进行回编译命令apktool b out
其中 *out为原反编译生成的文件夹(即原反编译输出目录)
例:apktool b E:\TempApk\out
10、回编译完成,这时在out目录下会看到多了一个dist目录文件,进入就会多一个apk,这就是回编译成功的apk,但是这个apk是无法直接安装的,因为缺少签名文件。
签名命令
11、签名命令 jarsigner -verbose -keystore *.keystore -signedjar *singed.apk
*source.apk (Alias)
其中
*.keystore 为你keystore位置
*singed.apk 为签名后输出的路径和apk名字
*source.apk 为你需要签名apk的原路径
(Alias) 为keystone签名描述 (在创建时写入的部分或寻负责Android应用开发人员获取)
同时还需要你输入相关的密码短语(在创建时写入的部分或寻负责Android应用开发人员获取)
例:jarsigner -verbose -keystore E:\TempApk\test.keystore -signedjar E:\TempApk\out\dist\signedtest.apk E:\TempApk\out\dist\test.apk 密钥
12、如果输入正确会进行签名,最后在输出目录中可看到对应的apk生成。
签名验证
12、签名验证 jarsigner -verify -verbose -certs *.apk
其中: *.apk 为需要验证是否签名的apk文件
当出现如下已验证签名和对应签名信息的时候说明签名成功了
报错原因
签名失败
Tips:如果出现签名失败,看看是否当前密钥配置的目录下不存在该签名文件
例:
找不到apk的异常
Tips:创建空文件夹out的目的是因为apktool输出时会先清空文件夹内容,如果输出目录和apk同级会由于清除apk导致而出现找不到apk的异常。