1、apktool的下载及安装
apktool是一个反编译apk文件的工具,可以在其官网查看介绍及下载。
下载下来的是一个jar包,需要在命令行中执行java -jar 指定apktool的jar包来运行。
但是经常用这个命令的情况下,不是很方便。故网上有博客(忘了是哪里看的了,感谢原作者)使用bat脚本包装了一下调用命令,代码如下:
@echo off
set PATH=%CD%;%PATH%;
java -jar "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9
需要注意的是,下载的apktool.jar文件名是否和脚本一致,同时要将jar包放在和脚本同一目录下。
如果经常使用,可以尝试将相关路径加入环境变量。 这样便可以在任意路径下调用了。
2、apktool的使用
通过查看命令说明,可以知道有两个常用的选项,一个是 apktool d 用来解码apk应用, 一个是apktool b 用来打包解码后的文件,输出apk文件 。注意两者都没有横杠。(这点与其他命令不一样,搞得我老是多打了一个横杠)
几点使用注意事项
-
在解码时,如果不带任何选项,源码及资源均会被反编译,并且其中的xml文件是可读状态的,此时可以修改xml及相关资源文件(可以通过apktool.yml修改应用的版本名及版本号等,修改AndroidManifest.xml文件等)。 最后再打包成apk文件。这种情况下,部分应用修改了xml后打包会报错(可能是应用做啥安全措施)。
-
针对如上方法报错的应用,可以尝试在解码时加入 -r 及 -s 选项,分别对应不解码资源及不解码源代码。但是此时解码后的文件均是二进制的,不方便修改。 此时可以尝试使用github上的AXMLEditor工具修改二进制文件。
修改完成后,再打包。 -
如果上述方法有错,可以尝试将应用改成zip文件,在解压状态下查看里面的文件,直接用修改好的AndroidManifest文件替换。
如果在最后的签名阶段也报错,可以尝试将META-INF文件夹删除后再加签。 -
签名最好使用apksigner命令,jarsigner命令有时会报错。