對手機應用程序的簡單實用性修改

一、工具準備:apktool , dex2jar , jd-gui

二、使用dex2jar + jd-gui 得到apk的java源碼

1.用解壓工具從 apk包中取出 classes.dex 文件 用命令(dex2jar.bat classes.dex)得到一個 jar文件

2.用jd-gui反編譯工具將得到.jar文件反編譯成.java文件

三、使用apktool得到apk的xml文件

1.用命令(apktool d xxx.apk xxx_xml)反編譯xxx.apk包

2.從 xxx_xml 文件夾得到xml文件

四、第二步 得到的程序源代碼 和 第三步 得到的xml文件組合下,即可得到完整的apk源碼。

五、應用: 漢化/去廣告,加 values-zh-rCN, values-zh-rTW, values-de, values-fr

1.在步驟三的文件夾xxx_xml/res/ 下, 建文件夾: values-zh-rCN,values-zh-rTW

2.1複製valuesstrings.xml 到 values-zh-rCN 並翻譯.

2.2 去廣告見;

3.重建APK,用命令(apktool b xxx) ,輸出到ABC/dist/out.apk

或命令( apktool b xxx out.apk)

六、重新打包 和 簽名

1, 漢化apk應用程序

漢化apk就是 把 反編譯之後apk 下的res/values文件夾內string.xml文件的內容 漢化(注意:我們的例子里 只有一個string.xml,有時候 可能 不止 一個 *xml 文件,那麼 我們 需要把 相應的 位置 都漢化)。

一個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,把英文譯成相應的中文就好了,然後打包和簽名。但是,在有些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表示就是u670du52a1u6a21u5f0f 。每一個漢字用4個字元表示,u表示為16進位的unicode碼。好了,正確的漢譯是:

const-string v5, "u670du52a1u6a21u5f0f "

網上有中文字元與16進位unicode碼的對照表或轉換工具。

2, 修改圖標標籤 每一個apk文件都有一個「圖標標籤」。將apk程序安裝進手機後,在圖標下面顯示圖標標籤文字。這個圖標標籤的內容是可以修改的。在
esvalues下找到strings.xml,修改其中的一行:

<string name="app_name">圖標標籤</string>

例如:<string name="app_name">靜音啟動</string>

同理,如果是窗口小插件,要修改widget_name。 3) 去掉apk中的廣告 有很多apk應用都帶有廣告。為了去掉程序中的廣告,要修改main.xml文件與廣告有關的內容。在/res目錄下找到文件main.xml。通常在/layout目錄下,有時也被放在其它目錄下。甚至,有時不存在main.xml文件,廣告行被放在其它xml文件內。只能細心逐個文件進行查找。無論哪一種情況,查看其內容,你會看到有一項類似的命令如下。這就是廣告顯示。 <com.admob.android.ads.AdView android:id=」@id/ad」 android:layout_width_=」fill_parent」 android:layout_height=」wrap_content」 admobsdk:backgroundColor=」#ff000000″ admobsdk:textColor=」#ffffffff」 admobsdk:keywords=」Android application」 /> 將其改為: <com.admob.android.ads.AdView android:id=」@id/ad」 android:layout_width_=」0.0dip」 android:layout_height=」0.0dip」 admobsdk:backgroundColor=」#ff000000″ admobsdk:textColor=」#ffffffff」 admobsdk:keywords=」Android application」 /> 可以看到,關鍵是要把fill_parent改為0.0dip,把wrap_content改為0.0dip,其它內容保持不變即可。這種改法就是不給廣告顯示空間,當然你就看不到廣告了


推薦閱讀:

TAG:反編譯 | 手機廣告 | 軟體漢化 |