前言
??Apktool 是一個常用的Android APK反編譯工具,它可以將資源解碼為幾乎原始的形式,并在進行一些修改后重新構(gòu)建它們。多用于逆向工程和SDK方向。
聲明
本文講解內(nèi)容均來自Apktool官網(wǎng) 對內(nèi)容進行翻譯與解釋,請勿糾結(jié)。
1.Apktool的安裝
1.1 安裝前的檢查
1.需要安裝JAVA 1.8
2.命令提示符下執(zhí)行 java -version 查看jdk版本是否是JAVA 1.8
3.如果不是JAVA 1.8 會有一些莫名其妙的問題
1.2 安裝Apktool
官網(wǎng)上分步驟說的有點啰嗦,單針對window系統(tǒng)簡述一下:
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下(這種方式不需要單獨配置環(huán)境變量)
- 將兩個文件(apktool.bat和apktool.jar)放在任何位置,然后將該目錄添加到您的環(huán)境變量系統(tǒng)PATH變量中(與上面不需要單獨配置2選1即可,3.這種方式需要單獨配置環(huán)境變量)
說明:批腳本(apktool.bat)不是必需的,但很有用因為你不需要java -jar apktool.jar一遍又一遍地敲。
官網(wǎng)說兩個文件建議放到C://Windows下,我個人習(xí)慣是放到C:\Windows\System32下。
我是按簡述步驟2來的 ,可以在window任意盤符下執(zhí)行 apktool 命令行,如下圖所示:
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.手動構(gòu)建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 構(gòu)建步驟(基于Window系統(tǒng))
- 我們使用gradle構(gòu)建。很簡單 clone 倉庫 命令如下:
git clone https://github.com/iBotPeaches/Apktool
- cd Apktool 進入Apktool文件夾
window執(zhí)行g(shù)radlew.bat腳本,其他基于unix的系統(tǒng)執(zhí)行./gradlew
-
構(gòu)建Apktool生成jar包,生成的jar包含所有的依賴
gradlew.bat build shadowJar (Window系統(tǒng))
./gradlew build shadowJar (基于Unix的系統(tǒng))
-
構(gòu)建一個混淆過的Apktool.jar(可選項)
gradlew.bat build shadowJar proguard (Window系統(tǒng))
./gradlew build shadowJar proguard (基于Unix的系統(tǒng))
- windows輸出目錄路徑(我把Apktool項目 clone 到了我的桌面):
生成出來的新的apktool-cli-all.jar 查看apktool 版本
2.2 Windows上的限制
Windows在最大文件路徑方面有一些限制,不能超過255個字符。Apktool項目中本身有218個字符的目錄路徑,這也就意味著apktool項目的存放路徑不能超過37個字符!!!
這樣以來,官方建議我們將此項目克隆到該位置:
C:/Users/Administrator/Desktop/Apktool (我的存放的項目路徑也是該位置)
3.最新兩個版本Apktool的變化
v2.4.2(暫未對外發(fā)布)
2020.xx.xx
- gradle升級到 6.4.1
- 添加了JAVA_HOME對Windows環(huán)境的支持(如果已定義)。
- 更新許可證標(biāo)題以反映開始版權(quán)日期并刪除javadoc樣式。
- 修復(fù)了多線程環(huán)境中二進制名稱沖突的問題。
- 解決了resources.arsc在框架文件中壓縮文件的問題。
- 解決了壓縮空文件破壞應(yīng)用程序的問題。
- 修復(fù)了在使用aapt2時使用調(diào)試模式進行處理的問題。
- 如果參數(shù)無效,則正確返回非零錯誤。
- 支持的新compileSdkVersion屬性SdkInfo
v2.4.1
2019.11.19
- 將baksmali / smali更新為2.3.4版
- 升級到 gradle 5.6.2
- 添加了對Android Q(10)Final的支持。
- 修復(fù)了由于jmod更改而導(dǎo)致的JDK9 +構(gòu)建問題。
- 修復(fù)了通過目錄遍歷將資產(chǎn)解壓縮到意外位置的安全問題。
- 修復(fù)了api級命令在高級文檔中未顯示的問題。
- 修復(fù)了未創(chuàng)建框架目錄時目錄創(chuàng)建警告的問題。
- 解決了缺少Q(mào)速記屬性映射的問題。
- 解決了復(fù)制資產(chǎn)時輸出目錄與初始結(jié)構(gòu)不匹配的問題。
- 解決了反序列化期間屬性值為空的NPE的問題。
- 修復(fù)了刪除META-INF /服務(wù)的問題。
- 固定支持“ attr”類型。
- 修復(fù)了AOSP / Android4Me文件的擦拭許可證標(biāo)頭。
- 為Windows添加了增強的包裝器文件。
- 添加了Advance命令,以跳過非root dex軟件包的反匯編。
- 修復(fù)了MIUI包名稱被重命名的問題。
- 解決未壓縮文件列表中大型9patch路徑垃圾郵件的問題。
- 修復(fù)了NPE注釋的問題
- 解決了亂碼屬性的問題
- --only-main-classes修正了回歸
- 修復(fù)了Window aapt / aapt2構(gòu)建的32位二進制問題。
- 修復(fù)了JVM在某些情況下不了解Windows位數(shù)的問題。
- 解決了由于記錄壓縮導(dǎo)致長路徑命令的問題。
結(jié)語
記錄下自己的學(xué)習(xí)和工作經(jīng)驗,分享給有需要的人。如果有那里寫的不對,說的不理解,歡迎大家的指正。