最近遇到一种突发情况,cp那边的游戏打包后没改版本号,上传不了gp,今天又恰巧是周末,cp那边没上班,项目很赶,无奈之下,想到了直接使用反编译改完之后再回编的方式,修改一下版本号。这篇文章主要是记录一下整个流程。
准备工作
- 去官网下载apktool,Apktool是一个逆向android非常有用的工具,可以用来反编译apk文件,并且能在修改部分文件后,重新打包成一个新的apk,首选我们需要下载一个apktool的jar包
- 下载完后,把名称改成apktool.jar(没有梯子的同学可以看下这里),然后新建一个bat脚本,内容如下:
if "%PATH_BASE%" == "" set PATH_BASE=%PATH%
set PATH=%CD%;%PATH_BASE%;
chcp 65001 2>nul >nul
java -jar -Duser.language=en -Dfile.encoding=UTF8 "%~dp0\apktool.jar" %*
反编译apk
准备工作完毕后,开始反编译apk。
1.将你要反编译的apk放到apktoo.bat的同一文件夹下,然后cd到这个目录,执行以下命令:
apktool.bat d -o apk.out debug.apk
其中debug.apk为你要反编译的apk的名字,替换一下即可
-
反编译之后生成一个apk.out文件夹,其目录如下:
- 找到
apktool.py
文件,打开后,最下面的versionCode
和versionName
就是我们要修改的部分,这里直接改动成最新的版本号和code就行。
回编译apk
- 改完
versionCode
和versionName
后,我们要把apk重新打包还原,执行以下命令:
apktool.bat b -o dst.apk apk.out
其中dst.apk为打包后生成的apk。
- 拿到新的apk之后,最后还需要两步,一是重签名,直接把签名的keystore拷贝到当前的文件夹下,执行下面的命令:
jarsigner -verbose -keystore debug.keystore -signedjar dst_signed.apk dst.apk debug
其中debug.keystore
为你自己的签名文件,debug
为签名文件的keyAlias
。
然后输入密码就行,dst_signed.apk
为签名后生成的apk文件
- 最后通过zipalign.exe工具对
dst_signed.apk进行文件对齐
,这个工具在sdk的build-tools的版本下面
将dst_signed.apk
复制到zipalign.exe工具的文件夹下,cd进入该文件夹,然后执行以下命令:
zipalign -v 4 dst_signed.apk dst_signed_align.apk
执行完后,出现如下命令即代表成功
这样就是文件对齐之后的正确版本,一整套的流程基本就结束了,可以反编译验证一下是否成功。