APK應用程序的解包、修改、編輯、打包及應用(一)

APK應用程序的解包、修改、編輯、漢化、打包及應用

前兩講主要講玩機的最基本的知識,集中在如何刷機。本講是進級的內容,來談談與apk應用程序有關的知識,內容包括akp文件的解包、打包、反編輯、解析、漢化、修改等內容,也介紹幾個常用的軟件。最後要介紹對apk操作有哪些應用,學會了能幹些什麼。

這些內容實際上構成了一個很大的課題,用簡短的文字無法描述清楚。我準備用三個部分來介紹如下內容:
第一部分:apk應用介紹,解包和打包,常用軟件工具
第二部分:三星閉源系統apk文件的處理,漢化和簽名
第三部分:介紹apk文件打包解包的各種應用


第一部分是基礎知識,第二部分進入實戰修改apk應用程序,最後在第三部分來介紹APK應用程序的修改和編輯的各種各樣實際應用。

----------------------------------------------------------------------------------

第一部分:apk應用介紹,解包和打包,常用軟件

http://blog.csdn.net/kuangren_01/article/details/9318977

第二部分:三星閉源系統apk文件的處理,漢化和簽名

http://blog.csdn.net/kuangren_01/article/details/9319027

第三部分:介紹apk文件打包解包的各種應用

http://blog.csdn.net/kuangren_01/article/details/9319049

相信每爲機友對APK文件都不陌生。你可能每天都與APK文件打交道,無論是安裝和卸載有用的應用工具、插件、好玩的遊戲等等。。。尤其是最近關於2.3.4 XXJVP ROM的漢化,更成爲論壇裏的熱門話題。你們可曾知道ROM是怎樣漢化的嗎?說來容易做來難。這裏要涉及很廣泛的知識、手段,以及要花大量的時間。

1. APK文件簡介

APK是Android Package的縮寫,即Android application package文件或Android安裝包。每個要安裝到Android平臺的應用都要被編譯打包爲一個單獨的文件,擴展名爲 .apk。APK文件是用專業軟件eclipse編譯生成的文件包,其中包含了應用的二進制代碼、資源、配置文件等。通過將APK文件直接傳到Android手機中執行即可安裝。APK文件其實就是zip格式,但其擴展名被改爲apk,在Windows下用解壓軟件WinRAR/WinZIP/7-Zip可以直接打開。解壓後,你會看到有幾個文件和文件夾。一個典型的APK文件通常有下列內容組成:
AndroidManifest.xml 程序全局配置文件
classes.dex Dalvik字節碼
resources.arsc 編譯後的二進制資源文件
META-INF\ 該目錄下存放的是簽名信息
res\ 該目錄存放資源文件
assets\ 該目錄可以存放一些配置文件


下面對這些文件和目錄做些基本的註釋和介紹:
• AndroidManifest.xml
該文件是每個apk應用程序都必須包含的文件,它描述了應用程序的名字、版本、權限、引用的庫文件等等信息。
• classes.dex文件
classes.dex是java源碼編譯後生成的java字節碼文件。dex是Dalvik VM executes的全稱,即Android Dalvik執行程序。利用解析工具可以將其轉換成java來加以閱讀和理解。
• resources.arsc
編譯後的二進制資源文件。在做主題美化時要常與這個文件打交道。
• META-INF目錄
META-INF目錄下存放的是簽名信息,有三個簽名文件,用來保證apk包的完整性和系統的安全。在eclipse編譯生成一個apk包時,會對所有要打包的文件做一個校驗計算,並把計算結果放在META-INF目錄下。這就保證了apk包裏的文件不能被隨意替換。比如拿到一個apk包後,如果想要替換裏面的一幅圖片,一段代碼, 或一段版權信息,想直接解壓縮、替換再重新打包,基本是不可能的。如此一來就給病毒感染和惡意修改增加了難度,有助於保護系統的安全。
• res目錄
res目錄存放資源文件。包括圖片,字符串等等。res下有若干個子目錄,主要爲drawable,layout,xml。
解包後,幾乎所有可能的修改和編輯工作基本都在這裏。漢化ROM的主要工作就在這裏。漢化ROM實際上就是漢化所有的apk應用程序的字符文件。
• assets目錄
assets目錄可以存放一些配置文件,這些文件的內容在程序運行過程中可以通過相關的API獲得。


下面以“設置”應用程序Settings.apk爲例。用WinRAR打開文件後,看到以上介紹的六項內容。現在,即使你已經對文件解壓,你還是無法直接閱讀每個文件的內容。爲了讀出這些文件的內容,從而進行進一步的修改和編輯,你就必須具有相應的工具了(請到第二節)。
apk-01.gif

2011-6-27 22:08 上傳
下載附件(59.35 KB)


2. APK應用程序的解包和打包工具

這一節主要介紹在Windows系統中常用的幾個工具包,用來對apk應用程序進行解包、打包、反編譯、解析。所有apk工具包都要求java環境(這個我就不介紹了,自己學習去吧)。這些工具可以從網上各個論壇獲取。我在近一個月裏收集了幾個常用的工具包,我會打包上傳與有志於對apk進行操作的機友分享。主要推薦有三個工具包。

