Apktool 編譯源碼需要知道的事情

前言

??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

install.png

官網(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.png
  1. 將兩個文件(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 命令行,如下圖所示:

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.手動構(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))

  1. 我們使用gradle構(gòu)建。很簡單 clone 倉庫 命令如下:

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

git clone.png
  1. cd Apktool 進入Apktool文件夾
cd apktool.png
  1. window執(zhí)行g(shù)radlew.bat腳本,其他基于unix的系統(tǒng)執(zhí)行./gradlew

  2. 構(gòu)建Apktool生成jar包,生成的jar包含所有的依賴

    gradlew.bat build shadowJar (Window系統(tǒng))

    ./gradlew build shadowJar (基于Unix的系統(tǒng))

  3. 構(gòu)建一個混淆過的Apktool.jar(可選項)

    gradlew.bat build shadowJar proguard (Window系統(tǒng))

    ./gradlew build shadowJar proguard (基于Unix的系統(tǒng))

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(暫未對外發(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)驗,分享給有需要的人。如果有那里寫的不對,說的不理解,歡迎大家的指正。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容