Apktool 编译源码需要知道的事情

前言

  Apktool 是一个常用的Android APK反编译工具,它可以将资源解码为几乎原始的形式,并在进行一些修改后重新构建它们。多用于逆向工程和SDK方向。

声明

本文讲解内容均来自Apktool官网 对内容进行翻译与解释,请勿纠结。

1.Apktool的安装

1.1 安装前的检查

1.需要安装JAVA 1.8

2.命令提示符下执行 java -version 查看jdk版本是否是JAVA 1.8

3.如果不是JAVA 1.8 会有一些莫名其妙的问题

1.2 安装Apktool

install.png

官网上分步骤说的有点啰嗦,单针对window系统简述一下:

1.可以通过find newest here 或者Current Version: 2.4.1链接下载不同版本的apktool的jar包。

(下载下来的文件名称apktool_2.x.x.jar,为了演示方便命名为apktool.jar)

2.写一个批脚本(详细看目录1.2.1)把批脚本apktool.bat和apktool.jar两个文件放在
C:\Windows\System32下(这种方式不需要单独配置环境变量)

apktool.bat.png
  1. 将两个文件(apktool.bat和apktool.jar)放在任何位置,然后将该目录添加到您的环境变量系统PATH变量中(与上面不需要单独配置2选1即可,3.这种方式需要单独配置环境变量)

说明:批脚本(apktool.bat)不是必需的,但很有用因为你不需要java -jar apktool.jar一遍又一遍地敲。

官网说两个文件建议放到C://Windows下,我个人习惯是放到C:\Windows\System32下。

我是按简述步骤2来的 ,可以在window任意盘符下执行 apktool 命令行,如下图所示:

apktool version.png

1.2.1 apktool.bat批处理脚本

@echo off
java -jar "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9

说明:apktool.bat和apktool.jar 一定在同一路径下 ,如果的apktool 格式是apktool_2.4.1.jar需要改下脚本如下:

@echo off
java -jar "%~dp0\apktool_2.4.1.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9


2.手动构建Apktool源码

Apktool是1个项目的集合,其中包含子项目和一些依赖项。

  • brut.apktool.lib-(主程序入口)
  • brut.apktool.cli-程序的命令行接口
  • brut.j.dir-工具库
  • brut.j.util-工具库
  • brut.j.common-工具库

Apktool项目git地址 : https://github.com/iBotPeaches/Apktool

2.1 构建步骤(基于Window系统)

  1. 我们使用gradle构建。很简单 clone 仓库 命令如下:

git clone https://github.com/iBotPeaches/Apktool

git clone.png
  1. cd Apktool 进入Apktool文件夹
cd apktool.png
  1. window执行gradlew.bat脚本,其他基于unix的系统执行./gradlew

  2. 构建Apktool生成jar包,生成的jar包含所有的依赖

    gradlew.bat build shadowJar (Window系统)

    ./gradlew build shadowJar (基于Unix的系统)

  3. 构建一个混淆过的Apktool.jar(可选项)

    gradlew.bat build shadowJar proguard (Window系统)

    ./gradlew build shadowJar proguard (基于Unix的系统)

window gradlew.bat .png
  1. windows输出目录路径(我把Apktool项目 clone 到了我的桌面):
output.png

生成出来的新的apktool-cli-all.jar 查看apktool 版本

apk-version.png

2.2 Windows上的限制

Windows在最大文件路径方面有一些限制,不能超过255个字符。Apktool项目中本身有218个字符的目录路径,这也就意味着apktool项目的存放路径不能超过37个字符!!!

这样以来,官方建议我们将此项目克隆到该位置:

C:/Users/Administrator/Desktop/Apktool (我的存放的项目路径也是该位置)

3.最新两个版本Apktool的变化

v2.4.2(暂未对外发布)

2020.xx.xx

  • gradle升级到 6.4.1
  • 添加了JAVA_HOME对Windows环境的支持(如果已定义)。
  • 更新许可证标题以反映开始版权日期并删除javadoc样式。
  • 修复了多线程环境中二进制名称冲突的问题。
  • 解决了resources.arsc在框架文件中压缩文件的问题。
  • 解决了压缩空文件破坏应用程序的问题。
  • 修复了在使用aapt2时使用调试模式进行处理的问题。
  • 如果参数无效,则正确返回非零错误。
  • 支持的新compileSdkVersion属性SdkInfo

v2.4.1

2019.11.19

  • 将baksmali / smali更新为2.3.4版
  • 升级到 gradle 5.6.2
  • 添加了对Android Q(10)Final的支持。
  • 修复了由于jmod更改而导致的JDK9 +构建问题。
  • 修复了通过目录遍历将资产解压缩到意外位置的安全问题。
  • 修复了api级命令在高级文档中未显示的问题。
  • 修复了未创建框架目录时目录创建警告的问题。
  • 解决了缺少Q速记属性映射的问题。
  • 解决了复制资产时输出目录与初始结构不匹配的问题。
  • 解决了反序列化期间属性值为空的NPE的问题。
  • 修复了删除META-INF /服务的问题。
  • 固定支持“ attr”类型。
  • 修复了AOSP / Android4Me文件的擦拭许可证标头。
  • 为Windows添加了增强的包装器文件。
  • 添加了Advance命令,以跳过非root dex软件包的反汇编。
  • 修复了MIUI包名称被重命名的问题。
  • 解决未压缩文件列表中大型9patch路径垃圾邮件的问题。
  • 修复了NPE注释的问题
  • 解决了乱码属性的问题
  • --only-main-classes修正了回归
  • 修复了Window aapt / aapt2构建的32位二进制问题。
  • 修复了JVM在某些情况下不了解Windows位数的问题。
  • 解决了由于记录压缩导致长路径命令的问题。

结语

记录下自己的学习和工作经验,分享给有需要的人。如果有那里写的不对,说的不理解,欢迎大家的指正。

你可能感兴趣的:(Apktool 编译源码需要知道的事情)