這篇主要介紹下Apktool 的基本用法。掌握之後,可以做到
1.反編譯apk為smali 語言
2.二次重新打包apk
Apktool官方文檔地址,如有能力,儘量直接查閱官方文檔,本篇文章主要參考官方文檔。
Decoding 反編譯為Smali 語言
<code>apktool d demo.apk -o demo/<code>
這樣一行代碼就搞定,簡單解釋下參數的意義。
d 表示decode ,反編譯,與之對應的是building,編譯。demo.apk 是要反編譯的目標apk, -o 表示輸出地址 ,如果沒有 -o 參數,默認在當前文件夾。
反編譯之後的文件夾目錄結構如下
反編譯文件目錄結構.png
AndroidManifest.xml 是 Android 項目中的清單文件,可以直接打開查看
res 是資源文件,layout 和 value 都在這裡
smali 文件夾 是相關的Java 代碼轉換為 Smali 語言後的文件。
現在,如果是簡單的產看 App 的 UI結構或者使用某些資源,直接拿走即可。
下面介紹下怎麼將反編譯之後的文件,在重新打包為 Apk,前提是沒有修改任何文件。
Building 重新編譯Smali 文件為 Apk
<code>apktool b demo -o demo_unsigned.apk/<code>
很簡單的一個命令,說下各個參數的意義
b,表示 building,編譯,與之對應的是 decoding。
demo 文件夾表示要編譯的目標文件夾 -o 表示輸出文件名和路徑。編譯好之後的apk 是沒有簽名的。
在部分平臺下,編譯時提示缺少部分資源文件,需要安裝 framework.apk 文件,執行下面的命令即可
1.判斷是否安裝有 framework-res.apk
<code>apktool if framework-res.apk/<code>
2.安裝 framework-res.apk
<code>apktool if framework-res.apk/<code>
framework.apk 在手機上 /system/framework 目錄下,複製出來即可。
閱讀更多 北漂程序員大鬆 的文章