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文件進行解包、漢化、打包和簽名。然後,我們來對付三星閉源系統的apk程序,達到我們修改、漢化和美化的目的。我們假定所有apk文件都是單個獨立文件,不含odex文件(在官版ROM中,通常每個apk都分成兩部分,第一部分是apk,第二部分是odex。將它們合併是另一個題目,這裏不作敘述)。

1. 配置框架(Framework)環境

在處理APK文件時,apktool需要框架文件(framework-res.apk)來解碼和打包。apktool已經包含了標準的框架,所以在大多數APK文件的解包時,不需要另外提供框架文件。但是,某些製造商(例如三星)使用了他們自己的框架文件,爲了解包,就不得不從手機中或從ROM中把框架文件(framework-res.apk)提取出來,然後安裝到計算機。安裝命令是:
apktool if framework-res.apk
安裝後就會得到:~\apktool\framework\1.apk


注意:三星系統(例如:I897)有兩個框架文件:framework-res.apk和twframework-res.apk。在使用apktool之前,要安裝這兩個框架文件。安裝方法同上:
apktool if framework-res.apk
apktool if twframework-res.apk
安裝後就會得到:~\apktool\framework\1.apk和
~\apktool\framework\2.apk。


許多人拿來apktool工具包用,說解不開包,運行出錯。原因是沒有配置框架環境。

2. akp文件的漢化和修改

我首先來講對一般的(非三星)apk應用程序進行解包、漢化和打包。爲你們方便和敘述目的,我在上傳的apktool和apk manager工具包裏都帶了一個小的apk應用程序SilentBoot_EN.apk。這個程序是“靜音啓動”,就是通過這個程序來設置開機時是否有開機音樂。我在我的2.3.4 XXJVP ROM裏也集成了這個akp程序,現在你們自己來把它漢化一下吧。我們用apktool工具包來做。

漢化步驟如下:

1) apk程序解包首先把SilentBoot_EN.apk複製到Unpack-apk.bat的同一個目錄裏(我已經放好了)

雙擊Unpack-apk.bat,apk文件解包開始。DOS窗口出現,顯示解包進程和一系列信息,直到解包結束。
apk-04.gif
2011-6-30 23:46 上傳
下載附件(29.93 KB)

解包結束後,在工作目錄下產生3個子文件夾:New_APK,Raw_APK和Working_APK。解包了的文件被放在Working_APK文件夾內,原始apk文件(SilentBoot_EN.apk)被複制一份到Raw_APK文件夾保存。見界面截圖如下:
apk-05.gif
2011-6-30 23:27 上傳
下載附件(38.56 KB)

在Working_APK字文件夾裏產生了一個子夾_SilentBoot_EN.apk,裏面存放所有解包後的文件。在_SilentBoot_EN.apk之下有兩個文件夾 /res和/smali,還有兩個文件AndroidManifest.xml和apktool.yml。用文本編輯器打開AndroidManifest.xml看看,是不是在第一部分裏介紹的內容。你要修改的內容在/res文件夾內。

打開/res文件夾,看到裏面有5個子夾,/drawable存放apk應用的圖標(Icon),drawable-hdpi存放其它要用的圖形文件,/layout是apk的佈局文件,/values裏是字符文件。漢化apk就是漢化/alues文件夾內string.xml文件的內容。

2) 字符漢化

這裏只適用於懂英語的同學。如果你不懂英語,就照表抄課好了。

用文本編輯器打開string.xml,其內容爲:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<string name="app_name">Silent Boot</string>
<string name="labelEnabled">Enable Silent Boot</string>
<string name="textEnabled">Device is muted on shutdown.</string>
<string name="textDisabled">Device is NOT muted on shutdown.\nBoot sound is played if the device is shut down with sounds enabled.</string>
</resources>
要漢譯的字符是:Silent Boot,Enable Silent Boot,Device is muted on shutdown,Device is NOT muted on shutdown.\nBoot sound is played if the device is shut down with sounds enabled。


先別急,我現在來教你怎樣處理文件。有兩種漢化方法:a) 正規漢化,b) 強制漢化。

