1. 程式人生 > >ubuntu下apktool安裝及使用

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)檢視幫助

待續