最近遇到一種突發情況,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文件夾,其目錄如下:
apk.out文件夾目錄.png - 找到
apktool.py
文件,打開后,最下面的versionCode
和versionName
就是我們要修改的部分,這里直接改動成最新的版本號和code就行。
apktool.py.png
回編譯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的版本下面
zipalign.exe.png
將dst_signed.apk
復制到zipalign.exe工具的文件夾下,cd進入該文件夾,然后執行以下命令:
zipalign -v 4 dst_signed.apk dst_signed_align.apk
執行完后,出現如下命令即代表成功
執行成功.png
這樣就是文件對齊之后的正確版本,一整套的流程基本就結束了,可以反編譯驗證一下是否成功。