天天看點

如何修改第三方apk的activity

最近在工作過程中遇到修改第三方apk的需求:有一個第三方apk的一個啟動頁面涉及到廣告的顯示,需要在代碼裡去掉相應邏輯。但是apk開發時間久遠,又找不到當時的開發者。是以隻能嘗試自行修改。

這裡需要用到 Android反編譯三件套 apktool 、dex2jar、jd-gui

第一步:

通過apk逆行解包工具 “ApkTool” 對apk進行解包

如何修改第三方apk的activity

選擇apk 所在全路徑,點選解包, 這樣就會在apktool根目錄下找對應解壓出來的apk 資源目錄,在對應AndroidManifest.xml 裡找到入口activity

第二步:

用 “dex2jar” 工具對第一步解壓目錄下classes.dex 反編譯成 classes.jar

第三步

用 “jd-gui” 工具檢視 classes.jar 裡面反編譯出來的代碼,找到入口activity代碼

要去掉廣告所涉及的代碼就要修改入口activity, jd-gui 工具隻能檢視、參考,不能修改

是以修改的話需要另行解決

第四步:

用android開發工具建立一個和 第三方apk 一樣包名的功臣,一樣入口名的activity(路徑一樣), 将activity所需資源檔案從第一步解壓出來的目錄裡找出來copy到建立工程一樣的目錄下,将jd-gui裡反編譯出來的入口activity代碼copy到 建立工程的入口activity檔案裡,反編譯出來的代碼直接用的話會有些編譯錯誤, 有的需要依賴其他檔案, 這時根據需求把入口activity需要依賴的檔案也建立起來,對應的方法代碼從“jd-gui”反編譯出來的代碼 copy過來并修改編譯錯誤。注意一樣目錄。編譯無誤後進入下一步

第五步:

将建立工程編譯成apk

第六步:

反編譯建立apk

用反編譯三件套對“新”apk反編譯, 從第三步得到的“新”classes.jar中找到改造後的入口activity的class檔案,并解壓出來備用。

當然也可以在建立工程目錄build目錄下搜尋對應的.class檔案來備用

第七步:

用新的入口activity class檔案替換原class檔案

用解壓工具将原classes.jar裡面的 對應 class删除, 然後将新生成的class檔案丢進去并儲存

第八步:

用dex2jar 工具将前一步的classes.jar 編譯成 新的classes.dex, 并替換第一步目錄下的舊class.dex.

如何修改第三方apk的activity

第九步:

用ApkTool工具 合包, 根目錄下會生成新的apk(未簽名)

如何修改第三方apk的activity

第十步:

對新生成apk進行簽名,然後安裝、運作、驗證

本次修改非常成功,是因為原入口activity邏輯很簡單,改起來很友善。

如果入口activty需要依賴的内容很多的話,全部依賴copy過來的資源或代碼可能行不通,因為反編譯出來的代碼并不是源碼,有的甚至混淆編譯過,變量、函數很難識别。這時改造起來就困難多了。這種情況下生搬硬套去改造是行不通的。

希望以後不要遇到這種需求,畢竟私下修改别人的apk是不道德的行為。