重新建库,开源大部分代码,脱敏处理

This commit is contained in:
2026-06-03 19:09:28 +08:00
committed by Little1Yuan
commit 37f69aa244
145 changed files with 5800 additions and 0 deletions
@@ -0,0 +1,93 @@
package cn.nahco3awa.naouc;
import static android.widget.Toast.LENGTH_LONG;
import android.content.Context;
import android.os.Environment;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
public class MyCrashHandler implements Thread.UncaughtExceptionHandler {
private Thread.UncaughtExceptionHandler mDefaultHandler;
private Context mcontext;
private static MyCrashHandler myCrashHandler;
private MyCrashHandler() {}
public static synchronized MyCrashHandler newInstance() {
if (myCrashHandler == null)
myCrashHandler = new MyCrashHandler();
return myCrashHandler;
}
public void init(Context context) {
mcontext = context;
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(this);
}
@Override
public void uncaughtException(@NonNull Thread t, Throwable e) {
new AlertDialog.Builder(mcontext)
.setTitle("未捕获的异常!")
.setMessage(e.getMessage())
.show();
Toast.makeText(mcontext, e.getMessage(), LENGTH_LONG).show();
if (!handleExample(e) && mDefaultHandler != null) {
mDefaultHandler.uncaughtException(t, e);
} else {
try {
Thread.sleep(3000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}
}
private boolean handleExample(Throwable ex) {
if(ex == null)
return false;
saveCrashInfoToFile(ex);
return true;
}
private void saveCrashInfoToFile(Throwable ex) {
Writer writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
ex.printStackTrace(printWriter);
Throwable exCause = ex.getCause();
while (exCause != null) {
exCause.printStackTrace(printWriter);
exCause = exCause.getCause();
}
printWriter.close();
long timeMillis = System.currentTimeMillis();
String fileName = "crash-" + timeMillis + ".log";
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
String path = "/storage/emulated/0/crash_logInfo/";
File fl = new File(path);
if (!fl.exists()) {
boolean ignored = fl.mkdirs();
}
try {
FileOutputStream fileOutputStream = new FileOutputStream(path + fileName);
fileOutputStream.write(writer.toString().getBytes());
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}