1) apktool

apktool可能是當今最爲流行的apk工具包,由解包、打包、簽名程序組成。被稱之爲“apk反編譯利器”。去Google一下apktool,有非常多的資源,無論是軟件下載,還是使用教程。對非三星的應用程序進行操作,很好用。
打開apktool工具包,看到如下內容:
apk-02.gif
2011-6-27 22:09 上傳
下載附件(34.99 KB)

Akp程序的解包和打包軟件由2個程序來完成:apktool.jar 和 aapt.exe。
另外提供一個批處理文件:apktool.bat,其內容爲:
java -jar "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9

運行apktools.jar需要java環境(1.6.0版本以上)。apktool.jar用於解包,apktool.jar和aapt.exe聯合用於打包。testkey.pk8和testkey.x509.pem是簽名程序。

解包命令:
apktool d xxxxxx.apk ABC
這裏“d”表示要解碼。Xxxxx.apk是要解包的APK文件。ABC是子目錄名。解包的文件會放在這個子目錄內。


打包命令:
apktool b ABC yyyyy.apk
這裏“b”表示要打包,ABC是子目錄名,是解包時產生的子目錄,用來存放所有解包後的和修改後的文件。yyyyy.apk是打包後產生的新的APK文件。


在上傳的apk工具包裏,已經另外加了兩個批處理文件:Unpack-apk.bat和Repack-apt.bat。前者用於apk的解包過程,後者用於編輯後的文件的打包和簽名。把待解包的apk文件放到Unpack-apk.bat的同一個目錄裏,雙擊Unpack-apk.bat,apk文件解包開始,產生3個子文件夾,解包後的文件被放在Working_APK文件夾內。詳細內容將在第二部分描述。另外,批處理文件允許同時對多個apk文件順序進行解包和打包。

注意:文件名裏不允許有空格,不能有中文。
使用前,要先安裝框架文件:apktool if framework-res.apk
如果是三星系統,還要安裝:apktool if twframework-res.apk


2) apk manager

apk manager是另一個“apk反編譯利器”。它比apktool工具包還要強大些。三星的許多apk系統應用程序用了三星的閉源系統,用apktool可以解包,但是打包不成功。這時,apk manager就好用了。

打開apk manager工具包,看到如下內容。軟件都放在other子目錄裏。運行apk manager要求adb工具包(見下圖中的3個adb文件)。把待解包的apk文件放到place-apk-here-for-modding子目錄裏,雙擊腳本批處理程序Script.bat,選擇選項:9,產生一個子文件夾projects,解包後的文件被放在這個子文件夾內。詳細內容將在第二部分描述。
apk-03.gif
2011-6-27 22:09 上傳
下載附件(37.64 KB)

在使用時,有時apktool和apk manager交替使用,一個不行就用另外一個。 所以,在編輯apk應用程序時兩者都要掌握。

注意:文件名裏不允許有空格,不能有中文。
使用前,要先安裝框架文件:apktool if framework-res.apk
如果是三星系統,還要安裝:apktool if twframework-res.apk



3) Dex2jar和XJad

該方法不是直接對apk文件進行解包。它是首先提取apk文件內的classes.dex文件,然後使用dex2jar.jar工具包將classes.dex解包成jar文件,再通過XJad 或者其他class反編譯工具進行java反編譯,最後生成java源文件。
但是,使用這個工具包無法進行classes.dex的還原(當然也無法進行apk的打包)。儘管如此,這個工具包仍然很重要,因爲它把classes.dex文件轉換成了可以更容易閱讀的java源文件。在修改apk應用程序時,必不可少,是一極強的輔助工具。相比之下,apktool和apk manager反編譯後得到的是Dalvik 反編譯碼 (Dalvik opcodes),需要很專業的知識來閱讀,很不直觀。如果你讀懂了java源文件,那修改相對應的Dalvik碼不就容易多了嗎。

4) 其它工具包簡介

此外,還有許多工具包可用。這些也容易在網上找到。
a) DoAPK
DoAPK實際上就是apktool工具包。有人把apktool寫成了帶窗口界面的可執行文件。
b) Google Smali
有兩個程序:baksmali.jar和smali.jar。baksmali.jar用來反解析dex和odex文件,得到Dalvik碼。然後用smali.jar還原成dex文件。例如,在修改狀態欄時間顯示顏色時,要用的這兩個解析程序。
c) AXMLPrinter2.jar
AXMLPrinter2.jar對apk文件內的 AndroidManifest.xml和main.xml進行操作,將XML還原成文本文件,便於閱讀。
d) Apkdb
是一個集成apktool,smali,Dex2jar,簽名等功能的工具。
e) 其它工具
不再介紹。自己動手到網上去搜索吧。


我把這些收集到的apk工具包打包上傳,供你們使用,免得你們找來找去。

集成Apk工具包下載地址:
http://download.csdn.net/detail/kuangren_01/5747419
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章