a) 正規漢化
一個apk應用在漢化後應該能在英文和中文系統下都能使用。/values目錄下的是英文語言包。爲了建一箇中文語言包,與/values並行創建一個子文件夾:/values-zh-rCN(必須用這個文件名!)。這裏values-zh是中國地區語言包(包含港澳臺及內地),values-zh-rCN是中文簡體語言包(只包含內地),values-zh-rTW是中文繁體語言包(港澳臺)。
把/values文件夾裏的strings.xml等語言文件複製進/values-zh-rCN。在我們的例子中,只有strings.xml一個文件。
進入/values-zh-rCN,用文本編輯器打開strings.xml,然後你就翻譯吧,把英文描述譯成相應的中文。
例如,我們可以把上面的string.xml文件譯成:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<string name="app_name">靜音啓動</string>
<string name="labelEnabled">開啓靜音啓動</string>
<string name="textEnabled">關機也是靜音</string>
<string name="textDisabled">關機不是靜音\n如果沒有開啓靜音啓動,關機時播放開機音樂。</string>
</resources>

裏面有個操作符“\n”是換行符,迫使換行顯示文本內容。之後存盤,用“另存爲”(Save As)存成UTF-8格式。這是保持中文文本的格式。
在作漢化工作時,要對string.xml文件進行修改。有時也需要修改其它xml文件,一個一個地認真查看,一個一個地漢化。

b) 強制漢化
所謂“強制漢化”就是不產生/values-zh-rCN文件夾。而是在/values文件夾內把需要漢化的文件都直接譯成中文。顯然,如果在英文操作系統中沒有中文字庫的話,強制漢化的apk在英文系統中可能顯示亂碼。所以,建議養成良好習慣,採用“正規漢化”。


高級內容:以上的漢化是修改string.xml,把英文譯成相應的中文就好了,然後打包和簽名。但是,在有些apk文件裏,所顯示的字符文字並不都在xml文件裏。apk原作者把某些字符寫在代碼中。反編譯後,存放在/smali文件夾裏。一層一層地找下去,最後你會看到一大堆Dalvik碼文件,都是以.smali爲文件擴展名。舉一個例子,用文本編輯器打開某個.smali文件,看到:
const-string v5, "ServiceMode"
“ServiceMode”會在apk執行時顯示爲英文。因此,需要漢化。在I897 ROM裏,用工程模式特殊代碼看到的多半屬於這一類。漢譯起來非常花時間。我們要把ServiceMode譯成“服務模式”。怎麼處理呢?你不能把const-string v5, "ServiceMode"直接改成const-string v5, "服務模式"。打包會失敗的。正確的做法是把相應的中文字符用16進制的unicode來表示。例如:把“服務模式”用16進制的unicode表示就是\u670d\u52a1\u6a21\u5f0f 。每一個漢字用4個字符表示,\u表示爲16進制的unicode碼。好了,正確的漢譯是:
const-string v5, "\u670d\u52a1\u6a21\u5f0f "
網上有中文字符與16進制unicode碼的對照表或轉換工具。我在這部分提供一張轉換表供你們使用。見附件。


3) Apk打包和簽名

打包操作很簡單,沒有什麼好講的。照着做就行了。

回到apktool目錄,鼠標雙擊批處理文件Repack-apk.bat,apk文件就打包好了。在Repack-apk.bat批處理中,每個apk文件打包好後就緊跟着進行簽名操作。所以,執行完Repack-apk.bat後,打包和簽名都完成了。

打包和簽名好了的apk文件存放在New_APK文件夾內,文件名加了一個前綴New_。在我們的例子中,所生成的新的apk應用程序爲New_SilentBoot_EN.apk。這就是漢化好了的apk程序了。

現在你需要把文件改成你需要的名字:SilentBoot_CN.apk,安裝到手機試一下吧!欣賞一下你自己漢化的apk程序!是不是很爽!有成就感吧!

3. 三星akp文件的漢化和修改

