最近突然有个紧急需求,应用的某一个版本发布到应用宝时,由于应用宝自己抓包上传了一个高版本的安装包(即比当前要发布的版本高),导致上传失败,而向应用宝申诉无果,我这没有项目源码,找三方改东西太慢,所以要将这个版本反编译、修改为更高版本号、重新打包、对齐、签名在发布到应用市场,特此整理一些心得。
一、反编译工具介绍
1:apktool 获取资源文件
Apktool是一个逆向android非常有用的工具,可以用来反编译apk文件,并且能在修改部分资源文件后,重新打包成一个新的apk。
2:dex2jar(源码文件获取)
将Android的包dex文件转换成jar文件,此时拿到的时字节码文件一般和jd-gui结合使用,将字节码文件转成对应的源码
3:jd-gui 查看APK中classes.dex转化成出的jar文件,即源码文件
将dex2jar中的jar(字节码)文件转成源码,既可以查看源码也可以进行修改。
我的需求只涉及修改版本号,而不需要修改源代码,只需要通过apktool工具反编译拿到资源文件、修改版本号、重新回编打包成apk、内存对齐以及重签名 下面详细介绍apktool的使用过程,dex2jar和jd-gui的使用将单起一篇文章进行介绍。
二、apktool工具的反编译重打包签名的详细过程
首先下载一个最新版的apktool.jar
1:使用apktool.jar进行反编译
新建一个apktool.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" %*
新建bat文件很简单直接将txt文件另存为.bat文件即可
对apk包进行反编译,将apk包和bat文件(apktool.jar)放到同一个文件夹下,目的是为了输入方便,只需要输入相对路径即可,如果不放到同一个文件夹下,每次输入命令都要输入绝对路径。
在cmd终端,cd到此目录下,输入以下命令:
**
注意
* outDir :表示反编译