某免费视频软件AD机制分析

前言

最近发现一个不错得免费视频软件,资源很丰富,网速也很快,连奈飞都不用开了,唯一缺点,就是AD有点多,影响观看体验,今天我们就来看看它的AD机制

具体分析

  • 该软件得核心特征是有一个libpp_hls.so
  • 该软件使用的视频播放库:yjPlay
  • 先过签
    MT管理器过签即可,若没有会员可以尝试NP管理器
  • 第一处AD
//AppApplication
GDTAdSdk.init()
  • 第二处
//AppApplication
ZjSdk.init()
  • 第三处
//AppApplication
MQSDK.getInstance().initSdk();
  • 接下来是终身免AD特权
MineUserInfo.getIs_vip()
  • 去除更新
UpdateEvent$UpdateData.getVersion()
  • 默认关闭弹幕
  • 其使用得开源库:DanmakuFlameMaster
  • 根据源码找到start函数对应得函数,置空函数即可
master.flame.danmaku.ui.widget.DanmakuView.start()
  • 最后发现还是不能完全去掉弹幕,需要再置空以下函数
VideoPlayDetailActivity.initBarrage()
  • 去掉推广Tab按钮
MainActivity.initData(){
//arrayList.add(new TabLayout.b(2131231947, 2131820825, 2131231943, -1, ExtensionShareFragment.class, 4));
}
  • 启动屏不再跳转第二AD屏,直接进入主界面
//SplashActivity
public /* synthetic */ void lambda$initViewObservable$2$SplashActivity(AdInfoEntry adInfoEntry) {
        this.delayedTime = true;
        if (au.H() == 0) {//这里永远为true即可
            au.q(1);
            this.handler.postDelayed(new Runnable() { // from class: com.ys.resemble.ui.login.splash.SplashActivity.2
                @Override // java.lang.Runnable
                public void run() {
                    SplashActivity.this.goToMain();
                }
            }, 500L);
        } 
        //省略.....
    }
  • 从后台打开APP后,不再跳转到AD屏
public static void c(MainActivity mainActivity, AdInfoDetailEntry adInfoDetailEntry) {
        Bundle bundle = new Bundle();
        bundle.putSerializable("adInfoDetailEntry", adInfoDetailEntry);
        bundle.putBoolean("flag", true);
        //mainActivity.startActivity(SplashSecondAdActivity.class, bundle);
    }
  • 禁止检测TV模式
    public static boolean o(Context context) {//isTV
        return ((UiModeManager) context.getSystemService("uimode")).getCurrentModeType() == 4;
    }
    public static boolean c(Context context) {//isTv
        return m(context) == 4;
    }

    private static int m(Context context) {
        UiModeManager uiModeManager = (UiModeManager) context.getSystemService("uimode");
        if (f567a || uiModeManager != null) {
            Log.d("getUiMode", uiModeManager.getCurrentModeType() + "");
            return uiModeManager.getCurrentModeType();
        }
        throw new AssertionError();
    }

你可能感兴趣的:(代码定位,java,开发语言)