Android App 內建廣告多為嵌入式廣告 SDK (如 AdMob、廣點通、百度聯盟),通過在主 Activity 動態加載廣告 View。本文以遊戲《Dragon Fly》為例,示範最基礎的去廣告流程:反編譯 → 定位廣告代碼 → 空值替換 → 重新打包簽名。
工具準備
- APK 反編譯工具:APKTool、dex2jar + JD-GUI、或 Android Studio 內建分析器。
- 全文搜尋替換工具:Search and Replace (速度快、支援資料夾遞迴) 或 EmEditor。
- 簽名工具:SignApk、APKSigner、或 Android SDK `apksigner`。
核心原理:定位廣告加載代碼
多數廣告 SDK 在布局 XML 或 Java 代碼中引用特定命名空間/類別。以 AdMob 為例,XML 布局常含:
xmlns:ads="https://schemas.android.com/apk/lib/com.google.ads"
Java 代碼中實例化 `AdView`、呼叫 `loadAd()`。
實戰步驟
- 反編譯 APK 獲得 `smali/` 代碼與 `res/` 資源資料夾。
- 使用 Search and Replace 對整個專案資料夾搜尋關鍵字:`https://` 或 `schemas.android.com/apk/lib/com.google.ads`。
- 搜尋結果中鎖定關鍵檔案:通常為 `AdView.smali` 或包含廣告邏輯的 `*.smali` / 布局 XML。
- 編輯該檔案,將廣告相關命名空間字串、URL、初始化代碼 **替換為空字串 `""` 或註解掉**。
- 若為 smali 代碼,可將廣告初始化指令 `invoke-virtual` 替換為 `nop` (空操作)。
- 重新打包:`apktool b` 生成新 APK。
- 簽名:`apksigner sign --ks mykey.keystore --out output.apk unsigned.apk`。
- 安裝測試:廣告區域應顯示空白或隱藏,功能正常運作。
進階提示
- 不同廣告 SDK (廣點通、百度、騰訊優量匯) 關鍵字不同,需多嘗試搜尋 `adview`、`AdView`、`BannerAd`、`SplashAd` 等類名。
- 部分 App 將廣告邏輯加密/混淆在 `.so` 動態庫中,單純 smali 修改無效,需 Hook (Xposed/Frida) 或修改 .so (極高難度)。
- 去廣告可能違反 App 用戶協議,僅供個人學習研究,請支持開發者購買付費版或訂閱會員。
掌握反編譯→搜尋替換→重簽名基礎流程,即可自行淨化多數簡單內建廣告 App。