Apktool 是一个反编译Android Apk的第三方工具。它可以反编译资源,并在进行修改之后重新打包Apk。
官网:Apktool - A tool for reverse engineering 3rd party, closed, binary Android apps.
注意:apktool 依赖 Java1.8。请使用 java -version 查看,是否为1.8或更高版本。
主要的安装流程:
1、下载运行脚本,根据不同平台保存为不同的名字。--- 运行脚本非必须,但可以避免一次次的重复敲 java -jar ... 来执行操作
2、下载最新版本的 apktool.jar --- 下载后可能不叫这个名字,但是通过脚本运行的话,要求为这个名字,修改为这个就行
3、将脚本和jar放到同一个目录下 --- 官方建议放到指定目录,我试过Windows和Mac,并不是一定要放到指定目录,也可以正常使用
4、进入命令行,cd 到相应目录,执行命令
官网安装教程
apktool目录
apktool的官网上详细介绍了如何build源码生成apktool:Apktool - Build Guide
apktool集合了几个子工程和依赖到一个工程中。其中包括:
brut.apktool.lib - 主工程,主要逻辑代码
brut.apktool.cli - 命令行接口工程
brut.j.dir - 工具工程
brut.j.util -工具工程
brut.j.common -工具工程
要求JDK8,git(不从github上clone代码则不需要git)
build的步骤:
1、clone或者下载代码
git clone git://github.com/iBotPeaches/Apktool.git
2、在命令行中,进行到项目根目录下,执行gradlew.bat脚本,其他基于unix的系统执行./gradlew
3、打包shadowJar,此jar包会将依赖都打包进去。
gradlew.bat build shadowJar
4、打包混淆过的jar
gradlew.bat build shadowJar proguard
输出目录:./brut.apktool/apktool-cli/build/libs/apktool-xxxxx.jar
特别注意:Windows平台下,目录深度不能超过255个字符。目前apktool项目最深目录达到218个字符!所以apktool根目录的存放路径不能超过37个字符!!!
反编译命令:apktool d apk路径
执行过程中会输出主要步骤log
反编译apk
4、反编译结束后,反编译的内容均在目录下的 相应文件夹下 -- 文件夹名字与apk同名
反编译成功
假如你进行了修改,现在进行重新打包
命令:apktool b 项目目录
我们使用的就是上一步反编译后,生成的目录
重新打包工程中,同样会输出主要步骤的log
重新打包
重新生成的apk位于目录中的 dist 目录下,如图
重新生成的apk
需要注意的是,重新生成的apk,是没有经过签名的,不能直接进行安装。
1:重新打包:.\apktool b G:\code\mirrors-Apktool-master\Apktool\scripts\windows\water
2:生成签名:keytool -genkey -alias water.keystore -keyalg RSA -validity 40000 -keystore water.keystore
3: apk重新签名:jarsigner -verbose -keystore water.keystore water.apk water.keystore