基本知識
apk安裝包的文件結(jié)構(gòu)
以知名桌面軟件“LauncherPro”為例,apk安裝包文件目錄:
文件目錄如下:
- META-INF
- res
- anim
- color
- drawable
- drawable-hdpi
- drawable-land
- drawable-land-hdpi
- drawable-mdpi
- drawable-port
- drawable-port-hdpi
- layout
- layout-land
- layout-port
- xml
- AndroidManifest.xml
- classes.dex
- resources.arsc
- 多數(shù)情況都要漢化的是resources.arsc、classes.dex和res文件夾里的***.xml文件。
- META-INF文件夾里面存放的是證書文件,軟件修改后需要將里面的證書文件刪除(***.RSA、***.SF、***.MF三個文件)再重新簽名,否則軟件無法安裝。
- res文件夾里存放的大部分是軟件所需的資源及布局文件(drawable存放資源、layout、xml存放布局文件***.xml),部分需要漢化的單詞、語句會在這些***.xml文件里。
- AndroidManifest.xml文件里包含了軟件名稱、版本、權(quán)限、引用的庫文件等信息。極少數(shù)軟件在這個文件里會有單詞、語句需要漢化。
- classes.dex文件是Java源碼編譯后的代碼文件。通常該文件里都有單詞、語句需要漢化。
- resources.arsc文件是編譯后的資源文件,大多數(shù)情況下,需要漢化的單詞、語句絕大多數(shù)都在這個文件里,漢化的時候首先就要看這個文件。
* 另外,一些需要漢化的***.png圖片文件、***.html文件、***.txt文件可能會在assets文件夾或res/raw文件夾內(nèi)。圖片文件需要用Photoshop修改,html、txt文件可以直接用Notepad++ Portable文本編輯工具修改(不建議用系統(tǒng)自帶的記事本,這東西殺傷無數(shù)...)。
2、打包/解包
apk安裝包其實就是zip格式的壓縮包,只是文件擴展名改成了apk而已,所以可以直接用解/壓縮軟件WinRAR打開,若你的系統(tǒng)沒有關(guān)聯(lián)apk文件,請先安裝WinRAR,打開WinRAR——選項——設(shè)置——綜合,在“用戶自定義壓縮文件擴展名”處填上apk,點“確定”保存即可。之后就可以直接雙擊以WinRAR打開apk安裝包文件。
漢化軟件的時候,不需要把整個apk安裝包解包,對于需要漢化的文件,如resources.arsc、classes.dex等文件,直接用鼠標拖出來,漢完后再拖進apk安裝包后重新簽名就行了(簽名問題下面會講到)。
3、簽名
Android的軟件也需要簽名,不過和Symbian相比,卻要簡單方便得多,首先是不需要自己去申請證書,下載個簽名工具就可以簽名了。另外,我們從電子市場、軟件官網(wǎng)下載來的軟件都是已經(jīng)簽好名的,可以直接安裝,這里講到的簽名,是針對軟件安裝包被修改過的情況(如漢化需要修改安裝包內(nèi)的文件,原來的簽名文件就不能用了,所以要重新簽名軟件才能正常安裝。),正常情況下不需要簽名。
現(xiàn)在Android可用的簽名工具很多,想方便點的話可以用漢化浪子出品的AndroidResEdit,這個軟件自帶簽名包(工具在帖子附件有提供)。
簽名方法很簡單,刪除原證書文件后(META-INF 文件夾內(nèi)的***.RSA、***.SF、***.MF三個文件),打開AndroidResEdit——簽名——簽名apk文件,選擇需要簽名的apk安裝包后點擊“立即簽名”即可。
4、安裝Java環(huán)境
這個是最基本的,漢化相關(guān)的軟件都需要用到Java環(huán)境,必須要安裝,否則漢化過程中出現(xiàn)各種奇奇怪怪的問題不要問我。具體安裝Java環(huán)境方法,可以百度一下。
安裝apktool并反編譯apk文件
要安裝apktool,要下載兩個文件
在windows環(huán)境下:
apktool-install-windows-r04-brut1.tar.bz2
apktool1.4.1.tar.bz2
在linux環(huán)境下:
apktool-install-linux-r04-brut1.tar.bz2
apktool1.4.1.tar.bz2
下載主頁 http://code.google.com/p/android-apktool/
下載解壓縮后,會得到三個文件,分別為aapt.exe, apktool.bat與apktool.jar。
然后將這三個文件扔到C盤下的windows目錄中,即可。
要確認apktool已經(jīng)正確安裝,可以運行命令行窗口,直接鍵入apktool,可看到如圖顯示:
apktool安裝正確后,就可以反編譯apk文件了。反編譯apk文件,只需要在命令行窗口下輸入如下所示的命令語句:
apktool d D:\dartE.apk D:\dartE
命令解析:
-apktool d 表示要反編譯apk文件
-D:\dartE.apk 是apk文件存放的絕對路徑
-D:\dartE 是要輸出的反編譯文件的存儲位置(注:apktool會自動創(chuàng)建一個叫做dartE的文件夾來存放反編譯文件,而若在之前已經(jīng)存在dartE文件夾,則apktool會提示文件夾已存在,而不會進行反編譯)
鍵入命令后回車,出現(xiàn)如下幾行語句后,就會發(fā)現(xiàn)在D盤下已經(jīng)多了一個叫做dartE的文件夾,里面存放的就是反編譯后的文件。
漢化APK文件
漢化APK文件,主要的任務(wù)就是利用apktool將apk文件反編譯,然后找到其語言包(語言包中均為*.xml文件),將里面的英文改為對應(yīng)的中文即可。另外,有些英文可能被寫死在了程序源代碼中,漢化這部分就需要搜索并漢化利用apktool工具反編譯classes.dex文件后得到的源碼文件*.smali文件了。
首先,講解如何找到并漢化apk語言包。
利用apktool反編譯apk文件后,會得到如圖的幾個文件及文件夾
其中,smali文件夾下存放反編譯后的源碼文件*.smali。而res文件夾下,則是反編譯后的apk資源文件。其中包括程序用到的圖片,聲音,布局xml,及語言包等。因此,應(yīng)點開res文件夾,會看到如圖所示的幾個文件夾
其中用values-***命名的文件夾,就是我們要找的語言包!
values是英文語言包,values-zh是中國地區(qū)語言包(包含港澳臺及內(nèi)地),values-zh-rCN是中文簡體語言包(只包含內(nèi)地),values-zh-rTW是中文繁體語言包(港澳臺)。除此以外,其它地區(qū)的語言包都是精簡的對象,可以不過多了解。
* 若要漢的軟件沒有中文語言包,可以自己在res目錄下新建values-zh-rCN和values-zh-rTW文件夾,再把values文件夾內(nèi)的原arrays.xml、strings.xml語言文件復制到values-zh-rCN和values-zh-rTW文件夾,然偶將語言文件內(nèi)的單詞、語句修改成中文并保存即可。
在values文件夾里,通常有arrays.xml、strings.xml等語言文件,要漢化這些文件,可以用Notepad++ Portable打開,如圖:
我們只需要將>*****間的*****內(nèi)容改成中文就行了。
對于寫死在源碼中的英文,這需要我們利用Notepad++工具,在smali文件夾下搜索相應(yīng)的英文單詞,然后再修改為中文了。
Tips:
- 若對軟件的漢化熟悉后,用“文件查找”搜索要漢的單詞、語句時,可以直接輸入“const-string”,因為基本上這些單詞、語句都在const-string后面,如圖:
- 對于剛剛接觸漢化的人,源碼漢化這部分最好先在漢完資源文件和xml文件后,把軟件裝上去查找沒有漢完的單詞、語句,然后再到smali文件夾下查找漢化,軟件上沒有的單詞,就不要多漢,不然出問題了很難查找,smali重新打包后,那些中文是搜不出來的,所以很難修改。切記,寧可少漢,也不要多漢,即使少漢了,日后還可以補漢上去。
其它文件類型漢化
- 除了語言包、***.xml、**.smali這三中常見的文件類型需要漢化外,有些軟件還有另外一些文件需要漢化,例如txt、html、png等文件。
* 下面對這類文件的漢化作下講解:
① txt漢化,txt之類的文本文件可以直接用Notepad++ 打開,難度不大,將里面的內(nèi)容修改成中文后保存即可。這類文件大部分用作顯示關(guān)于信息、幫助信息等,所以基本上都是一些整句句子。另外,若保存后在手機上這些內(nèi)容顯示亂碼的話,可以嘗試將文件格式更改為UTF-8格式(在Notepad++ Portable中打開格式——轉(zhuǎn)為UTF-8編碼格式)。
②html文件的漢化也和txt文件類似,可以用Notepad++ Portable漢化,完成后保存即可,需要注意的格式問題也和txt文件一樣。另外要注意的是這類文件里面有代碼,熟悉漢化后對這些代碼自會有相應(yīng)的了解,例如
,表示這段代碼后的文字內(nèi)容以紅色、居中顯示。
③ png圖片文件通常都是用Photoshop來修改的,部分軟件是通過調(diào)用圖片來達到顯示選項的目的,而單詞又在圖片上,所以需要通Photoshop將圖片上的單詞修改成中文,保存后再拖回apk安裝包中替換原文件即可。這個只需要Photoshop上的一些最基本的操作,難度并不大,就不作過多闡述了。
去除廣告
利用apktool去除apk文件里的廣告,主要是要去做兩個部分工作:
讓廣告在程序里無法顯示(但程序仍會下載廣告,只是沒有顯示)
禁止程序自動在后臺訪問廣告源,這樣做后程序才不會偷偷的在后臺下載廣告,浪費我們的手機流量。
目前Android的廣告供應(yīng)商有兩個,一個是Admob,一個是Google Ads,前者已被后者收購,但兩者SDK依然獨立。
- 廣告代碼
Admob的廣告代碼為:
<COM.ADMOB.ANDROID.ADS.ADVIEW< p>
android:id=”@+id/ad”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content” />
Google Ads的廣告代碼為:
<COM.GOOGLE.ADS.GOOGLEADVIEW< p>
android:id=”@+id/adview”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content” />
- 廣告下載源
Admob的廣告下載源:
http://r.admob.com/ad_source.php
http://mm.admob.com/
http://api.admob.com
Google Ads的廣告下載源:
http://pagead2.googlesyndication.com/pagead/afma_load_ads.js
下面就來講解如何做這兩部分工作。
禁止顯示廣告
由于程序的布局信息都寫在了res文件夾下的*.xml文件中,因此,我們可以?直接利用Notepad++搜索*.xml文件中的廣告代碼,?再將其顯示的寬,高設(shè)置為0像素即可。即將上面的廣告代碼中
android:layout_width=”...” 設(shè)置為 android:layout_width="0.0dip"
android:layout_height="..." 設(shè)置為 android:layout_height="0.0dip"
? 搜索廣告代碼:
在res文件夾下,按廣告代碼的關(guān)鍵字"com.admob.android.ads.AdView"或
"com.google.ads.GoogleAdView"搜索。(為了以防萬一,干脆兩個廣告供應(yīng)商都搜索一遍)
搜索后,在屏幕下方會得到如下結(jié)果。
雙擊黃色的部分,轉(zhuǎn)到程序中的相應(yīng)代碼處,然后將寬,高設(shè)置為0.0dip即可!
?去除廣告下載源
在Android程序中,廣告下載源是被寫在代碼中的。而利用apktool反編譯程序后,其編譯后的源代碼文件即classes.dex文件,被反編譯為*.smali文件,這是一種文本文件,可以用記事本打開查看里面的內(nèi)容(但其內(nèi)容并非原始的*.class文件內(nèi)容,因此并不是真正的源代碼文件)。盡管如此,我們?nèi)钥梢栽谄渲兴阉鞯綇V告下載源網(wǎng)站,并將網(wǎng)址改為無效的地址,借此來阻止程序自動下載廣告數(shù)據(jù)。
apktool會將反編譯得到的*.smali文件放在smali文件夾中。因此我們在smali文件夾下利用Notepad++搜索廣告下載源網(wǎng)址(在文章開始處已經(jīng)列出),并將其網(wǎng)址替換為"0.0.0.0"。
得到的內(nèi)容如下所示,同樣雙擊黃色部分,跳到代碼處,將其網(wǎng)址改成
"0.0.0.0"
至此,我們已經(jīng)完成了apk文件去廣告的整個過程。
將程序重新打包并簽名
將apk文件漢化,并去除廣告后,最后一步要做的,就是將程序重新打包為apk文件并簽名使其能夠在手機中安裝。同樣的,我們需要分為兩步進行:?將程序重新打包 ?為打包后的apk文件簽名
?將程序重新打包
利用apktool,可以將程序重新打包。在命令行下,輸入如下命令
* 命令說明:apktool b D:\dart
- apktool b為重新編譯命令
- D:\dart 為需要編譯的目錄(就是存放剛剛反編譯后的文件的文件夾,名稱可以自定義)
重新打包后,我們再查看D:\dart目錄,會發(fā)現(xiàn)其中多了一個名稱為dist的文件夾,打開,我們重新打包的apk文件就在里面啦~~~
?為打包后的apk文件簽名
簽名的話,我們用漢化浪子出品的AndroidResEdit軟件,其自帶簽名功能,相當方便啊。只要進入軟件,點選【簽名】,然后選擇要簽名的apk文件,在點擊【立即簽名】,然后在選擇簽名后的apk文件存放路徑,就好了!一切就是這么簡單。。
- PC官方版
- 安卓官方手機版
- IOS官方手機版