首先要了解一下Android應用的APK文件的結構。細心的同學在日常使用過程中可能會發現,右擊apk文件會出現諸如“使用WinRAR打開”的選項。其實,這是因為apk實際就是采用的zip格式對主體文件的一個壓縮包。打開壓縮包,你會看到apk文件中井然有序的文件及文件夾結構(圖1)。
lib:包含了程序運行所需要的庫(Linux的庫文件是so)。
META-INF:軟件如果想安裝,必須要簽名,這個文件夾便保存了簽名的證書。
res:保存了app的控件布局、圖片和所需要的資源文件。
AndroidManifest.xml:它決定了app可以運行在什麼版本上,調用了哪些函數和app的權限。
classes.dex:app的核心文件,保存了app的大多數代碼。
resources.arsc:保存了app的一些字符串資源。
除了前兩個,後面四個文件是每個apk所必備的。
另外,漢化有風險,請大家在操作前,一定要做好備份。
【解題方法】
了解了結構,下面就來進行實際操作。不過開始之前要准備一下JAVA環境。Android的大多數程序都是基於JAVA的,所以部署好JRE環境是Android下任何操作的基礎。其實很簡單,只需要到http://www.java.com按照提示下載安裝JRE環境即可。另外准備好一個待漢化的APK文件。
方法一:巧用工具輕松漢化
第一個方法要借助工具AndroidResEdit來完成。啟動AndroidResEdit 1.5,直接將APK文件拖入程序界面內,展開res(資源)文件夾,選擇Resource.arsc,就會出現右邊的一大堆字符串。
此時不要驚慌,點擊“文件→導出字典→大寫字母開頭詞條”(圖2),這樣我們便得到了一個字典文件。
接著打開字典文件,會發現格式均為“字符串|”的形式(圖3),我們只需將漢化過的字符串填寫在“|”的後面並保存即可。
再次進入AndroidResEdit,按下Ctrl+R快捷鍵導入字典,字符串的漢化便出現了。
若此時發現有忘記漢化的字符串,可以直接在下面的框中輸入翻譯並點擊漢化即可(圖4)。
翻譯完成後點擊“保存文件”,程序即會自動打包apk文件並簽名,為同目錄下的“xxxx-漢化簽名版.apk”,直接拷貝到Android手機上就可以安裝使用啦。
方法二:反編譯程序後的漢化
上面的方法雖然簡單,不過細心的你會發現有一些字符串沒有翻譯到。這是因為字符串並不全在Resources.arsc中,還有一部分存在Classes.dex中。Classes.dex本是代碼的編譯文件,但有些習慣不好的開發者會直接把字符串寫在代碼中。這時候的漢化,我們就需要Apkdb及UltraEdit(或者Notepad++)來協助了。
安裝好Apkdb後,右擊apk文件(不能是中文名),選擇“使用APKDB反編譯”項,彈出窗口後按1並回車(圖5),即會在APK文件目錄下生成與APK文件同名的目錄,這便是APK文件的源代碼。
資源文件漢化
打開反編譯得到的目錄,進入\res\values文件夾,會發現一堆xml文件(圖6)。打開其中的Strings.xml,其中都是“<string name="xxxxx">字符串</string>”這樣的字符,注意一定要保持<string name="xxxxx">和</string>不變,只翻譯中間的字符串(圖7)。翻譯完成,在res目錄下新建values-zh-rCN文件夾,這是告訴系統當系統語言是中文時則使用這個語言文件。
Smali文件漢化
返回根目錄,查看AndroidManifest.xml,找到形如“<manifest android:versionCode="13" android:versionName="1.1.2" package="uk.co.opticiancms.wifiprobe"”(圖8)的一行,記下Package後面的字符串。然後再回到反編譯得到的文件夾中的Smali文件夾,依次進入Package中以“.”為分隔的文件夾,比如本例依次進入uk、co、opticiancms、wifiprobe文件夾。因為只有這個類中的代碼才是作者自己編寫的,其他修改有可能導致程序錯誤。
打開一個Smali文件,你會發現你基本什麼都看不懂。不要害怕,搜索“const-string”,找到形如“const-string vX”的字串,其後為待漢化的字符串(圖9)。翻譯時要保持這種格式,不能丟失雙引號,僅翻譯雙引號裡的內容就行了。
當漢化完成後,右擊文件夾,選擇“使用APKDB回編譯”,再次按1並回車,程序即會自動編譯並在源碼目錄下生成“已編譯-xxxxx”文件夾。只需要將其中的apk文件安裝至手機即可享用自己翻譯的軟件啦。
小提示:
不是所有的字符串都要漢化,一般來說,只有開頭為大寫字母的字符串才需要漢化。如果後邊帶有$1、$2之類的符號的文件一般也不需要漢化。
另外,有些不是純文本,而是圖片形式的文字,這需要通過圖像軟件編輯圖像,相對就更復雜點了,這裡暫且略去。
本文來自於【系統之家】 www.xp85.com