|
|
|
|
|
package com.rehome.dywoa;
|
|
|
|
|
|
|
|
|
|
|
|
import android.app.Application;
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
|
|
import android.content.pm.ApplicationInfo;
|
|
|
|
|
|
import android.content.pm.PackageInfo;
|
|
|
|
|
|
import android.content.pm.PackageManager;
|
|
|
|
|
|
import android.text.TextUtils;
|
|
|
|
|
|
import android.util.Log;
|
|
|
|
|
|
|
|
|
|
|
|
import androidx.multidex.MultiDex;
|
|
|
|
|
|
|
|
|
|
|
|
import com.just.agentweb.AgentWebCompat;
|
|
|
|
|
|
import com.rehome.dywoa.bean.UserInfoBean;
|
|
|
|
|
|
import com.rehome.dywoa.utils.DpPxSpTransformUtil;
|
|
|
|
|
|
import com.rehome.dywoa.utils.SPUtils;
|
|
|
|
|
|
import com.sangfor.sdk.base.SFSDKExtras;
|
|
|
|
|
|
import com.tencent.bugly.crashreport.CrashReport;
|
|
|
|
|
|
import com.xuexiang.xui.XUI;
|
|
|
|
|
|
import com.yolanda.nohttp.NoHttp;
|
|
|
|
|
|
import com.zhy.autolayout.config.AutoLayoutConifg;
|
|
|
|
|
|
|
|
|
|
|
|
import org.litepal.LitePalApplication;
|
|
|
|
|
|
|
|
|
|
|
|
import com.sangfor.sdk.SFUemSDK;
|
|
|
|
|
|
import com.sangfor.sdk.base.SFSDKFlags;
|
|
|
|
|
|
import com.sangfor.sdk.base.SFSDKMode;
|
|
|
|
|
|
import com.rehome.dywoa.vpn.GlobalListenerManager;
|
|
|
|
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
|
|
public class App extends LitePalApplication {
|
|
|
|
|
|
public static Context context = null;
|
|
|
|
|
|
private UserInfoBean.UserInfo userInfo;
|
|
|
|
|
|
private static App mInstance;
|
|
|
|
|
|
public static Context mContext;
|
|
|
|
|
|
|
|
|
|
|
|
public static App getInstance() {
|
|
|
|
|
|
return mInstance;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public void onCreate() {
|
|
|
|
|
|
super.onCreate();
|
|
|
|
|
|
context = this;
|
|
|
|
|
|
mInstance = this;
|
|
|
|
|
|
|
|
|
|
|
|
NoHttp.initialize(this);
|
|
|
|
|
|
MultiDex.install(this);
|
|
|
|
|
|
NoHttp.setDefaultConnectTimeout(3 * 1000);
|
|
|
|
|
|
NoHttp.setDefaultReadTimeout(120 * 1000);
|
|
|
|
|
|
initUser();
|
|
|
|
|
|
AutoLayoutConifg.getInstance().useDeviceSize();
|
|
|
|
|
|
XUI.init(this); //初始化UI框架
|
|
|
|
|
|
CrashReport.initCrashReport(getApplicationContext(), "f147ce3be5", true);
|
|
|
|
|
|
|
|
|
|
|
|
String applicationId = App.getApplicationId(context);
|
|
|
|
|
|
showLog(applicationId);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected void attachBaseContext(Context base) {
|
|
|
|
|
|
super.attachBaseContext(base);
|
|
|
|
|
|
MultiDex.install(base);
|
|
|
|
|
|
mContext = base;
|
|
|
|
|
|
AgentWebCompat.setDataDirectorySuffix(base);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 初始化深信服sdk,推荐在attachBaseContext中调用,因为sdk延后初始化会导致多进程场景下,子进程无法拥有sdk的能力
|
|
|
|
|
|
* 初始化深信服注销监听回调
|
|
|
|
|
|
* 初始化深信服dp,sp转px的工具类
|
|
|
|
|
|
*/
|
|
|
|
|
|
initSdk(base);
|
|
|
|
|
|
GlobalListenerManager.getInstance().init(base);
|
|
|
|
|
|
DpPxSpTransformUtil.init(getResources().getDisplayMetrics().density);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void initUser() {
|
|
|
|
|
|
this.userInfo = SPUtils.getUser(this);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public UserInfoBean.UserInfo getUserInfo() {
|
|
|
|
|
|
return userInfo;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void setUserInfo(UserInfoBean.UserInfo userInfo) {
|
|
|
|
|
|
this.userInfo = userInfo;
|
|
|
|
|
|
SPUtils.putUser(this, userInfo);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void clearUser() {
|
|
|
|
|
|
this.userInfo = null;
|
|
|
|
|
|
SPUtils.clearUser(this);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void showLog(String logText) {
|
|
|
|
|
|
if (isApkInDebug(context)) {
|
|
|
|
|
|
if (TextUtils.isEmpty(logText)) {
|
|
|
|
|
|
Log.i("app", "logText is null");
|
|
|
|
|
|
} else {
|
|
|
|
|
|
Log.i("app", logText);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void initSdk(Context context) {
|
|
|
|
|
|
SFSDKMode sdkMode = SFSDKMode.MODE_SUPPORT_MUTABLE; // 表明启用可变授权功能,详情参考集成指导文档
|
|
|
|
|
|
switch (sdkMode) {
|
|
|
|
|
|
case MODE_SUPPORT_MUTABLE:
|
|
|
|
|
|
case MODE_VPN: { //只使用VPN功能场景
|
|
|
|
|
|
//Map<SFSDKExtras, String> extra = new HashMap<>();
|
|
|
|
|
|
int sdkFlags = SFSDKFlags.FLAGS_HOST_APPLICATION; //表明是单应用或者是主应用
|
|
|
|
|
|
sdkFlags |= SFSDKFlags.FLAGS_VPN_MODE_TCP; //表明使用VPN功能中的TCP模式
|
|
|
|
|
|
SFUemSDK.getInstance().initSDK(this, sdkMode, sdkFlags, null);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case MODE_SANDBOX: { //只使用安全沙箱功能场景
|
|
|
|
|
|
int sdkFlags = SFSDKFlags.FLAGS_HOST_APPLICATION; //表明是单应用或者是主应用
|
|
|
|
|
|
SFUemSDK.getInstance().initSDK(this, sdkMode, sdkFlags, null);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case MODE_VPN_SANDBOX: { //同时使用VPN功能+安全沙箱功能场景
|
|
|
|
|
|
int sdkFlags = SFSDKFlags.FLAGS_HOST_APPLICATION; //表明是单应用或者是主应用
|
|
|
|
|
|
sdkFlags |= SFSDKFlags.FLAGS_VPN_MODE_TCP; //表明使用VPN功能中的TCP模式
|
|
|
|
|
|
SFUemSDK.getInstance().initSDK(this, sdkMode, sdkFlags, null);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
default: {
|
|
|
|
|
|
showLog("SDK模式错误");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 判断当前应用是否是debug状态
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
public static boolean isApkInDebug(Context context) {
|
|
|
|
|
|
try {
|
|
|
|
|
|
ApplicationInfo info = context.getApplicationInfo();
|
|
|
|
|
|
return (info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static String getApplicationId(Context context) {
|
|
|
|
|
|
PackageManager packageManager = context.getPackageManager();
|
|
|
|
|
|
String packageName = context.getPackageName();
|
|
|
|
|
|
try {
|
|
|
|
|
|
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName, 0);
|
|
|
|
|
|
return applicationInfo.packageName;
|
|
|
|
|
|
} catch (PackageManager.NameNotFoundException e) {
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|