diff --git a/edxp-common/build.gradle b/edxp-common/build.gradle index f07a4dda..4109bced 100644 --- a/edxp-common/build.gradle +++ b/edxp-common/build.gradle @@ -1,7 +1,7 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 28 + compileSdkVersion androidCompileSdkVersion.toInteger() defaultConfig { minSdkVersion 26 diff --git a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/_hooker/yahfa/StartBootstrapServicesHooker11.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/_hooker/yahfa/StartBootstrapServicesHooker11.java new file mode 100644 index 00000000..965fc38a --- /dev/null +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/_hooker/yahfa/StartBootstrapServicesHooker11.java @@ -0,0 +1,28 @@ +package com.elderdrivers.riru.edxp._hooker.yahfa; + +import com.elderdrivers.riru.common.KeepMembers; +import com.elderdrivers.riru.edxp._hooker.impl.StartBootstrapServices; + +import de.robv.android.xposed.XC_MethodHook; + +public class StartBootstrapServicesHooker11 implements KeepMembers { + public static String className = "com.android.server.SystemServer"; + public static String methodName = "startBootstrapServices"; + public static String methodSig = "(Lcom/android/server/utils/TimingsTraceAndSlog;)V"; + + public static void hook(Object systemServer, Object traceAndSlog) throws Throwable { + final XC_MethodHook methodHook = new StartBootstrapServices(); + final XC_MethodHook.MethodHookParam param = new XC_MethodHook.MethodHookParam(); + param.thisObject = systemServer; + param.args = new Object[]{traceAndSlog}; + methodHook.callBeforeHookedMethod(param); + if (!param.returnEarly) { + backup(systemServer, traceAndSlog); + } + methodHook.callAfterHookedMethod(param); + } + + public static void backup(Object systemServer, Object traceAndSlog) { + + } +} diff --git a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/entry/yahfa/SysInnerHookInfo.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/entry/yahfa/SysInnerHookInfo.java index 19400753..28b1f194 100644 --- a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/entry/yahfa/SysInnerHookInfo.java +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/entry/yahfa/SysInnerHookInfo.java @@ -2,9 +2,18 @@ package com.elderdrivers.riru.edxp.entry.yahfa; import com.elderdrivers.riru.common.KeepMembers; import com.elderdrivers.riru.edxp._hooker.yahfa.StartBootstrapServicesHooker; +import com.elderdrivers.riru.edxp._hooker.yahfa.StartBootstrapServicesHooker11; +import com.elderdrivers.riru.edxp.util.Versions; public class SysInnerHookInfo implements KeepMembers { + + public static Class getSysInnerHookerClass() { + return Versions.hasR() ? + StartBootstrapServicesHooker11.class : + StartBootstrapServicesHooker.class; + } + public static String[] hookItemNames = { - StartBootstrapServicesHooker.class.getName() + getSysInnerHookerClass().getName() }; } diff --git a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/proxy/BaseRouter.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/proxy/BaseRouter.java index e4758e99..06776e13 100644 --- a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/proxy/BaseRouter.java +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/proxy/BaseRouter.java @@ -21,6 +21,7 @@ import com.elderdrivers.riru.edxp.entry.yahfa.SysBootstrapHookInfo; import com.elderdrivers.riru.edxp.entry.yahfa.SysInnerHookInfo; import com.elderdrivers.riru.edxp.entry.yahfa.WorkAroundHookInfo; import com.elderdrivers.riru.edxp.util.Utils; +import com.elderdrivers.riru.edxp.util.Versions; import java.util.concurrent.atomic.AtomicBoolean; @@ -127,9 +128,13 @@ public abstract class BaseRouter implements Router { public void startSystemServerHook() { ClassLoader classLoader = BaseRouter.class.getClassLoader(); if (useXposedApi) { + StartBootstrapServices sbsHooker = new StartBootstrapServices(); + Object[] paramTypesAndCallback = Versions.hasR() ? + new Object[]{"com.android.server.utils.TimingsTraceAndSlog", sbsHooker} : + new Object[]{sbsHooker}; XposedHelpers.findAndHookMethod(StartBootstrapServicesHooker.className, SystemMain.systemServerCL, - StartBootstrapServicesHooker.methodName, new StartBootstrapServices()); + StartBootstrapServicesHooker.methodName, paramTypesAndCallback); } else { HookMain.doHookDefault( classLoader, diff --git a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/Versions.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/Versions.java new file mode 100644 index 00000000..73aed0b2 --- /dev/null +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/Versions.java @@ -0,0 +1,10 @@ +package com.elderdrivers.riru.edxp.util; + +import android.os.Build; + +public class Versions { + + public static boolean hasR() { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.R; + } +} diff --git a/edxp-core/build.gradle b/edxp-core/build.gradle index 22b9a82b..506e1a1e 100644 --- a/edxp-core/build.gradle +++ b/edxp-core/build.gradle @@ -37,7 +37,7 @@ ext { } android { - compileSdkVersion 28 + compileSdkVersion androidCompileSdkVersion.toInteger() defaultConfig { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion diff --git a/edxp-sandhook/build.gradle b/edxp-sandhook/build.gradle index aa74215d..93cf6241 100644 --- a/edxp-sandhook/build.gradle +++ b/edxp-sandhook/build.gradle @@ -4,7 +4,7 @@ sourceCompatibility = "7" targetCompatibility = "7" android { - compileSdkVersion 28 + compileSdkVersion androidCompileSdkVersion.toInteger() defaultConfig { applicationId "com.elderdrivers.riru.edxp.sandhook" diff --git a/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/entry/SysInnerHookInfo.java b/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/entry/SysInnerHookInfo.java index 4c912089..c5df312c 100644 --- a/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/entry/SysInnerHookInfo.java +++ b/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/entry/SysInnerHookInfo.java @@ -2,13 +2,22 @@ package com.elderdrivers.riru.edxp.sandhook.entry; import com.elderdrivers.riru.common.KeepMembers; import com.elderdrivers.riru.edxp.sandhook.hooker.StartBootstrapServicesHooker; +import com.elderdrivers.riru.edxp.sandhook.hooker.StartBootstrapServicesHooker11; +import com.elderdrivers.riru.edxp.util.Versions; public class SysInnerHookInfo implements KeepMembers { + + public static Class getSysInnerHookerClass() { + return Versions.hasR() ? + StartBootstrapServicesHooker11.class : + StartBootstrapServicesHooker.class; + } + public static String[] hookItemNames = { - StartBootstrapServicesHooker.class.getName() + getSysInnerHookerClass().getName() }; public static Class[] hookItems = { - StartBootstrapServicesHooker.class + getSysInnerHookerClass() }; } diff --git a/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/hooker/StartBootstrapServicesHooker11.java b/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/hooker/StartBootstrapServicesHooker11.java new file mode 100644 index 00000000..da189c4e --- /dev/null +++ b/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/hooker/StartBootstrapServicesHooker11.java @@ -0,0 +1,43 @@ +package com.elderdrivers.riru.edxp.sandhook.hooker; + +import com.elderdrivers.riru.common.KeepMembers; +import com.elderdrivers.riru.edxp._hooker.impl.StartBootstrapServices; +import com.swift.sandhook.SandHook; +import com.swift.sandhook.annotation.HookMethod; +import com.swift.sandhook.annotation.HookMethodBackup; +import com.swift.sandhook.annotation.HookReflectClass; +import com.swift.sandhook.annotation.Param; +import com.swift.sandhook.annotation.SkipParamCheck; +import com.swift.sandhook.annotation.ThisObject; + +import java.lang.reflect.Method; + +import de.robv.android.xposed.XC_MethodHook; + +@HookReflectClass("com.android.server.SystemServer") +public class StartBootstrapServicesHooker11 implements KeepMembers { + public static String className = "com.android.server.SystemServer"; + public static String methodName = "startBootstrapServices"; + public static String methodSig = "(Lcom/android/server/utils/TimingsTraceAndSlog;)V"; + + @HookMethodBackup("startBootstrapServices") + @SkipParamCheck + static Method backup; + + @HookMethod("startBootstrapServices") + public static void hook(@ThisObject Object systemServer, @Param("com.android.server.utils.TimingsTraceAndSlog") Object traceAndSlog) throws Throwable { + final XC_MethodHook methodHook = new StartBootstrapServices(); + final XC_MethodHook.MethodHookParam param = new XC_MethodHook.MethodHookParam(); + param.thisObject = systemServer; + param.args = new Object[]{traceAndSlog}; + methodHook.callBeforeHookedMethod(param); + if (!param.returnEarly) { + backup(systemServer, traceAndSlog); + } + methodHook.callAfterHookedMethod(param); + } + + public static void backup(Object systemServer, Object traceAndSlog) throws Throwable { + SandHook.callOriginByBackup(backup, systemServer, traceAndSlog); + } +} diff --git a/edxp-whale/build.gradle b/edxp-whale/build.gradle index 93e8a4f6..4c9d5d4a 100644 --- a/edxp-whale/build.gradle +++ b/edxp-whale/build.gradle @@ -4,7 +4,7 @@ sourceCompatibility = "7" targetCompatibility = "7" android { - compileSdkVersion 28 + compileSdkVersion androidCompileSdkVersion.toInteger() defaultConfig { applicationId "com.elderdrivers.riru.edxp.whale" diff --git a/edxp-yahfa/build.gradle b/edxp-yahfa/build.gradle index 3e68e503..7e7cf27d 100644 --- a/edxp-yahfa/build.gradle +++ b/edxp-yahfa/build.gradle @@ -4,7 +4,7 @@ sourceCompatibility = "7" targetCompatibility = "7" android { - compileSdkVersion 28 + compileSdkVersion androidCompileSdkVersion.toInteger() defaultConfig { applicationId "com.elderdrivers.riru.edxp.yahfa" diff --git a/gradle.properties b/gradle.properties index fffbac40..a19ed5f9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1,3 @@ -android.enableR8=false \ No newline at end of file +android.enableR8=false + +androidCompileSdkVersion=30 \ No newline at end of file diff --git a/hiddenapi-stubs/build.gradle b/hiddenapi-stubs/build.gradle index 14de44ba..beb26cf1 100644 --- a/hiddenapi-stubs/build.gradle +++ b/hiddenapi-stubs/build.gradle @@ -3,7 +3,7 @@ import com.android.builder.core.BuilderConstants apply plugin: 'com.android.library' android { - compileSdkVersion 28 + compileSdkVersion androidCompileSdkVersion.toInteger() } task makeStubJar(type: Jar){ diff --git a/xposed-bridge/build.gradle b/xposed-bridge/build.gradle index 0d9a288a..a4ed4a4a 100644 --- a/xposed-bridge/build.gradle +++ b/xposed-bridge/build.gradle @@ -1,7 +1,7 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 28 + compileSdkVersion androidCompileSdkVersion.toInteger() buildToolsVersion '28.0.3' defaultConfig {