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位数的问题。
  • 解决了由于记录压缩导致长路径命令的问题。

结语

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容