[core] Log before hooked app crash (#700)

This commit is contained in:
LoveSy 2021-05-30 18:52:12 +08:00 committed by GitHub
parent 61db23cb18
commit b1198f83a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 4 deletions

View File

@ -24,6 +24,7 @@ import static org.lsposed.lspd.config.LSPApplicationServiceClient.serviceClient;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.ActivityThread; import android.app.ActivityThread;
import android.app.LoadedApk;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.res.CompatibilityInfo; import android.content.res.CompatibilityInfo;
import android.os.Environment; import android.os.Environment;
@ -32,6 +33,7 @@ import android.os.Process;
import org.lsposed.lspd.config.LSPApplicationServiceClient; import org.lsposed.lspd.config.LSPApplicationServiceClient;
import org.lsposed.lspd.deopt.PrebuiltMethodsDeopter; import org.lsposed.lspd.deopt.PrebuiltMethodsDeopter;
import org.lsposed.lspd.hooker.CrashDumpHooker;
import org.lsposed.lspd.hooker.HandleBindAppHooker; import org.lsposed.lspd.hooker.HandleBindAppHooker;
import org.lsposed.lspd.hooker.LoadedApkCstrHooker; import org.lsposed.lspd.hooker.LoadedApkCstrHooker;
import org.lsposed.lspd.hooker.StartBootstrapServicesHooker; import org.lsposed.lspd.hooker.StartBootstrapServicesHooker;
@ -52,16 +54,17 @@ import de.robv.android.xposed.XposedInit;
public class Main { public class Main {
public static void startBootstrapHook(boolean isSystem, String appDataDir) { public static void startBootstrapHook(boolean isSystem, String appDataDir) {
Utils.logD("startBootstrapHook starts: isSystem = " + isSystem); Utils.logD("startBootstrapHook starts: isSystem = " + isSystem);
ClassLoader classLoader = Main.class.getClassLoader(); XposedHelpers.findAndHookMethod(Thread.class, "dispatchUncaughtException",
Throwable.class, new CrashDumpHooker());
if (isSystem) { if (isSystem) {
XposedHelpers.findAndHookMethod("android.app.ActivityThread", classLoader, XposedHelpers.findAndHookMethod(ActivityThread.class,
"systemMain", new SystemMainHooker()); "systemMain", new SystemMainHooker());
} }
XposedHelpers.findAndHookMethod("android.app.ActivityThread", classLoader, XposedHelpers.findAndHookMethod(ActivityThread.class,
"handleBindApplication", "handleBindApplication",
"android.app.ActivityThread$AppBindData", "android.app.ActivityThread$AppBindData",
new HandleBindAppHooker(appDataDir)); new HandleBindAppHooker(appDataDir));
XposedHelpers.findAndHookConstructor("android.app.LoadedApk", classLoader, XposedHelpers.findAndHookConstructor(LoadedApk.class,
ActivityThread.class, ApplicationInfo.class, CompatibilityInfo.class, ActivityThread.class, ApplicationInfo.class, CompatibilityInfo.class,
ClassLoader.class, boolean.class, boolean.class, boolean.class, ClassLoader.class, boolean.class, boolean.class, boolean.class,
new LoadedApkCstrHooker()); new LoadedApkCstrHooker());

View File

@ -0,0 +1,17 @@
package org.lsposed.lspd.hooker;
import android.util.Log;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
public class CrashDumpHooker extends XC_MethodHook {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
try {
var e = (Throwable) param.args[0];
XposedBridge.log("Crash unexpectedly: " + Log.getStackTraceString(e));
} catch (Throwable ignored) {
}
}
}