a.java 源代码
package com.mbridge.msdk.foundation.same.report.b;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.os.Process;
import android.text.TextUtils;
import android.text.format.Formatter;
import android.util.Log;
import com.mbridge.msdk.MBridgeConstans;
import com.mbridge.msdk.b.b;
import com.mbridge.msdk.foundation.same.b.e;
import com.mbridge.msdk.foundation.same.report.c;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.Thread;
import java.lang.ref.WeakReference;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.json.JSONObject;
public class a implements Thread.UncaughtExceptionHandler {
private static volatile a f17130c;
Handler f17131a = new Handler() {
@Override
public final void handleMessage(Message message) {
Context context;
HashMap hashMap;
super.handleMessage(message);
if (message.what != 101 || (context = (Context) a.this.f17132b.get()) == null) {
return;
}
Object obj = message.obj;
if ((obj instanceof HashMap) && (hashMap = (HashMap) obj) != null) {
new c(context).a((String) hashMap.get("crashinfo"), (File) hashMap.get("file"));
}
}
};
private WeakReference<Context> f17132b;
private Thread.UncaughtExceptionHandler f17133d;
private Throwable f17134e;
private a(Context context) {
this.f17132b = new WeakReference<>(context);
}
private int b(Context context) {
try {
return context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode;
} catch (PackageManager.NameNotFoundException e6) {
e6.printStackTrace();
return 0;
}
}
private static String c(Context context) {
try {
return context.getApplicationContext().getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e6) {
Log.e("", e6.getMessage());
return "";
}
}
private String d(Context context) {
try {
return context.getResources().getString(context.getPackageManager().getPackageInfo(context.getPackageName(), 0).applicationInfo.labelRes);
} catch (PackageManager.NameNotFoundException e6) {
e6.printStackTrace();
return null;
}
}
@Override
public void uncaughtException(Thread thread, Throwable th) {
String s6;
try {
this.f17134e = th;
com.mbridge.msdk.b.a b6 = b.a().b(com.mbridge.msdk.foundation.controller.a.e().h());
if (b6 == null) {
b6 = b.a().b();
}
if (b6.s() == null) {
s6 = "mbridge";
} else {
s6 = b6.s();
}
List<String> a7 = a(s6, "<mvpackage>(.*?)</mvpackage>");
if (a7.size() > 0) {
for (int i6 = 0; i6 < a7.size(); i6++) {
a(a(th), a7.get(i6), th, thread);
}
return;
}
a(a(th), s6, th, thread);
} catch (Exception e6) {
a(thread, th);
e6.printStackTrace();
}
}
public static a a(Context context) {
if (f17130c == null) {
synchronized (a.class) {
if (f17130c == null) {
f17130c = new a(context);
}
}
}
return f17130c;
}
private HashMap<String, Object> b() {
HashMap<String, Object> hashMap = new HashMap<>();
if (this.f17134e == null) {
return null;
}
String b6 = e.b(com.mbridge.msdk.foundation.same.b.c.MBRIDGE_CRASH_INFO);
File file = new File(b6 + "/");
if (!file.exists()) {
file.mkdirs();
}
String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis()));
File file2 = new File(b6 + "/sdkcrash" + format + ".txt");
try {
PrintWriter printWriter = new PrintWriter(new BufferedWriter(new FileWriter(file2)));
printWriter.println(a(this.f17134e, format));
printWriter.println("====");
this.f17134e.printStackTrace(printWriter);
printWriter.close();
hashMap.put("file", file2);
hashMap.put("time", format);
return hashMap;
} catch (Exception e6) {
e6.printStackTrace();
return null;
}
}
public final void a() {
this.f17133d = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(this);
}
private String a(Throwable th, String str) {
String str2;
try {
JSONObject jSONObject = new JSONObject();
Context context = this.f17132b.get();
if (context == null) {
return "";
}
File externalStorageDirectory = Environment.getExternalStorageDirectory();
long usableSpace = externalStorageDirectory.getUsableSpace();
long totalSpace = externalStorageDirectory.getTotalSpace();
String formatFileSize = Formatter.formatFileSize(context, usableSpace);
String formatFileSize2 = Formatter.formatFileSize(context, totalSpace);
jSONObject.put("max_memory", String.valueOf((float) ((Runtime.getRuntime().maxMemory() * 1.0d) / 1048576.0d)));
jSONObject.put("memoryby_app", String.valueOf((float) ((Runtime.getRuntime().totalMemory() * 1.0d) / 1048576.0d)));
jSONObject.put("remaining_memory", (float) ((Runtime.getRuntime().freeMemory() * 1.0d) / 1048576.0d));
jSONObject.put("sdcard_remainder", formatFileSize);
jSONObject.put("totalspacestr", formatFileSize2);
jSONObject.put("crashtime", str);
String b6 = com.mbridge.msdk.foundation.a.a.a.a().b(MBridgeConstans.SDK_APP_ID);
if (!TextUtils.isEmpty(b6)) {
jSONObject.put("appid", b6);
}
try {
jSONObject.put("osversion", Build.VERSION.SDK_INT);
jSONObject.put("appversioncode", b(context));
str2 = "appversionname";
try {
jSONObject.put(str2, c(context));
jSONObject.put("appname", d(context));
} catch (Exception unused) {
jSONObject.put("osversion", 0);
jSONObject.put("appversioncode", "-1");
jSONObject.put(str2, "-1");
jSONObject.put("appname", "");
StringWriter stringWriter = new StringWriter();
th.printStackTrace(new PrintWriter(stringWriter));
jSONObject.put("crashinfo", stringWriter.toString());
String jSONObject2 = jSONObject.toString();
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("key=2000052");
stringBuffer.append("&exception=" + jSONObject2);
return stringBuffer.toString();
}
} catch (Exception unused2) {
str2 = "appversionname";
}
StringWriter stringWriter2 = new StringWriter();
th.printStackTrace(new PrintWriter(stringWriter2));
jSONObject.put("crashinfo", stringWriter2.toString());
String jSONObject22 = jSONObject.toString();
StringBuffer stringBuffer2 = new StringBuffer();
stringBuffer2.append("key=2000052");
stringBuffer2.append("&exception=" + jSONObject22);
return stringBuffer2.toString();
} catch (Throwable th2) {
th2.printStackTrace();
return "";
}
}
private String a(Throwable th) {
StackTraceElement[] stackTrace = th.getStackTrace();
StringBuilder sb = new StringBuilder();
for (StackTraceElement stackTraceElement : stackTrace) {
sb.append(stackTraceElement.toString() + "\n");
}
return sb.toString();
}
private void a(String str, String str2, Throwable th, Thread thread) {
if (str.contains(str2)) {
HashMap<String, Object> b6 = b();
if (b6 == null || b6.get("file") == null) {
return;
}
Message obtain = Message.obtain();
HashMap hashMap = new HashMap();
hashMap.put("crashinfo", a(th, (String) b6.get("time")));
hashMap.put("file", b6.get("file"));
obtain.obj = hashMap;
obtain.what = 101;
this.f17131a.sendMessage(obtain);
a(thread, th);
return;
}
Thread.UncaughtExceptionHandler uncaughtExceptionHandler = this.f17133d;
if (uncaughtExceptionHandler != null) {
uncaughtExceptionHandler.uncaughtException(thread, th);
}
}
private List<String> a(String str, String str2) {
ArrayList arrayList = new ArrayList();
try {
Matcher matcher = Pattern.compile(str2).matcher(str);
while (matcher.find()) {
arrayList.add(matcher.group(1));
}
} catch (Exception e6) {
e6.printStackTrace();
}
return arrayList;
}
private void a(Thread thread, Throwable th) {
try {
Thread.sleep(2000L);
} catch (InterruptedException e6) {
e6.printStackTrace();
}
Process.killProcess(Process.myPid());
}
}