漢化資料到到是整理了不少,自己實(shí)踐了一下,感覺(jué)做一些(除特別的外)基本漢化其實(shí)不難,今天跟大家分享一下個(gè)人整理收集的資料,有興趣的朋友可以學(xué)習(xí)下。
APK文件簡(jiǎn)介:
APK是Android Package的縮寫(xiě), 即Android application package文件 或Android安裝包。
每個(gè)要安裝 到Android平臺(tái)的應(yīng)用都要被編譯打包為 一個(gè)單獨(dú)的文件,擴(kuò)展名為 .apk。APK文 件是用專業(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的全稱,即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) 的工具。
APK應(yīng)用程序的解包和打包工具: 這一節(jié)主要介紹在Windows系統(tǒng)中常用 的幾個(gè)工具包,用來(lái)對(duì)apk應(yīng)用程序進(jìn)行 解包、打包、反編譯、解析 所有apk工具包都要求java
下面介紹一些收集的:
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),需要很專業(yè)的知 識(shí)來(lái)閱讀,很不直觀。如果你讀懂 了java源文件,那修改相對(duì)應(yīng)的Dalvik碼 就容易多了…
google Smali 有兩個(gè)程 序:baksmali.jar和smali.jar。baksmali .jar用來(lái)反解析dex和odex文件,得 到Dalvik碼。然后用smali.jar還原 成dex文件。例如,在修改狀態(tài)欄時(shí)間顯示顏色時(shí),要用到的。
AXMLPrinter2.jar對(duì)apk文件內(nèi)的 AndroidManifest.xml和main.xml進(jìn)行操作,將XML還原成文本文件,便于閱讀。
Apkdb 是一個(gè)集 成apktool,smali,Dex2jar,簽名等功 能的工具。
這里講apk漢化,首先說(shuō)說(shuō)apk
1 .apk解包后
2.在apk之下有兩個(gè)文件夾 /res和/smali,還有兩個(gè)文 件AndroidManifest.xml和apktool.yml 。用文本編輯器打 開(kāi)AndroidManifest.xml看看,是不是在第一部分里介紹的內(nèi)容。你要修改的內(nèi)容 在/res文件夾內(nèi)
3.打開(kāi)/res文件夾,看到里面有5個(gè)子 夾,/drawable存放apk應(yīng)用的圖標(biāo) (Icon),drawable-hdpi(drawable-mdpi)存放其它要用的圖形文件,(這些都可以美化替換,需要注意的是格式尺寸必須相同,否則會(huì)出錯(cuò)…),/layout是apk的布局文件,/values里是字符文件。漢化apk就是漢化/alues文件夾 內(nèi)string.xml文件的內(nèi)容
APK字符漢化 (英小白,谷歌翻譯…)
用Notepad++打開(kāi)string.xml
我們只需漢化
xxxxxxxxxx</string>
成中文就好了。其他地方還有慢慢找。
一般有兩種漢化方法: 1.正規(guī)漢化, 2 .強(qiáng)制漢化。
這里說(shuō)的是解包后的apk
1.正規(guī)漢化
一個(gè)apk應(yīng)用在漢化后應(yīng)該能在英文和中 文系統(tǒng)下都能使用。/values目錄下的是英文語(yǔ)言包。為了建一個(gè)中文語(yǔ)言包,與/values并行創(chuàng)建一個(gè)子文件夾:/values-zh-rCN(必須用這個(gè)文件名!)。這里values-zh是中國(guó)地區(qū)語(yǔ)言包(包含港 澳臺(tái)及內(nèi)地),values-zh-rCN是中文簡(jiǎn)體語(yǔ)言包(只包含內(nèi)地),values-zh-rTW是中文繁體語(yǔ)言包(港澳臺(tái))。 把/values文件夾里的strings.xml等語(yǔ)言 文件復(fù)制進(jìn)/values-zh-rCN。在一些軟件中,只有strings.xml一個(gè)文件。 進(jìn)入/values-zh-rCN,用文本編輯器打開(kāi)strings.xml,然后你就翻譯吧,把英文描述譯成相應(yīng)的中文。
例如,我們可以把上面的string.xml文件 譯成: 靜音啟 動(dòng) 開(kāi)啟 靜音啟動(dòng) 關(guān)機(jī) 也是靜音 關(guān)機(jī) 不是靜音\n如果沒(méi)有開(kāi)啟靜音啟動(dòng),關(guān)機(jī) 時(shí)播放開(kāi)機(jī)音樂(lè)。 里面有個(gè)操作符“\n”是換行符,迫使換行 顯示文本內(nèi)容。之后存盤(pán),用“另存 為”(Save As)存成UTF-8格式。這是保 持中文文本的格式。 在做漢化工作時(shí),要對(duì)string.xml文件進(jìn)行修改。有時(shí)也需要修改其它xml文件, 一個(gè)一個(gè)地認(rèn)真查看,一個(gè)一個(gè)地漢化。
2.強(qiáng)制漢化
所謂“強(qiáng)制漢化”就是不產(chǎn)生/values-zh-rCN文件夾。而是在/values文件夾內(nèi)把 需要漢化的文件都直接譯成中文。顯然, 如果在英文操作系統(tǒng)中沒(méi)有中文字庫(kù)的 話,強(qiáng)制漢化的apk在英文系統(tǒng)中可能顯 示亂碼。所以,建議養(yǎng)成良好習(xí)慣,采用“正規(guī)漢化”。
以上的漢化是修改string.xml,把英文譯成相應(yīng)的中文就 好了,然后打包和簽名。但是,在有些apk文件里,所顯示的字符文字并不都在xml文件里。apk原作者把某些字符寫(xiě) 在代碼中。反編譯后,存放在/smali文件夾里。一層一層地找下去,最后你會(huì)看到 一大堆Dalvik碼文件,都是以.smali為 文件擴(kuò)展名。舉一個(gè)例子,用文本編輯器 打開(kāi)某個(gè).smali文件,看到: const-string v5, “ServiceMode” “ServiceMode”會(huì)在apk執(zhí)行時(shí)顯示為英 文。因此,需要漢化。在ROM里, 用工程模式特殊代碼看到的多半屬于這一 類(lèi)。漢譯起來(lái)非;〞r(shí)間。我們要 把ServiceMode譯成“服務(wù)模式”。怎么處 理呢?你不能把const-string v5, “ServiceMode”直接改成const-string v5, “服務(wù)模式”。打包會(huì)失敗的。正確的 做法是把相應(yīng)的中文字符用16進(jìn)制的unicode來(lái)表示。例如:把“服務(wù)模 式”用16進(jìn)制的unicode表示就 是\u670d\u52a1\u6a21\u5f0f 。每一個(gè) 漢字用4個(gè)字符表示,\u表示為16進(jìn)制 的unicode碼。好了,正確的漢譯是: const-string v5, “\u670d\u52a1\u6a21\u5f0f ”
網(wǎng)上有中文字符與16進(jìn)制unicode碼的對(duì)照表或轉(zhuǎn)換工具。
Apk打包和簽名打包操作很簡(jiǎn)單。 重新回編成apk,軟件不同會(huì)有細(xì)微差別,回編后簽名就行,有些程序是不能用簽名的,所生成的新的apk應(yīng)用程序、這就是漢化好的apk程序了。 現(xiàn)在你需要把文件改成你需要的名字。