diff --git a/core/src/main/cpp/main/api/zygisk_main.cpp b/core/src/main/cpp/main/api/zygisk_main.cpp index 90a48be0..35bb3645 100644 --- a/core/src/main/cpp/main/api/zygisk_main.cpp +++ b/core/src/main/cpp/main/api/zygisk_main.cpp @@ -319,11 +319,11 @@ namespace lspd { if (*allowUnload) api_->setOption(zygisk::DLCLOSE_MODULE_LIBRARY); } - void preServerSpecialize(zygisk::ServerSpecializeArgs *) override { + void preServerSpecialize([[maybe_unused]] zygisk::ServerSpecializeArgs *args) override { Context::GetInstance()->OnNativeForkSystemServerPre(env_); } - void postServerSpecialize(const zygisk::ServerSpecializeArgs *) override { + void postServerSpecialize([[maybe_unused]] const zygisk::ServerSpecializeArgs *args) override { if (__system_property_find("ro.vendor.product.ztename")) { auto *process = env_->FindClass("android/os/Process"); auto *set_argv0 = env_->GetStaticMethodID(process, "setArgV0", diff --git a/core/src/main/cpp/main/src/service.cpp b/core/src/main/cpp/main/src/service.cpp index dc8616bc..c1da4a44 100644 --- a/core/src/main/cpp/main/src/service.cpp +++ b/core/src/main/cpp/main/src/service.cpp @@ -322,7 +322,7 @@ namespace lspd { } auto parcel_fd = JNI_CallObjectMethod(env, reply, read_file_descriptor_method_); int fd = JNI_CallIntMethod(env, parcel_fd, detach_fd_method_); - auto size = JNI_CallLongMethod(env, reply, read_long_method_); + auto size = static_cast(JNI_CallLongMethod(env, reply, read_long_method_)); JNI_CallVoidMethod(env, data, recycleMethod_); JNI_CallVoidMethod(env, reply, recycleMethod_); diff --git a/core/src/main/java/org/lsposed/lspd/core/Main.java b/core/src/main/java/org/lsposed/lspd/core/Main.java index 655faa2d..aaecb606 100644 --- a/core/src/main/java/org/lsposed/lspd/core/Main.java +++ b/core/src/main/java/org/lsposed/lspd/core/Main.java @@ -28,13 +28,15 @@ import android.os.Environment; import android.os.IBinder; import android.os.Process; +import com.android.internal.os.ZygoteInit; + import org.lsposed.lspd.BuildConfig; import org.lsposed.lspd.config.LSPApplicationServiceClient; import org.lsposed.lspd.deopt.PrebuiltMethodsDeopter; import org.lsposed.lspd.hooker.CrashDumpHooker; import org.lsposed.lspd.hooker.HandleBindAppHooker; import org.lsposed.lspd.hooker.LoadedApkCstrHooker; -import org.lsposed.lspd.hooker.SystemMainHooker; +import org.lsposed.lspd.hooker.HandleSystemServerProcessHooker; import org.lsposed.lspd.util.ParasiticManagerHooker; import org.lsposed.lspd.util.Utils; import org.lsposed.lspd.yahfa.hooker.YahfaHooker; @@ -51,8 +53,8 @@ public class Main { XposedHelpers.findAndHookMethod(Thread.class, "dispatchUncaughtException", Throwable.class, new CrashDumpHooker()); if (isSystem) { - XposedHelpers.findAndHookMethod(ActivityThread.class, - "systemMain", new SystemMainHooker()); + XposedBridge.hookAllMethods(ZygoteInit.class, + "handleSystemServerProcess", new HandleSystemServerProcessHooker()); } XposedHelpers.findAndHookMethod(ActivityThread.class, "handleBindApplication", diff --git a/core/src/main/java/org/lsposed/lspd/hooker/SystemMainHooker.java b/core/src/main/java/org/lsposed/lspd/hooker/HandleSystemServerProcessHooker.java similarity index 71% rename from core/src/main/java/org/lsposed/lspd/hooker/SystemMainHooker.java rename to core/src/main/java/org/lsposed/lspd/hooker/HandleSystemServerProcessHooker.java index 34159a33..2f37dd82 100644 --- a/core/src/main/java/org/lsposed/lspd/hooker/SystemMainHooker.java +++ b/core/src/main/java/org/lsposed/lspd/hooker/HandleSystemServerProcessHooker.java @@ -20,33 +20,29 @@ package org.lsposed.lspd.hooker; -import android.os.Build; - import org.lsposed.lspd.deopt.PrebuiltMethodsDeopter; import org.lsposed.lspd.util.Hookers; import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; // system_server initialization -public class SystemMainHooker extends XC_MethodHook { +public class HandleSystemServerProcessHooker extends XC_MethodHook { public static volatile ClassLoader systemServerCL; @Override protected void afterHookedMethod(MethodHookParam param) { - Hookers.logD("ActivityThread#systemMain() starts"); + Hookers.logD("ZygoteInit#handleSystemServerProcess() starts"); try { // get system_server classLoader systemServerCL = Thread.currentThread().getContextClassLoader(); // deopt methods in SYSTEMSERVERCLASSPATH PrebuiltMethodsDeopter.deoptSystemServerMethods(systemServerCL); - var sbsHooker = new StartBootstrapServicesHooker(); - Object[] paramTypesAndCallback = Build.VERSION.SDK_INT >= Build.VERSION_CODES.R ? - new Object[]{"com.android.server.utils.TimingsTraceAndSlog", sbsHooker} : - new Object[]{sbsHooker}; - XposedHelpers.findAndHookMethod("com.android.server.SystemServer", - systemServerCL, "startBootstrapServices", paramTypesAndCallback); + XposedBridge.hookAllMethods( + XposedHelpers.findClass("com.android.server.SystemServer", systemServerCL), + "startBootstrapServices", new StartBootstrapServicesHooker()); } catch (Throwable t) { Hookers.logE("error when hooking systemMain", t); } diff --git a/core/src/main/java/org/lsposed/lspd/hooker/StartBootstrapServicesHooker.java b/core/src/main/java/org/lsposed/lspd/hooker/StartBootstrapServicesHooker.java index 0ae91b73..2e8f4351 100644 --- a/core/src/main/java/org/lsposed/lspd/hooker/StartBootstrapServicesHooker.java +++ b/core/src/main/java/org/lsposed/lspd/hooker/StartBootstrapServicesHooker.java @@ -41,7 +41,7 @@ public class StartBootstrapServicesHooker extends XC_MethodHook { XC_LoadPackage.LoadPackageParam lpparam = new XC_LoadPackage.LoadPackageParam(XposedBridge.sLoadedPackageCallbacks); lpparam.packageName = "android"; lpparam.processName = "android"; // it's actually system_server, but other functions return this as well - lpparam.classLoader = SystemMainHooker.systemServerCL; + lpparam.classLoader = HandleSystemServerProcessHooker.systemServerCL; lpparam.appInfo = null; lpparam.isFirstApplication = true; XC_LoadPackage.callAll(lpparam); diff --git a/hiddenapi-stubs/src/main/java/com/android/internal/os/ZygoteInit.java b/hiddenapi-stubs/src/main/java/com/android/internal/os/ZygoteInit.java new file mode 100644 index 00000000..243b350a --- /dev/null +++ b/hiddenapi-stubs/src/main/java/com/android/internal/os/ZygoteInit.java @@ -0,0 +1,4 @@ +package com.android.internal.os; + +public class ZygoteInit { +}