看到图挂了的是因为,我用的图床可能需要科学上学才可以访问,已经改为国内的图床服务了
软件版本
智慧树_家长版_P_Final_7.7.9(779)
原包下载地址:https://www.hybbtree.com/terminals/
用着这个软件的都知道,里面的广告数不胜数,开屏、弹框、横幅、列表广告,看完视频又弹个广告出来
去除开屏广告
使用MT管理器的Activity记录功能,找到开屏类GeLoadingAct
在类里面找到了一个变量声明
/* renamed from: a */
private SplashAdModule f60320a;
我们找到它的实现
/* renamed from: t1 */
private void m60088t1() {
SplashAdModule splashAdModule = new SplashAdModule(this.mContext, "group_open", new C14189c());
this.f60320a = splashAdModule;
boolean m47469H = splashAdModule.m47469H();
this.f60330k = System.currentTimeMillis();
if (m47469H) {
this.f60331l.sendEmptyMessageDelayed(this.f60321b, this.f60320a.m47467C() * 1000.0f);
} else {
this.f60331l.sendEmptyMessageDelayed(this.f60321b, FileUtils.FAT_FILE_TIMESTAMP_GRANULARITY);
}
}
通过这个可以大致推断出这里应该是开屏广告的初始化部分,我们进入到SplashAdModule,查看构造方法的实现
public SplashAdModule(Context context, String str, InterfaceC11378j interfaceC11378j) {
this.f43046c = context;
this.f43048e = interfaceC11378j;
this.f43047d = str;
m47435D();
((FragmentActivity) this.f43046c).getLifecycle().addObserver(new LifeObserver(this, null));
}
进入m47435D()方法,我们可以推断出这里应该是广告初始化的部分
/* renamed from: D */
private void m47435D() {
if (App.m44465f() == 1) {
if (AdConstants.m48125e() == null || AdConstants.m48125e().openAdType == 0) {
return;
}
this.f43049f = new SdkSplashAd();
DisplayMetrics m43787v = ReadPhoneInfo.m43787v(this.f43046c);
SdkSplashAd sdkSplashAd = this.f43049f;
if (AdConstants.m48125e().openAdType == 1) {
SdkSplashAd.SplashPos splashPos = new SdkSplashAd.SplashPos();
splashPos.priority = 100;
splashPos.sdkCode = "MIXER";
this.f43052i.add(splashPos);
this.f43053j.add("");
} else if (AdConstants.m48125e().openAdType == 2) {
AdConstants.m48128h(this.f43047d, 1, this.f43049f);
if (C10524m.m43667a(this.f43049f.items) > 0) {
SdkAdConfig.ADItem aDItem = this.f43049f.items.get(0);
if (C10524m.m43667a(aDItem.list) > 0) {
SdkSplashAd.SplashPos splashPos2 = (SdkSplashAd.SplashPos) aDItem.list.get(0);
}
if ((TextUtils.equals(splashPos2.sdkCode, "TOUTIAOSDK") || TextUtils.equals(splashPos2.sdkCode, "GROMORESDK")) && !TTAdManagerHolder.m48037i()) {
this.f43045b = 2;
}
}
}
}
} else {
this.f43049f = new SdkSplashAd();
DisplayMetrics m43787v2 = ReadPhoneInfo.m43787v(this.f43046c);
SdkSplashAd sdkSplashAd2 = this.f43049f;
this.f43052i.add(splashPos3);
this.f43053j.add("");
}
this.f43054k.add(Float.valueOf(m47467C()));
}
因此我们直接屏蔽D方法的调用。
在MT管理器中,搜索SplashAdModule,导航到D方法,长按查找调用处
可以看到有一个地方调用了,我们进入这个方法
直接注释这行即可
invoke-direct {p0}, Lnet/hyww/wisdomtree/core/adsdk/splash/SplashAdModule;->D()V
删除XXAdModule
打开jadx,查看一下代码结构
我们可以看到这里有一个package adsdk,我们在下面可以找到一些具体的AdModule的实现,因此我们可以把这个包下面类似XXAdModule的实现都给屏蔽掉
方法同上:
FeedSdkAdModule类的u、v方法,屏蔽掉用处
InsertSdkAdModule类的m方法的调用
InSpireSdkAdModule类的t方法的调用
布局优化
修改以下xml
将根节点的width和height改为0dp
android:layout_width="0dp"
android:layout_height="0dp"
这里试了在根节点添加android:visibility="gone"但是没有生效,可能是代码里面重新设置了可见性。
下载高清原图和视频
高清原图
PicDownLoadDialog 的onClick方法
这里我们可以看到它是根据is_member == 0 来处理的
转成smai代码,把if-nez改成 if-eqz即可。
高清视频
CircleVideoPreviewAct的onClick方法
这里是通过is_member == 1 来判断的,我们把if-ne 改成if-eq即可。