admin
6 天以前 7f0825f8195a522ed7e8bcdb6347f3a719e06c74
BuWanVideo/src/com/weikou/beibeivideo/BeibeiVideoApplication.java
@@ -11,18 +11,21 @@
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.webkit.WebView;
import android.widget.Toast;
import com.alibaba.baichuan.android.trade.AlibcTradeSDK;
import com.alibaba.baichuan.android.trade.callback.AlibcTradeInitCallback;
import com.bytedance.applog.AppLog;
import com.bytedance.applog.InitConfig;
import com.bytedance.applog.util.UriConstants;
import com.apkfuns.log2file.LogFileEngineFactory;
import com.apkfuns.logutils.LogUtils;
import com.bytedance.sdk.djx.DJXSdk;
import com.bytedance.sdk.djx.DJXSdkConfig;
import com.bytedance.sdk.djx.IDJXPrivacyController;
import com.bytedance.sdk.djx.model.DJXError;
import com.bytedance.sdk.dp.DPSdk;
import com.bytedance.sdk.dp.DPSdkConfig;
import com.bytedance.sdk.dp.IDPPrivacyController;
@@ -32,7 +35,6 @@
import com.kwad.sdk.api.KsAdSDK;
import com.kwad.sdk.api.KsCustomController;
import com.kwad.sdk.api.SdkConfig;
import com.lcjian.library.util.ManifestDataUtil;
import com.lcjian.library.util.common.AndroidManifestUtil;
import com.lcjian.library.util.common.DeviceUtil;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
@@ -49,33 +51,35 @@
import com.umeng.commonsdk.UMConfigure;
import com.umeng.socialize.PlatformConfig;
import com.umeng.socialize.UMShareAPI;
import com.weikou.beibeivideo.entity.ad.AdPidInfo;
import com.weikou.beibeivideo.entity.ad.AdPositionEnum;
import com.weikou.beibeivideo.entity.ad.SplashAdLoadInfo;
import com.vivo.mobilead.manager.VInitCallback;
import com.vivo.mobilead.manager.VivoAdManager;
import com.vivo.mobilead.model.VAdConfig;
import com.vivo.mobilead.model.VCustomController;
import com.vivo.mobilead.model.VLocation;
import com.vivo.mobilead.unified.base.VivoAdError;
import com.weikou.beibeivideo.ui.SplashActivity;
import com.weikou.beibeivideo.ui.ad.SplashADFragment;
import com.weikou.beibeivideo.ui.ad.SplashAdActivity;
import com.weikou.beibeivideo.util.BeibeiConstant;
import com.weikou.beibeivideo.util.CrashHandler;
import com.weikou.beibeivideo.util.DebuggerUtils;
import com.weikou.beibeivideo.util.UserUtil;
import com.weikou.beibeivideo.util.ad.AdUtil;
import com.weikou.beibeivideo.util.ad.CSJConstant;
import com.weikou.beibeivideo.util.ad.GDTConstant;
import com.weikou.beibeivideo.util.ad.GMAdManagerHolder;
import com.weikou.beibeivideo.util.ad.TTAdManagerHolder;
import com.weikou.beibeivideo.util.downutil.StringUtils;
import com.yeshi.appupdate.util.PackageUtils2;
import org.apache.http.Header;
import org.greenrobot.eventbus.EventBus;
import org.json.JSONObject;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import androidx.multidex.MultiDex;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public class BeibeiVideoApplication extends Application {
@@ -122,7 +126,6 @@
    //兼容4.4以下版本
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(newBase);
        MultiDex.install(this);
    }
    private static Handler handler = new Handler() {
@@ -183,7 +186,6 @@
        application = this;
        instance = this;
        MultiDex.install(this);
        if (UserUtil.isAgreeUserProtocol(this) || BeibeiConstant.IS_TEST) {
            //如果同意了用户协议
            init(application, null);
@@ -202,6 +204,17 @@
     */
    public static void init(final Application application, InitListener initListener) {
        Log.i(TAG, "系统初始化");
        // 初始化广告位
        if(AndroidManifestUtil.isOppoChannel(application)){
            CSJConstant.SPLASH_AD = "889066047";
            CSJConstant.RECOMMEND_BIG_IMG_AD = "956732346";
            CSJConstant.APP_EXIT = "956732346";
            CSJConstant.VIDEO_DETAIL_PLAYER_BOTTOM= "956732346";
            CSJConstant.VIDEO_SEARCH= "956732346";
            CSJConstant.HOME_INTERSTITIALAD = "956732361";
        }
        inited = true;
        registerActivityListener(application);
        //防止动态代码注入
@@ -244,9 +257,13 @@
        ImageLoader.getInstance().init(buildDefaultILC(application));
        initCSJAd(application, initListener);
        if("huawei".equalsIgnoreCase(channel)) {
        if(AndroidManifestUtil.isHuaWeiChannel(application)) {
            initHWAdSDK(application);
        }
       if(AndroidManifestUtil.isVIVOChannel(application)){
           initVIVOAdSDK(application);
       }
        initKSSDK(application);
        try {
            GlobalSetting.setEnableCollectAppInstallStatus(false);
@@ -258,6 +275,30 @@
        initWX(application);
        initX5(application);
         if(BeibeiConstant.IS_TEST) {
             initLog(application);
         }
    }
    /**
     *  初始化日志,将未捕获的错误保存到日志中
     * @param application
     */
    private static void initLog(Application application){
        LogUtils.getLogConfig()
                .configAllowLog(true)
                .configTagPrefix("taoke")
                .configShowBorders(true)
                .configFormatTag("%d{HH:mm:ss:SSS} %t %c{-5}");
        LogUtils.getLog2FileConfig().configLog2FileEnable(true)
                // targetSdkVersion >= 23 需要确保有写sdcard权限
                .configLog2FilePath(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Download/" + application.getPackageName() + "/logs")
                .configLog2FileNameFormat("%d{yyyyMMdd}.txt")
                .configLogFileEngine(new LogFileEngineFactory(application));
        Thread.setDefaultUncaughtExceptionHandler(new MyExceptionHandler(application));
    }
    private static String getProcessName(Context context) {
@@ -341,6 +382,7 @@
                if (initListener != null)
                    initListener.onFinish();
                initDPSDK(context);
                initDJ(context);
            }
            @Override
@@ -398,27 +440,87 @@
                    @Override
                    public List<String> getInstalledPackages() {
                        return DeviceUtil.getInstalledPackageNamesCache(appContext);
                        return  new ArrayList<>(); //DeviceUtil.getInstalledPackageNamesCache(appContext);
                    }
                })// 是否开启sdk 调试⽇志 可选
                .build());
    }
    // VIVO广告初始化
    public static void initVIVOAdSDK(Application application){
        VAdConfig adConfig = new VAdConfig.Builder()
                .setMediaId("90928ed246a845d9a889aae07a961d78")
                //是否开启日志输出,请确保不要在正式环境开启
//                .setDebug(BuildConfig.DEBUG)
                //隐私数据获取配置,请根据 App 情况认真配置,避免产生收入问题或合规风险
                .setCustomController(new VCustomController() {
                    @Override
                    public boolean isCanUseLocation() {//是否允许获取位置信息,默认允许
                        return true;
                    }
                    @Override
                    public VLocation getLocation() {
                        //若不允许获取位置信息,亦可主动传给 SDK 位置信息
                        return null;
                    }
                    @Override
                    public boolean isCanUsePhoneState() {//是否允许获取 imei 信息,默认允许
                        return true;
                    }
                    @Override
                    public String getImei() {//若不允许获取 imei 信息,亦可主动传给 SDK imei 信息
                        String imei = DeviceUtil.getImeiCache(application);
                        return imei;
                    }
                    @Override
                    public boolean isCanUseWriteExternal() {//是否允许使用公共存储空间,默认允许
                        return true;
                    }
                    @Override
                    public boolean isCanPersonalRecommend() { //是否允许推荐个性化广告,默认允许
                        return true;
                    }
                    @Override
                    public boolean isCanUseImsi() { //是否允许获取 imsi,默认不允许
                        return false;
                    }
                    @Override
                    public boolean isCanUseApplist() { //是否允许获取应用列表,默认允许
                        return false;
                    }
                    @Override
                    public boolean isCanUseAndroidId() {//是否允许获取 AndroidId,默认允许
                        return true;
                    }
                    @Override
                    public boolean isCanUseMac() {//是否允许获取 mac,默认不允许
                        return false;
                    }
                    @Override
                    public boolean isCanUseIp() {//是否允许获取 ip,默认允许
                        return true;
                    }
                }).build();
        VivoAdManager.getInstance().init(application, adConfig, new VInitCallback() {
            @Override
            public void suceess() {
                Log.d("VIVO AD SDKInit", "suceess");
            }
            @Override
            public void failed(@NonNull VivoAdError adError) {
//若是报超时错误,则检查是否正常出现广告,如无异常,则是正常的
                Log.e("VIVO AD SDKInit", "failed: " + adError.toString());
            }
        });
    }
    private static boolean dpSDKIninted;
    public static void initDPSDK(Application application) {
        if (!AdUtil.isCanInitCSJ()) {
            return;
        }
        /* 初始化开始 */
        final InitConfig config = new InitConfig("5095354", AndroidManifestUtil.getChannel(application)); // appid和渠道,appid如不清楚请联系客户成功经理,注意第二个参数 channel 不能为空
        config.setUriConfig(UriConstants.DEFAULT);//上报地址
// 加密开关,SDK 5.5.1 及以上版本支持,false 为关闭加密,上线前建议设置为 true
        AppLog.setEncryptAndCompress(true);
        config.setAutoStart(true);
        AppLog.init(application, config);
        /* 初始化结束 */
        if (!dpSDKIninted) {
            DPSdkConfig.Builder configBuilder = new DPSdkConfig.Builder()
                    .debug(false)
@@ -460,18 +562,40 @@
                    //若您需要接入直播,参考「直播接入文档」;否则可忽略此参数。
            try {
                DPSdk.init(application, "SDK_Setting_5095354.json", configBuilder.build());
                DPSdk.start(new DPSdk.StartListener() {
                    @Override
                    public void onStartComplete(boolean b, String s) {
                        dpSDKIninted = b;
                        Log.i(TAG," DPSdk.start:"+b+", "+s);
                    }
                });
//                DPSdk.start(new DPSdk.StartListener() {
//                    @Override
//                    public void onStartComplete(boolean b, String s) {
//                        dpSDKIninted = b;
//                        Log.i(TAG," DPSdk.start:"+b+", "+s);
//                    }
//                });
            } catch (Exception e) {
            }
        }
    }
    public static void initDJ(Application application){
                try{
                    DJXSdk.init(application, "SDK_Setting_5095354.json", new DJXSdkConfig.Builder().privacyController(new IDJXPrivacyController() {
                        @Override
                        public boolean isOnlyICPNumber() {
                            return true;
                        }
                    }).debug(true).build());
                    DJXSdk.start(new DJXSdk.StartListener() {
                        @Override
                        public void onStartComplete(boolean b, String s, @Nullable DJXError djxError) {
                            Log.i(TAG, String.format("DJXSdk.init:%s,%s", b, s));
                        }
                    });
                }catch(Exception e){
                    e.printStackTrace();
                }
    }
@@ -592,3 +716,28 @@
    }
}
class MyExceptionHandler implements Thread.UncaughtExceptionHandler {
    private final String TAG ="MyExceptionHandler";
    private final Context context;
    public MyExceptionHandler(Context context) {
        this.context = context;
    }
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        try {
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            e.printStackTrace(pw);
            pw.flush();
            sw.flush();
            LogUtils.tag(TAG).e(sw.toString());
            LogUtils.getLog2FileConfig().flushAsync();
        }catch(Throwable ee){
        }
    }
}