本人語(yǔ)文很差,語(yǔ)言組織能力不好,想到哪里寫到哪里吧...
最近在用網(wǎng)易云閱讀看小說(shuō),發(fā)現(xiàn)每次打開(kāi)都有廣告,煩人,去之!!
準(zhǔn)備工具:
1.安裝了xposed的手機(jī)(廢話!)
2.網(wǎng)易云閱讀app(我用的5.4.1.87版本)
3.jadx(反編譯用)
4.AndroidStudio(編寫xposed插件)
開(kāi)始:
首先研究下app的廣告規(guī)律,打開(kāi)app,先是閃屏頁(yè),然后進(jìn)入主頁(yè)(或廣告頁(yè)-主頁(yè)),那么進(jìn)入廣告頁(yè)的邏輯在閃屏頁(yè)內(nèi).
打開(kāi)app,運(yùn)行到主頁(yè),執(zhí)行adb命令:adb shell dumpsys activity top? 查看主頁(yè)是MainGridActivity
jadx打開(kāi)app,打開(kāi)manifest
找到包名:com.netease.pris
啟動(dòng)頁(yè)是:com.netease.pris.activity.PRISActivityFlasScreen
我們的目的就是從PRISActivityFlasScreen直接進(jìn)入到MainGridActivity,跳過(guò)廣告頁(yè)
打開(kāi)PRISActivityFlasScreen
有一個(gè)延時(shí)操作,應(yīng)該是閃屏頁(yè)待300毫秒,之后進(jìn)行下個(gè)頁(yè)面跳轉(zhuǎn),發(fā)現(xiàn)最后的else里像是我們的目標(biāo)
不著急,先看下這些判斷里都做了什么
PrisStartActivity.a(this.a, true, false);如下:
跳轉(zhuǎn)的是PrisStartActivity,不對(duì)
再看MainGridActivity.b(this.a);如下:
跳轉(zhuǎn)到MainGridActivity,就是這個(gè)了
好,目標(biāo)明確,讓c.r()和c.m(e)直接返回false,直接進(jìn)入else就好了
不慌,看看這兩個(gè)方法是干啥的
c.r()應(yīng)該是判斷是否首次登錄,c.m(e)應(yīng)該是判斷是否最新版本,進(jìn)行更新啥的...不管了,直接返回false
xposed代碼如下:
好,xposed框架內(nèi),選中,重啟,打開(kāi)app,發(fā)現(xiàn)沒(méi)用,還是有廣告...[笑哭]
仔細(xì)看看else里的MainGridActivity.b(this.a);吧
發(fā)現(xiàn)它帶了個(gè)參數(shù)進(jìn)去need_start_cover,是否開(kāi)啟覆蓋(難道是廣告?),不讓他帶這個(gè)參數(shù)了試試,怎么做呢?
一個(gè)方法是:攔截這個(gè)方法,自己構(gòu)建一個(gè)intent去啟動(dòng).
再一個(gè)方法是...看看上面有個(gè)不帶這個(gè)參數(shù)的a方法...那就攔截b方法,直接反射去執(zhí)行a方法,代碼如下:
安裝-重啟-打開(kāi)app,沒(méi)有廣告了,直接進(jìn)入主頁(yè)了...任務(wù)完成,美滋滋