[core] Log before hooked app crash (#700)
This commit is contained in:
parent
61db23cb18
commit
b1198f83a0
|
|
@ -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());
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue