本人语文很差,语言组织能力不好,想到哪里写到哪里吧...
最近在用网易云阅读看小说,发现每次打开都有广告,烦人,去之!!
准备工具:
1.安装了xposed的手机(废话!)
2.网易云阅读app(我用的5.4.1.87版本)
3.jadx(反编译用)
4.AndroidStudio(编写xposed插件)
开始:
首先研究下app的广告规律,打开app,先是闪屏页,然后进入主页(或广告页-主页),那么进入广告页的逻辑在闪屏页内.
打开app,运行到主页,执行adb命令:adb shell dumpsys activity top 查看主页是MainGridActivity
jadx打开app,打开manifest
找到包名:com.netease.pris
启动页是:com.netease.pris.activity.PRISActivityFlasScreen
我们的目的就是从PRISActivityFlasScreen直接进入到MainGridActivity,跳过广告页
打开PRISActivityFlasScreen
有一个延时操作,应该是闪屏页待300毫秒,之后进行下个页面跳转,发现最后的else里像是我们的目标
不着急,先看下这些判断里都做了什么
PrisStartActivity.a(this.a, true, false);如下:
跳转的是PrisStartActivity,不对
再看MainGridActivity.b(this.a);如下:
跳转到MainGridActivity,就是这个了
好,目标明确,让c.r()和c.m(e)直接返回false,直接进入else就好了
不慌,看看这两个方法是干啥的
c.r()应该是判断是否首次登录,c.m(e)应该是判断是否最新版本,进行更新啥的...不管了,直接返回false
xposed代码如下:
好,xposed框架内,选中,重启,打开app,发现没用,还是有广告...[笑哭]
仔细看看else里的MainGridActivity.b(this.a);吧
发现它带了个参数进去need_start_cover,是否开启覆盖(难道是广告?),不让他带这个参数了试试,怎么做呢?
一个方法是:拦截这个方法,自己构建一个intent去启动.
再一个方法是...看看上面有个不带这个参数的a方法...那就拦截b方法,直接反射去执行a方法,代码如下:
安装-重启-打开app,没有广告了,直接进入主页了...任务完成,美滋滋