ubuntu下apktool安裝及使用
apktool安裝
1.從官網下載
網址:https://code.google.com/p/android-apktool/downloads/list
或者我已經下載好的
apktool1.5.2.tar.bz2
linux系統下
apktool-install-linux-r05-ibot.tar.bz2
儘量下載最新版本,避免版本太低不能使用
2.將檔案解壓提取出來
apktool1.5.2.tar.bz2 ----》apktool.jar
apktool-install-linux-r05-ibot.tar.bz2 -------》aapt apktool
3.將三個檔案copy到 /usr/local/bin下
到三個檔案所在目錄下
sudo cp -i aapt apktool apktool.jar /usr/local/bin/
4.在任何目錄下都可以執行 apktool 進行操作
apktool使用
反編譯launcher.apk失敗
apktool
d xxx/xxx.apk
目標檔案
夾
Exception in thread "main" brut.androlib.AndrolibException: Multiple resource
需要獲取android 系統 framework-res.apk 在/system/framework下
如果你是要編譯系統檔案的話,請將你要修改的rom裡的framework-res.apk(暫時叫做依賴包)用CMD模式“安裝”下。
這樣編譯才不會出錯。
注意:很重要,很多人不成功就是因為沒做。
1.通過adb sell 獲取 framework-res.apk
adb root 獲取root許可權
adb remount 設定/system為可讀寫
adb pull /system/framework/framework-res.apk
D:\
當然後面的路徑D:\是隨你自己喜歡的,但是要注意空格 這樣將framework-res.apk檔案下載到PC你選的路徑下,
{{{{執行之前將\{NDK ROOT}\android-sdk\platform-tools目錄加至環境變數中,或者在執行命令之前切換至adb.exe所在的目錄,CD \{NDK ROOT}\android-sdk\platform-tools。當然預設目錄為android-sdk\platform-tools\下,下載完以後,直接在PC上完成修改}}}}這段話,好像沒什麼用
2. 在framework-res.apl路徑下
(1)apktool if framework-res.apk
(2)如果有定製:再次執行
apktool if xxxx-res.apk
結果:I: Framework installed to: /home/xxx/apktool/framework/1.apk
I: Framework installed to: /home/xxx/apktool/framework/2.apk
3.繼續執行apktool d
apktool d xx.apk 目標資料夾名
獲得 res資料夾 ,AndroidManifest.xml , smali 資料夾, apktool.yml
4. apktool b 目標檔名
報錯:
Caused by: java.io.IOException: Cannot run program "aapt": java.io.IOException: error=13, Permission denied
at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
at java.lang.Runtime.exec(Runtime.java:593)
at java.lang.Runtime.exec(Runtime.java:466)
at brut.util.OS.exec(OS.java:84)
... 7 more
Caused by: java.io.IOException: java.io.IOException: error=13, Permission denied
at java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
at java.lang.ProcessImpl.start(ProcessImpl.java:65)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
... 10 more
解決方法:到sudo下
$ sudo apktool b 目標資料夾
結果:在目標資料夾中生成:build資料夾,dist資料夾
build:
dist:xx.apk
最近,由於apktool工具版本的升級和打包環境的升級,在使用apktool d -f xxx.apk時,會出現如下錯誤提示,
Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file
at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:56)
at brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibResources.java:491)
at brut.androlib.res.AndrolibResources.loadMainPkg(AndrolibResources.java:74)
at brut.androlib.res.AndrolibResources.getResTable(AndrolibResources.java:66)
at brut.androlib.Androlib.getResTable(Androlib.java:50)
at brut.androlib.ApkDecoder.getResTable(ApkDecoder.java:189)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:114)
at brut.apktool.Main.cmdDecode(Main.java:146)
at brut.apktool.Main.main(Main.java:77)
Caused by: java.io.IOException: Expected: 0x001c0001, got: 0x00000000
at brut.util.ExtDataInput.skipCheckInt(ExtDataInput.java:48)
at brut.androlib.res.decoder.StringBlock.read(StringBlock.java:44)
at brut.androlib.res.decoder.ARSCDecoder.readPackage(ARSCDecoder.java:102)
at brut.androlib.res.decoder.ARSCDecoder.readTable(ARSCDecoder.java:83)
at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:49)
... 8 more
解決辦法:
升級apktool
或者我下載好的
繼續:
在別處文章看到,可能翻牆從官網處搞到要求jdk為1,7 ,apktool為2.x
Quick Check
Apktool 2.x (Versions after 1.5.2)
Is Java 1.7 installed?
Does executing java -version on command line / command prompt return 1.7?
If not, please install Java 7 and make it the default.
Installation for Apktool 2.x
ubuntu:
將新的apktool.jar 代替原來的apktool.jar
又報錯:apktool -version
apktool: can't find apktool.jar
解決方法:將apktool apktool-v2.0.0RC2.jar重新命名為 apktool.jar 再次替換
接著執行
apktool -version
2.0.0-RC2
繼續:
apktool d xx.apk xxx
報錯:Input file (kuaiya) was not found or was not readable.
解決方法:
在某處看到有人這樣些命令:apktool d -f xxx.apk -o xxx
成功
apktool反編譯時經常會出現下面的資訊 1.Input file was not found or was not readable. 2.Destination directory (C:\Users\user\a) already exists. Use -f switch if you want to overwrite it. 3.Exception in thread "main" brut.androlib.AndrolibException: Could not decode ars c fil.......... 解決方案: 1和2是因為apktool升級到2.0以上時,使用方式已經替換,格式為:apktool d [-s] -f <apkPath> -o <folderPath>,引數具體的意思可以直接打apktool回車(windows)檢視幫助待續