APKTool,是由GOOGLE為大家提供的一款APK編譯工具,如果你要修改apk文件,那么這個軟件是必不可少的,非常的好用,需要Java運行環境,本版本為最新版。
尤其是在反編譯HTC Rom的系統文件時,工具不能自動安裝com.htc.resources.apk框架文件,導致不能正常的反編譯系統文件,因此我結合個人使用經驗加以優化!
本工具包含7個功能:
反編譯APK
回編譯apk
回編譯APK,并簽名Apk
簽名APK功能
安裝反編譯系統APK所需的framework-res框架
安裝反編譯系統APK所需的com.htc.resources框架(僅限HTC Rom)
清理上次反編譯生成的apk、framework文件夾
復制代碼
普通APK:
1:將Apk文件拖到ApkModify.bat上,會自動完成反編譯
2:將反編譯文件夾(.b-sf后綴)拖到ApkModify.bat上,會自動完成回編譯
注:本工具僅限編譯與反編譯,無優化和簽名功能!
系統APK:
需要將系統APK,framework-res.apk放置到APKTool目錄里,并將系統apk改名為123.apk(如果是HTC Rom你還需要將com.htc.resources.apk也放到目錄里)
選擇5安裝框架framework-res(HTC Rom還需要選擇6安裝com.htc.....)
打開APKTool,選擇1進行反編譯操作
完成后會生成一個apk文件夾,大家可以進行改代碼、換圖標等操作!
注:完成后選擇2進行回編譯,切勿簽名!
1:反編譯非系統apk前需要把APK命名為123.apk
2:反編譯系統apk時需要將Rom的framework-res.apk放置在此目錄下,選擇數字5執行安裝!如果是HTC的Rom,你還需要將com.htc.resources.apk也安裝一次!
3:反編譯之前如果目錄里有上次反編譯產生的apk,framework文件夾,需要先清除,否則不能正常反編譯!數字7可以快速清理!
如果你想對APK文件進行修改,那么就不可避免的要使用到APKTool。相信各位有不少人看了后都想親自來修改一番,但是結果卻是遇到了各式各樣的錯誤卻無法進行改正,甚至都不知道自己錯在哪里。
一.APKTOOL使用環境配置
1.安裝JAVA并設置環境變量。
下載安裝都很簡單,關鍵是安裝完后還需要親自設置環境變量以方便其他程序能夠條用JAVA。
以WIN7為例,在桌面上右鍵點擊計算機——>屬性——>高級系統設置——>環境變量——>在下邊的系統變量里新建一個變量,變量名為JAVA_HOME,值為JAVA的安裝路徑,比如我的是H:\ProgramFiles\Java\jdk1.6.0_26
二.APKTool的安裝
1.其實這個談不上安裝,不過如果你愿意的話可以把下載到的APKTOOL中的三個文件(aapt.exe、apktool.bat、apktool.jar)解壓縮到你的Windows安裝目錄下,以方便使用Dos命令.
2.可能有些人下載的APKTOOL里有個安裝的bat文件,并且有另外兩個方便使用的bat文件,在這里我不推薦大家使用這些bat文件,雖然使用起來很方便(其實我并不覺得方便),但是如果出現錯誤不方便查看。
三.APKTool的使用
1.decode
該命令用于進行反編譯apk文件,一般用法為
apktool d <file.apk> <dir>
<file.apk>代表了要反編譯的apk文件的路徑,最好寫絕對路徑,比如C:\MusicPlayer.apk
<dir>代表了反編譯后的文件的存儲位置,比如C:\MusicPlayer
如果你給定的<dir>已經存在,那么輸入完該命令后會提示你,并且無法執行,需要你重新修改命令加入-f指令
apktool d –f <file.apk> <dir>
這樣就會強行覆蓋已經存在的文件
2.build
該命令用于編譯修改好的文件,一般用法為
apktool b <dir>
這里的<dir>就是剛才你反編譯時輸入的<dir>(如C:\MusicPlayer),輸入這行命令后,如果一切正常,你會發現C:\MusicPlayer內多了2個文件夾build和dist,其中分別存儲著編譯過程中逐個編譯的文件以及最終打包的apk文件。
3.install-framework
該命令用于為APKTool安裝特定的framework-res.apk文件,以方便進行反編譯一些與ROM相互依賴的APK文件。具體情況請看常見問題
四.常見問題
1.關于安裝和管理framework文件
以下大部分其實是翻譯自http://code.google.com/p/android-apktool/wiki/FrameworkFiles
一般來說,你在使用apktool進行反編譯前不需要做其他的事情,然而由于有的廠商,如HTC,三星等,他們定制了framework文件并且在他們的系統應用中使用了這些文件,這時,為了能正常的反編譯這些apk文件,你就必須從你的設備中拷貝出framework文件并且安裝到apktool中。
舉一個例子,比如你想反編譯HTCHero這款手機中的HtcContacts.apk,當你嘗試反編譯的時候,你會得到以下錯誤信息。
$ apktool d HtcContacts.apk
I: Loading resource table...
I: Decoding resources...
I: Loading resource table from file: /home/brutall/apktool/framework/1.apk
W: Could not decode attr value, using undecoded value instead: ns=android, name=drawable, value=0x02020542
...
W: Could not decode attr value, using undecoded value instead: ns=android, name=icon, value=0x02020520
Can't find framework resources for package of id: 2. You must install proper framework files, see project website for more info.
復制代碼
這就是在通知你必須先安裝HTC定制的framework文件,事實上在修改一些三星的系統應用時也是如此。
以三星的設備來舉例,你需要復制兩個framework文件來進行安裝,framework-res.apk和tzframework-res.apk,一般來說,這兩個文件在手機中的位置應該是system\framework\
使用以下代碼進行安裝
apktool if C:\framework-res.apk
apktool if C:\tzframework-res.apk
這里假設2個文件都放在C盤根目錄
2.直接用build編譯后在dist中找到的apk文件無法使用
其實這個問題我也不是特別理解,目前知道的就是,APK文件雖然本質是個zip文件,但是事實上zip包中的文件是按照兩種方式壓縮的,即XML文件進行deflate壓縮,其他文件不進行壓縮(使用store存儲),而直接編譯得到的APK文件對任何的文件都進行了deflate壓縮,因此你會發現編譯得到的文件比原文件小好多。
同樣的,當你使用build文件夾中的文件替換原apk文件中的資源時,請務必確認是使用store存儲還是deflate壓縮
3.其他錯誤
其實在編譯過程中會遇到很多其他的問題,大多數是由于刪除、修改、添加了資源后,沒有對應的修改res\values\public.xml文件而造成的,這里我給大家說下修改的原則:
第一,public.xml文件中的資源不能重復定義。
第二,public.xml文件中的任意兩個資源的ID不能一樣
第三,public.xml文件中定義的資源必須能找到該文件(如果你刪除了一些文件,必須要對應的刪除public.xml中的該行)
第四,public.xml文件中盡可能全面(如果你添加了某資源,最好確保在public.xml中也添加
熱門評論
最新評論
發表評論 查看所有評論(0)