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());
    }
}