APK應(yīng)用程序的解包、修改、編輯、漢化、打包及應(yīng)用
前兩講主要講玩機(jī)的最基本的知識(shí),集中在如何刷機(jī)。本講是進(jìn)級(jí)的內(nèi)容,來(lái)談?wù)勁capk應(yīng)用程序有關(guān)的知識(shí),內(nèi)容包括akp文件的解包、打包、反編輯、解析、漢化、修改等內(nèi)容,也介紹幾個(gè)常用的軟件。最后要介紹對(duì)apk操作有哪些應(yīng)用,學(xué)會(huì)了能干些什么。
這些內(nèi)容實(shí)際上構(gòu)成了一個(gè)很大的課題,用簡(jiǎn)短的文字無(wú)法描述清楚。我準(zhǔn)備用三個(gè)部分來(lái)介紹如下內(nèi)容: 第一部分:apk應(yīng)用介紹,解包和打包,常用軟件工具 第二部分:三星閉源系統(tǒng)apk文件的處理,漢化和簽名 第三部分:介紹apk文件打包解包的各種應(yīng)用
第一部分是基礎(chǔ)知識(shí),第二部分進(jìn)入實(shí)戰(zhàn)修改apk應(yīng)用程序,最后在第三部分來(lái)介紹APK應(yīng)用程序的修改和編輯的各種各樣實(shí)際應(yīng)用。
----------------------------------------------------------------------------------
第一部分:apk應(yīng)用介紹,解包和打包,常用軟件
相信每為機(jī)友對(duì)APK文件都不陌生。你可能每天都與APK文件打交道,無(wú)論是安裝和卸載有用的應(yīng)用工具、插件、好玩的游戲等等。。。尤其是最近關(guān)于2.3.4 XXJVP ROM的漢化,更成為論壇里的熱門(mén)話(huà)題。你們可曾知道ROM是怎樣漢化的嗎?說(shuō)來(lái)容易做來(lái)難。這里要涉及很廣泛的知識(shí)、手段,以及要花大量的時(shí)間。
1. APK文件簡(jiǎn)介
APK是Android Package的縮寫(xiě),即Android application package文件或Android安裝包。每個(gè)要安裝到Android平臺(tái)的應(yīng)用都要被編譯打包為一個(gè)單獨(dú)的文件,擴(kuò)展名為 .apk。APK文件是用專(zhuān)業(yè)軟件eclipse編譯生成的文件包,其中包含了應(yīng)用的二進(jìn)制代碼、資源、配置文件等。通過(guò)將APK文件直接傳到Android手機(jī)中執(zhí)行即可安裝。APK文件其實(shí)就是zip格式,但其擴(kuò)展名被改為apk,在Windows下用解壓軟件WinRAR/WinZIP/7-Zip可以直接打開(kāi)。解壓后,你會(huì)看到有幾個(gè)文件和文件夾。一個(gè)典型的APK文件通常有下列內(nèi)容組成: AndroidManifest.xml 程序全局配置文件 classes.dex Dalvik字節(jié)碼 resources.arsc 編譯后的二進(jìn)制資源文件 META-INF\ 該目錄下存放的是簽名信息 res\ 該目錄存放資源文件 assets\ 該目錄可以存放一些配置文件
下面對(duì)這些文件和目錄做些基本的注釋和介紹: • AndroidManifest.xml 該文件是每個(gè)apk應(yīng)用程序都必須包含的文件,它描述了應(yīng)用程序的名字、版本、權(quán)限、引用的庫(kù)文件等等信息。 • classes.dex文件
classes.dex是java源碼編譯后生成的java字節(jié)碼文件。dex是Dalvik VM executes的全稱(chēng),即Android Dalvik執(zhí)行程序。利用解析工具可以將其轉(zhuǎn)換成java來(lái)加以閱讀和理解。 • resources.arsc
編譯后的二進(jìn)制資源文件。在做主題美化時(shí)要常與這個(gè)文件打交道。 • META-INF目錄
META-INF目錄下存放的是簽名信息,有三個(gè)簽名文件,用來(lái)保證apk包的完整性和系統(tǒng)的安全。在eclipse編譯生成一個(gè)apk包時(shí),會(huì)對(duì)所有要打包的文件做一個(gè)校驗(yàn)計(jì)算,并把計(jì)算結(jié)果放在META-INF目錄下。這就保證了apk包里的文件不能被隨意替換。比如拿到一個(gè)apk包后,如果想要替換里面的一幅圖片,一段代碼, 或一段版權(quán)信息,想直接解壓縮、替換再重新打包,基本是不可能的。如此一來(lái)就給病毒感染和惡意修改增加了難度,有助于保護(hù)系統(tǒng)的安全。 • res目錄
res目錄存放資源文件。包括圖片,字符串等等。res下有若干個(gè)子目錄,主要為drawable,layout,xml。 解包后,幾乎所有可能的修改和編輯工作基本都在這里。漢化ROM的主要工作就在這里。漢化ROM實(shí)際上就是漢化所有的apk應(yīng)用程序的字符文件。 • assets目錄 assets目錄可以存放一些配置文件,這些文件的內(nèi)容在程序運(yùn)行過(guò)程中可以通過(guò)相關(guān)的API獲得。
下面以“設(shè)置”應(yīng)用程序Settings.apk為例。用WinRAR打開(kāi)文件后,看到以上介紹的六項(xiàng)內(nèi)容?,F(xiàn)在,即使你已經(jīng)對(duì)文件解壓,你還是無(wú)法直接閱讀每個(gè)文件的內(nèi)容。為了讀出這些文件的內(nèi)容,從而進(jìn)行進(jìn)一步的修改和編輯,你就必須具有相應(yīng)的工具了(請(qǐng)到第二節(jié))。
2. APK應(yīng)用程序的解包和打包工具
這一節(jié)主要介紹在Windows系統(tǒng)中常用的幾個(gè)工具包,用來(lái)對(duì)apk應(yīng)用程序進(jìn)行解包、打包、反編譯、解析。所有apk工具包都要求java環(huán)境(這個(gè)我就不介紹了,自己學(xué)習(xí)去吧)。這些工具可以從網(wǎng)上各個(gè)論壇獲取。我在近一個(gè)月里收集了幾個(gè)常用的工具包,我會(huì)打包上傳與有志于對(duì)apk進(jìn)行操作的機(jī)友分享。主要推薦有三個(gè)工具包。
1) apktool
apktool可能是當(dāng)今最為流行的apk工具包,由解包、打包、簽名程序組成。被稱(chēng)之為“apk反編譯利器”。去Google一下apktool,有非常多的資源,無(wú)論是軟件下載,還是使用教程。對(duì)非三星的應(yīng)用程序進(jìn)行操作,很好用。 打開(kāi)apktool工具包,看到如下內(nèi)容:
Akp程序的解包和打包軟件由2個(gè)程序來(lái)完成:apktool.jar 和 aapt.exe。 另外提供一個(gè)批處理文件:apktool.bat,其內(nèi)容為: java -jar "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9
運(yùn)行apktools.jar需要java環(huán)境(1.6.0版本以上)。apktool.jar用于解包,apktool.jar和aapt.exe聯(lián)合用于打包。testkey.pk8和testkey.x509.pem是簽名程序。
解包命令: apktool d xxxxxx.apk ABC 這里“d”表示要解碼。Xxxxx.apk是要解包的APK文件。ABC是子目錄名。解包的文件會(huì)放在這個(gè)子目錄內(nèi)。
打包命令: apktool b ABC yyyyy.apk 這里“b”表示要打包,ABC是子目錄名,是解包時(shí)產(chǎn)生的子目錄,用來(lái)存放所有解包后的和修改后的文件。yyyyy.apk是打包后產(chǎn)生的新的APK文件。
在上傳的apk工具包里,已經(jīng)另外加了兩個(gè)批處理文件:Unpack-apk.bat和Repack-apt.bat。前者用于apk的解包過(guò)程,后者用于編輯后的文件的打包和簽名。把待解包的apk文件放到Unpack-apk.bat的同一個(gè)目錄里,雙擊Unpack-apk.bat,apk文件解包開(kāi)始,產(chǎn)生3個(gè)子文件夾,解包后的文件被放在Working_APK文件夾內(nèi)。詳細(xì)內(nèi)容將在第二部分描述。另外,批處理文件允許同時(shí)對(duì)多個(gè)apk文件順序進(jìn)行解包和打包。
注意:文件名里不允許有空格,不能有中文。
2) apk manager
apk manager是另一個(gè)“apk反編譯利器”。它比apktool工具包還要強(qiáng)大些。三星的許多apk系統(tǒng)應(yīng)用程序用了三星的閉源系統(tǒng),用apktool可以解包,但是打包不成功。這時(shí),apk manager就好用了。
打開(kāi)apk manager工具包,看到如下內(nèi)容。軟件都放在other子目錄里。運(yùn)行apk manager要求adb工具包(見(jiàn)下圖中的3個(gè)adb文件)。把待解包的apk文件放到place-apk-here-for-modding子目錄里,雙擊腳本批處理程序Script.bat,選擇選項(xiàng):9,產(chǎn)生一個(gè)子文件夾projects,解包后的文件被放在這個(gè)子文件夾內(nèi)。詳細(xì)內(nèi)容將在第二部分描述。
在使用時(shí),有時(shí)apktool和apk manager交替使用,一個(gè)不行就用另外一個(gè)。 所以,在編輯apk應(yīng)用程序時(shí)兩者都要掌握。
3) Dex2jar和XJad
該方法不是直接對(duì)apk文件進(jìn)行解包。它是首先提取apk文件內(nèi)的classes.dex文件,然后使用dex2jar.jar工具包將classes.dex解包成jar文件,再通過(guò)XJad 或者其他class反編譯工具進(jìn)行java反編譯,最后生成java源文件。 但是,使用這個(gè)工具包無(wú)法進(jìn)行classes.dex的還原(當(dāng)然也無(wú)法進(jìn)行apk的打包)。盡管如此,這個(gè)工具包仍然很重要,因?yàn)樗裞lasses.dex文件轉(zhuǎn)換成了可以更容易閱讀的java源文件。在修改apk應(yīng)用程序時(shí),必不可少,是一極強(qiáng)的輔助工具。相比之下,apktool和apk manager反編譯后得到的是Dalvik 反編譯碼 (Dalvik opcodes),需要很專(zhuān)業(yè)的知識(shí)來(lái)閱讀,很不直觀。如果你讀懂了java源文件,那修改相對(duì)應(yīng)的Dalvik碼不就容易多了嗎。
4) 其它工具包簡(jiǎn)介
此外,還有許多工具包可用。這些也容易在網(wǎng)上找到。 a) DoAPK DoAPK實(shí)際上就是apktool工具包。有人把a(bǔ)pktool寫(xiě)成了帶窗口界面的可執(zhí)行文件。 b) Google Smali 有兩個(gè)程序:baksmali.jar和smali.jar。baksmali.jar用來(lái)反解析dex和odex文件,得到Dalvik碼。然后用smali.jar還原成dex文件。例如,在修改狀態(tài)欄時(shí)間顯示顏色時(shí),要用的這兩個(gè)解析程序。 c) AXMLPrinter2.jar AXMLPrinter2.jar對(duì)apk文件內(nèi)的 AndroidManifest.xml和main.xml進(jìn)行操作,將XML還原成文本文件,便于閱讀。 d) Apkdb 是一個(gè)集成apktool,smali,Dex2jar,簽名等功能的工具。 e) 其它工具 不再介紹。自己動(dòng)手到網(wǎng)上去搜索吧。
我把這些收集到的apk工具包打包上傳,供你們使用,免得你們找來(lái)找去。
|