本次修改的app为电影猎手(Movie Hunter),这是一款可以观看各类视频资源的 Android 应用,拥有较丰富的视频库和流畅的播放体验。由于其盗版性质,它没有在官方应用商店上架,应用内置了大量广告,影响使用体验。本教程记录一次对该 APK 去广告的修改过程及用到的工具,供有同类需求的朋友参考。
免责声明: 本文仅用于技术研究和学习交流,请勿用于任何商业用途或非法用途。请遵守当地法律法规,自行承担一切后果。
修改目标
- 移除启动广告,自动跳过广告倒计时
- 屏蔽首页推荐广告
- 屏蔽所有页面的页面广告
- 过滤首页 Banner 广告
- 过滤广场列表广告
修改过程
以下是我对 APK 文件的 smali 修改操作记录。
启动广告
文件:SplashActivity2
-
取消加载广告图片 操作: 注释第
597行 -
自动跳过广告 操作: 注释第
2107、2109行 新增代码:1 2.registers 1 const/4 v0, 0x0
所有页面的赌博广告
文件:AppConfigModel$Companion
- 取消加载广告数据
操作: 注释第
460行
首页推荐广告
文件:Recommend2Fragment
- 屏蔽首页推荐加载广告
操作: 注释第
1166行
视频详情页广告
文件:VideoInfoFragment
-
隐藏指定广告视图 操作: 在第
3020行下方添加两行:1 2const/4 v2, 0x8 invoke-virtual {v1, v2}, Landroid/view/View;->setVisibility(I)V
首页 Banner 广告过滤
文件:Recommend2Fragment
-
第
707行的方法用于重新设置 Banner 列表HomeRecemdItemBean.type == 3的项是广告,需要在代码中过滤掉该类型的 Banner。
广场列表广告过滤
文件:SocialFeedCloneFragment
- 第
475行:加载广场数据
文件:SocaialViewModel
- 第
1044行:加载数据到LiveData
文件:SocialViewModel$getSocialPostBeanList$2$2
-
第
97行:设置获取到的列表数据- 在这里对数据进行过滤
- 在设置
LiveData前排除广告项
文件:SocialPostBean
-
此类为完整结果类,包含
list、page、pageSize、total -
第
188行有copy()方法- 可参考此
copy()方法新写一个copySkipAds(),对list过滤广告后再拷贝一份。
- 可参考此
文件:Post
- 此类有一个方法
isAds()判断是否为广告项。
注意事项
- Android 编译器的寄存器分配算法有时会 把参数寄存器当成临时变量使用,若分配的寄存器数量过多,编译后代码可能出错。
- 修改后一定要重新打包签名并安装,再用
jadx-gui反编译成 Java 代码,检查逻辑是否正确。
常用工具
这里推荐几款我在修改过程中用到的工具:
jadx-gui
-
用途: 反编译 APK 到 Java 代码
-
特点:
- 变量和方法自动重命名
- 匿名类、内部类处理较好
- 可一键导出全部源码
- 支持代码跳转和搜索
-
建议: 用来理解逻辑、验证修改效果
apktool-gui(Windows)
-
用途: 反编译/回编译 Smali 工程
-
功能:
- Smali 反编译与编译
- ZIP 对齐
- 签名
- ADB 安装
- APK 信息查看
-
替代方案: 命令行
apktool+apksigner -
建议: Windows 用户强烈推荐
VSCode
-
用途: 阅读与编辑 Smali、Java 代码
-
优势:
- 轻量级
- 多窗口高效
-
对比: JetBrains IDEA 在 Smali 编辑上并无优势,VSCode体验更好。
MT管理器(Android)
-
用途:
- 文件管理
- Smali/资源编辑
- 自动打包、签名
- 直接在手机上操作
-
建议:
- 小改动非常方便
- 配合 FTP 导出文件
- 有条件建议开通 VIP
adb logcat
-
用途: 查看安装和运行时日志
-
用法示例:
1 2adb logcat -c adb logcat | grep --line-buffered 'com.moviehunter'当遇到崩溃或异常时,用它排查问题。
总结
通过以上方法,可以有效移除电影猎手 APK 中绝大部分广告。过程需要对 Smali 有一定了解,并反复验证逻辑正确性。不同版本的 APK 可能对应不同行号和逻辑,修改时需灵活应对。