好了,有了以上對apk解包、修改(漢化)、打包、簽名做基礎,我們現在來看怎樣對三星apk進行操作。我們手裏用的是三星I897手機,/system/app目錄下的很多apk應用程序都是三星程序,典型的包括framework-res.apk,twframework-res.apk,TouchWiz30Luancher.apk。由於三星採用自己的閉源系統,對其漢化、修改、打包和簽名有一定難度,目前還沒有發現完全適合於三星apk的專用工具。因此,需要採取特殊手段來達到目的。

apktool對所有三星apk文件都是可以解包的,對某些apk是可以打包簽名的,但是,對另外一些apk的打包總是失敗。這裏需要指出的是,即使你對三星apk文件打包簽名成功,這個生成的apk程序也無法在三星手機上運行!原因是三星使用了其閉源的特殊簽名。

由於某些三星apk文件無法用apktool進行打包,所以我們在這一節使用功能更強大的apk manager進行解包和打包。在執行apk manager腳本批處理Script.bat時,有很多選項(見下圖)。我們用到選項9和11。選項9是反編譯(解包),選項11是再編譯(打包)。由於三星不承認其它簽名,所以這裏簽名並不重要。但是,如果你在處理非三星的apk文件,那簽名還是需要的,要用的選項12和14。

操作步驟:
1)把待解包的apk文件(例如:TouchWiz30Launcher.apk)放到place-apk-here-for-modding子目錄裏
2)雙擊腳本批處理程序Script.bat,你會看到上面的界面

apk-06.gif
2011-6-30 23:27 上傳
下載附件(22.91 KB)

3)選擇選項9進行解包,回車,開始解包
4)解包結束後,產生一個子文件夾projects,裏面有一個字文件夾(TouchWiz30Launcher.apk),解包後的文件被放在這個子文件夾內。
5)選擇選項24退出程序
6)按照上一節的方法進入projects/TouchWiz30Launcher.apk文件夾,把string.xml和有關的部分進行了漢化修改
7)修改和漢化結束後,再運行批處理程序Script.bat
8)選擇選項11進行打包。需要的時間較長,請耐心等待打包結束
9)打包結束後,在place-apk-here-for-modding文件夾內產生了一個新的未簽名的apk文件:unsignedTouchWiz30Launcher.apk

爲了在手機上運行apk應用程序,簽名是必需的。那怎樣對三星apk應用程序進行簽名處理呢?一個有效的方法就是借用原來解包前apk文件已經有的簽名,把原來的簽名與新的編輯內容進行合成。從而,達到我們解包、修改、漢化、打包和“簽名”的目的,使新的apk程序可以在三星I897上運行。

合成操作步驟:

1)先用WinRAR打開原始的apk文件TouchWiz30Launcher.apk,裏面有3個文件和兩個文件夾。在第一部分講過每一個文件和文件夾的作用。這裏不再描述。
apk-07.gif
2011-6-30 23:27 上傳
下載附件(52.29 KB)

2)再用WinRAR打開生成的apk文件unsignedTouchWiz30Launcher.apk。 裏面是沒有簽名文件的,就沒有文件夾META-INF,我們也不需要它。
apk-08.gif
2011-6-30 23:27 上傳
下載附件(46.96 KB)

3)從unsignedTouchWiz30Launcher.apk中提取我們編輯過的東西。爲此,用鼠標把resources.arsc文件從unsignedTouchWiz30Launcher.apk文件窗口拖進TouchWiz30Launcher.apk的窗口,去覆蓋原來的resources.arsc文件。你也可以先把原來的resources.arsc刪除,然後再做拖入的動作。
4)出現一個參數窗口。在壓縮方式處選擇“Store”(存儲)。然後按“OK”。
apk-09.gif
2011-6-30 23:27 上傳
下載附件(28.13 KB)

5)退出WinRAR。結束。新的三星apk應用程序就製作好了,簽名是利用了原始的簽名。文件是TouchWiz30Launcher.apk。

說明:
1)如果修改了/res目錄下的內容,在第3步,就複製resources.ars。如果修改了/smali目錄下的內容,在第3步,就複製classes.dex。
2)只可以替換這兩個文件,別的都不要動。
3)在第4步的壓縮方式,一定要選“Store”。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章