一.環境要求
- 安裝java 1.8 以上
- 命令列運行 java -version 回傳版本大于1.8
- 如果沒有,請安裝java 1.8
二.下載與安裝
- 下載apktool_x.x.x.jar到本地 官網下載或者 鏡像下載
- 重命名下載的apktool_x.x.x.jar,改名為apktool.jar
- 下載腳本并配置
- Windows
-
寫個bat腳本放在同一目錄下
@echo off set PATH=%CD%;%PATH%; java -jar -Duser.language=en "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9 -
兩個檔案放在同一目錄,后將該目錄添加到您的環境變數系統PATH變數中
-
- Linux
-
寫個sh腳本放在同一目錄下
#!/bin/bash #關閉已運行的 pid = ps-ef| grep apktool.jar| grep -v | awk `{print $2}` kill -9 $pid echo "$pid行程終止" sleep2 #后臺啟動 nohup java -jar apktool.jar -
將兩個檔案(apktool.jar&apktool)移動到/usr/local/bin
-
確保兩個檔案都可執行(chmod +x1)
-
- Mac OS
- 寫個sh腳本放在同一目錄下
- 將兩個檔案(apktool.jar&apktool)移動到/usr/local/bin
- 確保兩個檔案都可執行(chmod +x)
- Windows
- 命令列中輸入 apktool 驗證
三.使用
1.反編譯
使用 d 或者 decode 命令
apktool d apk檔案路徑
apktool decode apk檔案路徑
// 效果一樣 反編譯
apktool d apk檔案路徑 o 解壓目錄
2.重新打包
使用 b 或 build
apktool b 解壓后的專案目錄 -o 新apk的名字
// 重新打包生成的 apk 需要簽名才能安裝
3.拓展反編譯的配置
#-api, --api-level <API>
指定生成smali檔案所用的api等級,默認使用targetSdkVersion版本
#-b, --no-debug-info
防止baksmali寫出除錯資訊(.local,.param,.line等),如果您要比較來自不同版本的同一APK的smali,則首選使用,
#-f, --force
如果反編譯的目標目錄存在,將會被強制清空
#--force-manifest
強制反編譯 AndroidManifest.xml檔案,優先級高于 -s, --no-src 配置,
#--keep-broken-res
如果出現 "Invalid Config Flags Detected. Dropping Resources..." 錯誤,這表示apk中有apktool不能識別的結構,可能是apktool不支持的更新的api版本,亦或者是該apk為不規則的apk,你可以添加此配置,以跳過錯誤,但后續你需要手動修復這些錯誤,
#-m, --match-original
將各檔案處理為最接近原生的形式,將會導致不能備重新打包,
Ps:我試了下,格式確實更接近原生,但是我重新打包也是成功了(打包成功,但并未簽名安裝),
#--no-assets
不處理和拷貝屬于 unknown 的資源檔案,
#-o, --output <DIR>
指定輸出目錄
#--only-main-classes
只反編譯apk根目錄下的dex檔案,如:classes[0-9].dex
通過閱讀原始碼發現,此配置的作用為:反編譯根目錄下的以 classes 開頭,并以 .dex 結尾的dex檔案,不僅限于0-9
#-p, --frame-path <DIR>
指定存盤和加載framework的目錄
#-r, --no-res
不反編譯資源,保留 resources.arsc 為原來的樣子,如果你只是需要修改代碼,此配置會加快反編譯和重新打包的速度,
#-s, --no-src
不反編譯代碼,即不處理 dex檔案,如果你只是需要修改資源,此配置會加快反編譯和重新打包的速度,
#-t, --frame-tag <TAG>
使用指定的framework進行反編譯,前文有述,
4.拓展重新打包配置
#-a, --aapt <FILE>
指定使用的aapt,當指定目錄未找到aapt時,會使用apktool自帶的aapt進行處理,
#-api, --api-level <API>
指定處理smali檔案的api版本,默認使用minSdkVersion版本
#-c, --copy-original
拷貝原始 AndroidManifest.xml and META-INF 到apk包體中,將會在2.5.0版本移除此功能,
#-d, --debug
在 AndroidManifest 加入 debuggable="true" 配置
此配置,不會覆寫已經存在的debuggable配置,
#-f, --force-all
當生成的檔案存在時,進行強制覆寫
#-nc,--no-crunch
此配置會傳遞給aapt,參閱:
Expose the aapt --no-crunch option by Novex · Pull Request #1849 · iBotPeaches/Apktool · GitHub
aapt build in apktool is not support new options · Issue #1232 · iBotPeaches/Apktool · GitHub
禁止對資源檔案的處理
#-o, --output <FILE>
指定apk的輸出目錄
#-p, --frame-path <DIR>
指定加載framework的路徑
#--use-aapt2
使用aapt2進行打包
5.編譯后目錄打開
#subl進行打開
#subl的安裝http://www.sublimetext.com/3
subl 反編譯后檔案目錄
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/109007.html
標籤:Python
