package cn.darkal.networkdiagnosis;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Environment;
import android.preference.PreferenceManager;
import android.support.multidex.MultiDexApplication;
import android.util.Log;
import com.tencent.bugly.Bugly;
import com.tencent.bugly.crashreport.CrashReport;
import net.gotev.uploadservice.UploadService;
import net.lightbody.bmp.BrowserMobProxy;
import net.lightbody.bmp.BrowserMobProxyServer;
import net.lightbody.bmp.proxy.CaptureType;
import net.lightbody.bmp.proxy.dns.AdvancedHostResolver;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Random;
/**
* Created by xuzhou on 2016/8/10.
*/
public class SysApplication extends MultiDexApplication {
public static Boolean isInitProxy = false;
public static int proxyPort = 8888;
public BrowserMobProxy proxy;
@Override
public void onCreate() {
super.onCreate();
initProxy();
// Gradle automatically generates proper variable as below.
UploadService.NAMESPACE = BuildConfig.APPLICATION_ID;
CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(getApplicationContext());
strategy.setAppChannel("GitHub");
Bugly.init(getApplicationContext(), "db9f598223", true);
}
public void initProxy() {
try {
FileUtils.forceMkdir(new File(Environment.getExternalStorageDirectory() + "/har"));
// FileUtils.cleanDirectory(new File(Environment.getExternalStorageDirectory() + "/har"));
// FileUtils.forceDelete(new File(Environment.getExternalStorageDirectory() + "/test.har"));
} catch (IOException e) {
// test.har文件不存在
}
new Thread(new Runnable() {
@Override
public void run() {
startProxy();
Intent intent = new Intent();
intent.setAction("proxyfinished");
sendBroadcast(intent);
}
}).start();
}
@Override
public void onTerminate() {
super.onTerminate();
new Thread(new Runnable() {
@Override
public void run() {
Log.e("~~~","onTerminate");
proxy.stop();
}
}).start();
}
public void startProxy(){
try {
proxy = new BrowserMobProxyServer();
proxy.setTrustAllServers(true);
proxy.start(8888);
} catch (Exception e) {
// 防止8888已被占用
Random rand = new Random();
int randNum = rand.nextInt(1000) + 8000;
proxyPort = randNum;
proxy = new BrowserMobProxyServer();
proxy.setTrustAllServers(true);
proxy.start(randNum);
}
Log.e("~~~", proxy.getPort() + "");
proxy.enableHarCaptureTypes(CaptureType.REQUEST_HEADERS, CaptureType.REQUEST_COOKIES,
CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_HEADERS, CaptureType.REQUEST_COOKIES,
CaptureType.RESPONSE_CONTENT);
String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
.format(new Date(System.currentTimeMillis()));
proxy.newHar(time);
SharedPreferences shp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
// 设置hosts
if(shp.getString("system_host", "").length()>0){
AdvancedHostResolver advancedHostResolver = proxy.getHostNameResolver();
for (String temp : shp.getString("system_host", "").split("\\n")){
if(temp.split(" ").length==2) {
advancedHostResolver.remapHost(temp.split(" ")[1],temp.split(" ")[0]);
Log.e("~~~~remapHost ",temp.split(" ")[1] +" " + temp.split(" ")[0]);
}
}
proxy.setHostNameResolver(advancedHostResolver);
}
isInitProxy = true;
}
}