Pull out common codes
This commit is contained in:
parent
5e271ec3e5
commit
7c7928760a
|
|
@ -45,4 +45,9 @@ afterEvaluate {
|
||||||
tasks.withType(JavaCompile) {
|
tasks.withType(JavaCompile) {
|
||||||
options.compilerArgs.add("-Xbootclasspath/p:${projectDir.absolutePath}/libs/framework-stub.jar")
|
options.compilerArgs.add("-Xbootclasspath/p:${projectDir.absolutePath}/libs/framework-stub.jar")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
task("copyCommonroperties", type: Copy) {
|
||||||
|
from file("${projectDir}/template_override/")
|
||||||
|
into file(templateRootPath)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
package com.elderdrivers.riru.edxp.config;
|
||||||
|
|
||||||
|
import com.elderdrivers.riru.edxp.deopt.PrebuiltMethodsDeopter;
|
||||||
|
import com.elderdrivers.riru.edxp.hook.HookProvider;
|
||||||
|
|
||||||
|
import java.lang.reflect.Member;
|
||||||
|
|
||||||
|
public abstract class BaseHookProvider implements HookProvider {
|
||||||
|
|
||||||
|
public Member findMethodNative(Member hookMethod) {
|
||||||
|
return hookMethod;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getMethodId(Member member) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object findMethodNative(Class clazz, String methodName, String methodSig) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deoptMethods(String packageName, ClassLoader classLoader) {
|
||||||
|
PrebuiltMethodsDeopter.deoptMethods(packageName, classLoader);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deoptMethodNative(Object method) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package com.elderdrivers.riru.edxp.yahfa.util;
|
package com.elderdrivers.riru.edxp.deopt;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
package com.elderdrivers.riru.edxp.yahfa.util;
|
package com.elderdrivers.riru.edxp.deopt;
|
||||||
|
|
||||||
|
import com.elderdrivers.riru.edxp.config.EdXpConfigGlobal;
|
||||||
import com.elderdrivers.riru.edxp.util.Utils;
|
import com.elderdrivers.riru.edxp.util.Utils;
|
||||||
import com.elderdrivers.riru.edxp.Main;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import de.robv.android.xposed.XposedHelpers;
|
import de.robv.android.xposed.XposedHelpers;
|
||||||
|
|
||||||
import static com.elderdrivers.riru.edxp.yahfa.util.InlinedMethodCallers.KEY_BOOT_IMAGE;
|
import static com.elderdrivers.riru.edxp.deopt.InlinedMethodCallers.KEY_BOOT_IMAGE;
|
||||||
import static com.elderdrivers.riru.edxp.yahfa.util.InlinedMethodCallers.KEY_SYSTEM_SERVER;
|
import static com.elderdrivers.riru.edxp.deopt.InlinedMethodCallers.KEY_SYSTEM_SERVER;
|
||||||
|
|
||||||
public class PrebuiltMethodsDeopter {
|
public class PrebuiltMethodsDeopter {
|
||||||
|
|
||||||
|
|
@ -19,10 +19,10 @@ public class PrebuiltMethodsDeopter {
|
||||||
}
|
}
|
||||||
for (String[] caller : callers) {
|
for (String[] caller : callers) {
|
||||||
try {
|
try {
|
||||||
Object method = Main.findMethodNative(
|
Object method = EdXpConfigGlobal.getHookProvider().findMethodNative(
|
||||||
XposedHelpers.findClass(caller[0], cl), caller[1], caller[2]);
|
XposedHelpers.findClass(caller[0], cl), caller[1], caller[2]);
|
||||||
if (method != null) {
|
if (method != null) {
|
||||||
Main.deoptMethodNative(method);
|
EdXpConfigGlobal.getHookProvider().deoptMethodNative(method);
|
||||||
}
|
}
|
||||||
} catch (Throwable throwable) {
|
} catch (Throwable throwable) {
|
||||||
Utils.logE("error when deopting method: " + Arrays.toString(caller), throwable);
|
Utils.logE("error when deopting method: " + Arrays.toString(caller), throwable);
|
||||||
|
|
@ -57,6 +57,7 @@ afterEvaluate {
|
||||||
def myTemplatePath = "${projectDir}/template_override/"
|
def myTemplatePath = "${projectDir}/template_override/"
|
||||||
|
|
||||||
task("makeAndCopy${variantNameCapped}", type: Jar, dependsOn: "assemble${variantNameCapped}") {
|
task("makeAndCopy${variantNameCapped}", type: Jar, dependsOn: "assemble${variantNameCapped}") {
|
||||||
|
dependsOn tasks.getByPath(":edxp-common:copyCommonroperties")
|
||||||
from "${buildDir}/intermediates/dex/${variantNameLowered}/mergeDex${variantNameCapped}/out/"
|
from "${buildDir}/intermediates/dex/${variantNameLowered}/mergeDex${variantNameCapped}/out/"
|
||||||
destinationDir file(myTemplatePath + "system/framework/")
|
destinationDir file(myTemplatePath + "system/framework/")
|
||||||
baseName "edxp"
|
baseName "edxp"
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,12 @@ package com.elderdrivers.riru.edxp.sandhook.entry.hooker;
|
||||||
import android.app.ActivityThread;
|
import android.app.ActivityThread;
|
||||||
|
|
||||||
import com.elderdrivers.riru.common.KeepMembers;
|
import com.elderdrivers.riru.common.KeepMembers;
|
||||||
|
import com.elderdrivers.riru.edxp.deopt.PrebuiltMethodsDeopter;
|
||||||
import com.elderdrivers.riru.edxp.sandhook.entry.Router;
|
import com.elderdrivers.riru.edxp.sandhook.entry.Router;
|
||||||
import com.elderdrivers.riru.edxp.sandhook.util.PrebuiltMethodsDeopter;
|
|
||||||
import com.swift.sandhook.SandHook;
|
import com.swift.sandhook.SandHook;
|
||||||
import com.swift.sandhook.annotation.HookClass;
|
import com.swift.sandhook.annotation.HookClass;
|
||||||
import com.swift.sandhook.annotation.HookMethod;
|
import com.swift.sandhook.annotation.HookMethod;
|
||||||
import com.swift.sandhook.annotation.HookMethodBackup;
|
import com.swift.sandhook.annotation.HookMethodBackup;
|
||||||
import com.swift.sandhook.annotation.HookMode;
|
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,11 @@ package com.elderdrivers.riru.edxp.sandhook.proxy;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
||||||
|
import com.elderdrivers.riru.edxp.deopt.PrebuiltMethodsDeopter;
|
||||||
import com.elderdrivers.riru.edxp.util.ProcessUtils;
|
import com.elderdrivers.riru.edxp.util.ProcessUtils;
|
||||||
import com.elderdrivers.riru.edxp.util.Utils;
|
import com.elderdrivers.riru.edxp.util.Utils;
|
||||||
import com.elderdrivers.riru.edxp.Main;
|
import com.elderdrivers.riru.edxp.Main;
|
||||||
import com.elderdrivers.riru.edxp.sandhook.entry.Router;
|
import com.elderdrivers.riru.edxp.sandhook.entry.Router;
|
||||||
import com.elderdrivers.riru.edxp.sandhook.util.PrebuiltMethodsDeopter;
|
|
||||||
|
|
||||||
import de.robv.android.xposed.XposedBridge;
|
import de.robv.android.xposed.XposedBridge;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@ package com.elderdrivers.riru.edxp.sandhook.proxy;
|
||||||
|
|
||||||
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
||||||
import com.elderdrivers.riru.edxp.Main;
|
import com.elderdrivers.riru.edxp.Main;
|
||||||
|
import com.elderdrivers.riru.edxp.deopt.PrebuiltMethodsDeopter;
|
||||||
import com.elderdrivers.riru.edxp.sandhook.entry.Router;
|
import com.elderdrivers.riru.edxp.sandhook.entry.Router;
|
||||||
import com.elderdrivers.riru.edxp.sandhook.util.PrebuiltMethodsDeopter;
|
|
||||||
|
|
||||||
import static com.elderdrivers.riru.edxp.util.FileUtils.getDataPathPrefix;
|
import static com.elderdrivers.riru.edxp.util.FileUtils.getDataPathPrefix;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
||||||
package com.elderdrivers.riru.edxp.sandhook.util;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Providing a whitelist of methods which are the callers of the target methods we want to hook.
|
|
||||||
* Because the target methods are inlined into the callers, we deoptimize the callers to
|
|
||||||
* run in intercept mode to make target methods hookable.
|
|
||||||
* <p>
|
|
||||||
* Only for methods which are included in pre-compiled framework codes.
|
|
||||||
* TODO recompile system apps and priv-apps since their original dex files are available
|
|
||||||
*/
|
|
||||||
public class InlinedMethodCallers {
|
|
||||||
|
|
||||||
public static final String KEY_BOOT_IMAGE = "boot_image";
|
|
||||||
public static final String KEY_SYSTEM_SERVER = "system_server";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Key should be {@link #KEY_BOOT_IMAGE}, {@link #KEY_SYSTEM_SERVER}, or a package name
|
|
||||||
* of system apps or priv-apps i.e. com.android.systemui
|
|
||||||
*/
|
|
||||||
private static final HashMap<String, String[][]> CALLERS = new HashMap<>();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* format for each row: {className, methodName, methodSig}
|
|
||||||
*/
|
|
||||||
private static final String[][] BOOT_IMAGE = {
|
|
||||||
// callers of Application#attach(Context)
|
|
||||||
{"android.app.Instrumentation", "newApplication", "(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Context;)Landroid/app/Application;"}
|
|
||||||
};
|
|
||||||
|
|
||||||
private static final String[][] SYSTEM_SERVER = {};
|
|
||||||
|
|
||||||
private static final String[][] SYSTEM_UI = {};
|
|
||||||
|
|
||||||
static {
|
|
||||||
CALLERS.put(KEY_BOOT_IMAGE, BOOT_IMAGE);
|
|
||||||
CALLERS.put(KEY_SYSTEM_SERVER, SYSTEM_SERVER);
|
|
||||||
CALLERS.put("com.android.systemui", SYSTEM_UI);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HashMap<String, String[][]> getAll() {
|
|
||||||
return CALLERS;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String[][] get(String where) {
|
|
||||||
return CALLERS.get(where);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
package com.elderdrivers.riru.edxp.sandhook.util;
|
|
||||||
|
|
||||||
import com.elderdrivers.riru.edxp.util.Utils;
|
|
||||||
import com.elderdrivers.riru.edxp.Main;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
import de.robv.android.xposed.XposedHelpers;
|
|
||||||
|
|
||||||
import static com.elderdrivers.riru.edxp.sandhook.util.InlinedMethodCallers.KEY_BOOT_IMAGE;
|
|
||||||
import static com.elderdrivers.riru.edxp.sandhook.util.InlinedMethodCallers.KEY_SYSTEM_SERVER;
|
|
||||||
|
|
||||||
public class PrebuiltMethodsDeopter {
|
|
||||||
|
|
||||||
public static void deoptMethods(String where, ClassLoader cl) {
|
|
||||||
String[][] callers = InlinedMethodCallers.get(where);
|
|
||||||
if (callers == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for (String[] caller : callers) {
|
|
||||||
try {
|
|
||||||
Object method = Main.findMethodNative(
|
|
||||||
XposedHelpers.findClass(caller[0], cl), caller[1], caller[2]);
|
|
||||||
if (method != null) {
|
|
||||||
Main.deoptMethodNative(method);
|
|
||||||
}
|
|
||||||
} catch (Throwable throwable) {
|
|
||||||
Utils.logE("error when deopting method: " + Arrays.toString(caller), throwable);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void deoptBootMethods() {
|
|
||||||
// todo check if has been done before
|
|
||||||
deoptMethods(KEY_BOOT_IMAGE, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void deoptSystemServerMethods(ClassLoader sysCL) {
|
|
||||||
deoptMethods(KEY_SYSTEM_SERVER, sysCL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -55,6 +55,7 @@ afterEvaluate {
|
||||||
def myTemplatePath = "${projectDir}/template_override/"
|
def myTemplatePath = "${projectDir}/template_override/"
|
||||||
|
|
||||||
task("makeAndCopy${variantNameCapped}", type: Jar, dependsOn: "assemble${variantNameCapped}") {
|
task("makeAndCopy${variantNameCapped}", type: Jar, dependsOn: "assemble${variantNameCapped}") {
|
||||||
|
dependsOn tasks.getByPath(":edxp-common:copyCommonroperties")
|
||||||
from "${buildDir}/intermediates/dex/${variantNameLowered}/mergeDex${variantNameCapped}/out/"
|
from "${buildDir}/intermediates/dex/${variantNameLowered}/mergeDex${variantNameCapped}/out/"
|
||||||
destinationDir file(myTemplatePath + "system/framework/")
|
destinationDir file(myTemplatePath + "system/framework/")
|
||||||
baseName "edxp"
|
baseName "edxp"
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,13 @@
|
||||||
package com.elderdrivers.riru.edxp.whale.config;
|
package com.elderdrivers.riru.edxp.whale.config;
|
||||||
|
|
||||||
import com.elderdrivers.riru.edxp.hook.HookProvider;
|
import com.elderdrivers.riru.edxp.config.BaseHookProvider;
|
||||||
import com.elderdrivers.riru.edxp.whale.util.PrebuiltMethodsDeopter;
|
|
||||||
import com.lody.whale.WhaleRuntime;
|
import com.lody.whale.WhaleRuntime;
|
||||||
|
|
||||||
import java.lang.reflect.Member;
|
import java.lang.reflect.Member;
|
||||||
|
|
||||||
import de.robv.android.xposed.XposedBridge;
|
import de.robv.android.xposed.XposedBridge;
|
||||||
|
|
||||||
public class WhaleHookProvider implements HookProvider {
|
public class WhaleHookProvider extends BaseHookProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void hookMethod(Member method, XposedBridge.AdditionalHookInfo additionalInfo) {
|
public void hookMethod(Member method, XposedBridge.AdditionalHookInfo additionalInfo) {
|
||||||
|
|
@ -25,11 +24,6 @@ public class WhaleHookProvider implements HookProvider {
|
||||||
return hookMethod;
|
return hookMethod;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deoptMethods(String packageName, ClassLoader classLoader) {
|
|
||||||
PrebuiltMethodsDeopter.deoptMethods(packageName, classLoader);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getMethodId(Member member) {
|
public long getMethodId(Member member) {
|
||||||
return WhaleRuntime.getMethodSlot(member);
|
return WhaleRuntime.getMethodSlot(member);
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ package com.elderdrivers.riru.edxp.whale.entry.hooker;
|
||||||
import android.app.ActivityThread;
|
import android.app.ActivityThread;
|
||||||
|
|
||||||
import com.elderdrivers.riru.common.KeepMembers;
|
import com.elderdrivers.riru.common.KeepMembers;
|
||||||
import com.elderdrivers.riru.edxp.whale.util.PrebuiltMethodsDeopter;
|
import com.elderdrivers.riru.edxp.deopt.PrebuiltMethodsDeopter;
|
||||||
import com.elderdrivers.riru.edxp.whale.entry.Router;
|
import com.elderdrivers.riru.edxp.whale.entry.Router;
|
||||||
|
|
||||||
import de.robv.android.xposed.XposedBridge;
|
import de.robv.android.xposed.XposedBridge;
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,10 @@ import android.text.TextUtils;
|
||||||
|
|
||||||
import com.elderdrivers.riru.edxp.Main;
|
import com.elderdrivers.riru.edxp.Main;
|
||||||
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
||||||
import com.elderdrivers.riru.edxp.whale.entry.Router;
|
import com.elderdrivers.riru.edxp.deopt.PrebuiltMethodsDeopter;
|
||||||
import com.elderdrivers.riru.edxp.whale.util.PrebuiltMethodsDeopter;
|
|
||||||
import com.elderdrivers.riru.edxp.util.ProcessUtils;
|
import com.elderdrivers.riru.edxp.util.ProcessUtils;
|
||||||
import com.elderdrivers.riru.edxp.util.Utils;
|
import com.elderdrivers.riru.edxp.util.Utils;
|
||||||
|
import com.elderdrivers.riru.edxp.whale.entry.Router;
|
||||||
|
|
||||||
import de.robv.android.xposed.XposedBridge;
|
import de.robv.android.xposed.XposedBridge;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ package com.elderdrivers.riru.edxp.whale.proxy;
|
||||||
|
|
||||||
import com.elderdrivers.riru.edxp.Main;
|
import com.elderdrivers.riru.edxp.Main;
|
||||||
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
||||||
import com.elderdrivers.riru.edxp.whale.util.PrebuiltMethodsDeopter;
|
import com.elderdrivers.riru.edxp.deopt.PrebuiltMethodsDeopter;
|
||||||
import com.elderdrivers.riru.edxp.whale.entry.Router;
|
import com.elderdrivers.riru.edxp.whale.entry.Router;
|
||||||
|
|
||||||
import static com.elderdrivers.riru.edxp.util.FileUtils.getDataPathPrefix;
|
import static com.elderdrivers.riru.edxp.util.FileUtils.getDataPathPrefix;
|
||||||
|
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
||||||
package com.elderdrivers.riru.edxp.whale.util;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Providing a whitelist of methods which are the callers of the target methods we want to hook.
|
|
||||||
* Because the target methods are inlined into the callers, we deoptimize the callers to
|
|
||||||
* run in intercept mode to make target methods hookable.
|
|
||||||
* <p>
|
|
||||||
* Only for methods which are included in pre-compiled framework codes.
|
|
||||||
* TODO recompile system apps and priv-apps since their original dex files are available
|
|
||||||
*/
|
|
||||||
public class InlinedMethodCallers {
|
|
||||||
|
|
||||||
public static final String KEY_BOOT_IMAGE = "boot_image";
|
|
||||||
public static final String KEY_SYSTEM_SERVER = "system_server";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Key should be {@link #KEY_BOOT_IMAGE}, {@link #KEY_SYSTEM_SERVER}, or a package name
|
|
||||||
* of system apps or priv-apps i.e. com.android.systemui
|
|
||||||
*/
|
|
||||||
private static final HashMap<String, String[][]> CALLERS = new HashMap<>();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* format for each row: {className, methodName, methodSig}
|
|
||||||
*/
|
|
||||||
private static final String[][] BOOT_IMAGE = {
|
|
||||||
// callers of Application#attach(Context)
|
|
||||||
{"android.app.Instrumentation", "newApplication", "(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Context;)Landroid/app/Application;"}
|
|
||||||
};
|
|
||||||
|
|
||||||
private static final String[][] SYSTEM_SERVER = {};
|
|
||||||
|
|
||||||
private static final String[][] SYSTEM_UI = {};
|
|
||||||
|
|
||||||
static {
|
|
||||||
CALLERS.put(KEY_BOOT_IMAGE, BOOT_IMAGE);
|
|
||||||
CALLERS.put(KEY_SYSTEM_SERVER, SYSTEM_SERVER);
|
|
||||||
CALLERS.put("com.android.systemui", SYSTEM_UI);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HashMap<String, String[][]> getAll() {
|
|
||||||
return CALLERS;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String[][] get(String where) {
|
|
||||||
return CALLERS.get(where);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
package com.elderdrivers.riru.edxp.whale.util;
|
|
||||||
|
|
||||||
import com.elderdrivers.riru.edxp.util.Utils;
|
|
||||||
import com.elderdrivers.riru.edxp.Main;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
import de.robv.android.xposed.XposedHelpers;
|
|
||||||
|
|
||||||
import static com.elderdrivers.riru.edxp.whale.util.InlinedMethodCallers.KEY_BOOT_IMAGE;
|
|
||||||
import static com.elderdrivers.riru.edxp.whale.util.InlinedMethodCallers.KEY_SYSTEM_SERVER;
|
|
||||||
|
|
||||||
public class PrebuiltMethodsDeopter {
|
|
||||||
|
|
||||||
public static void deoptMethods(String where, ClassLoader cl) {
|
|
||||||
String[][] callers = InlinedMethodCallers.get(where);
|
|
||||||
if (callers == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for (String[] caller : callers) {
|
|
||||||
try {
|
|
||||||
Object method = Main.findMethodNative(
|
|
||||||
XposedHelpers.findClass(caller[0], cl), caller[1], caller[2]);
|
|
||||||
if (method != null) {
|
|
||||||
Main.deoptMethodNative(method);
|
|
||||||
}
|
|
||||||
} catch (Throwable throwable) {
|
|
||||||
Utils.logE("error when deopting method: " + Arrays.toString(caller), throwable);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void deoptBootMethods() {
|
|
||||||
// todo check if has been done before
|
|
||||||
deoptMethods(KEY_BOOT_IMAGE, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void deoptSystemServerMethods(ClassLoader sysCL) {
|
|
||||||
deoptMethods(KEY_SYSTEM_SERVER, sysCL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -56,6 +56,7 @@ afterEvaluate {
|
||||||
def myTemplatePath = "${projectDir}/template_override/"
|
def myTemplatePath = "${projectDir}/template_override/"
|
||||||
|
|
||||||
task("makeAndCopy${variantNameCapped}", type: Jar, dependsOn: "assemble${variantNameCapped}") {
|
task("makeAndCopy${variantNameCapped}", type: Jar, dependsOn: "assemble${variantNameCapped}") {
|
||||||
|
dependsOn tasks.getByPath(":edxp-common:copyCommonroperties")
|
||||||
from "${buildDir}/intermediates/dex/${variantNameLowered}/mergeDex${variantNameCapped}/out/"
|
from "${buildDir}/intermediates/dex/${variantNameLowered}/mergeDex${variantNameCapped}/out/"
|
||||||
destinationDir file(myTemplatePath + "system/framework/")
|
destinationDir file(myTemplatePath + "system/framework/")
|
||||||
baseName "edxp"
|
baseName "edxp"
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
package com.elderdrivers.riru.edxp.yahfa.config;
|
package com.elderdrivers.riru.edxp.yahfa.config;
|
||||||
|
|
||||||
import com.elderdrivers.riru.edxp.hook.HookProvider;
|
import com.elderdrivers.riru.edxp.config.BaseHookProvider;
|
||||||
import com.elderdrivers.riru.edxp.yahfa.dexmaker.DexMakerUtils;
|
import com.elderdrivers.riru.edxp.yahfa.dexmaker.DexMakerUtils;
|
||||||
import com.elderdrivers.riru.edxp.yahfa.dexmaker.DynamicBridge;
|
import com.elderdrivers.riru.edxp.yahfa.dexmaker.DynamicBridge;
|
||||||
import com.elderdrivers.riru.edxp.yahfa.util.PrebuiltMethodsDeopter;
|
|
||||||
|
|
||||||
import java.lang.reflect.Member;
|
import java.lang.reflect.Member;
|
||||||
|
|
||||||
import de.robv.android.xposed.XposedBridge;
|
import de.robv.android.xposed.XposedBridge;
|
||||||
|
|
||||||
public class YahfaHookProvider implements HookProvider {
|
public class YahfaHookProvider extends BaseHookProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void hookMethod(Member method, XposedBridge.AdditionalHookInfo additionalInfo) {
|
public void hookMethod(Member method, XposedBridge.AdditionalHookInfo additionalInfo) {
|
||||||
DynamicBridge.hookMethod(method, additionalInfo);
|
DynamicBridge.hookMethod(method, additionalInfo);
|
||||||
|
|
@ -24,14 +24,4 @@ public class YahfaHookProvider implements HookProvider {
|
||||||
public Member findMethodNative(Member hookMethod) {
|
public Member findMethodNative(Member hookMethod) {
|
||||||
return DexMakerUtils.findMethodNative(hookMethod);
|
return DexMakerUtils.findMethodNative(hookMethod);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deoptMethods(String packageName, ClassLoader classLoader) {
|
|
||||||
PrebuiltMethodsDeopter.deoptMethods(packageName, classLoader);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getMethodId(Member member) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ package com.elderdrivers.riru.edxp.yahfa.entry.hooker;
|
||||||
import android.app.ActivityThread;
|
import android.app.ActivityThread;
|
||||||
|
|
||||||
import com.elderdrivers.riru.common.KeepMembers;
|
import com.elderdrivers.riru.common.KeepMembers;
|
||||||
import com.elderdrivers.riru.edxp.yahfa.util.PrebuiltMethodsDeopter;
|
import com.elderdrivers.riru.edxp.deopt.PrebuiltMethodsDeopter;
|
||||||
import com.elderdrivers.riru.edxp.yahfa.entry.Router;
|
import com.elderdrivers.riru.edxp.yahfa.entry.Router;
|
||||||
|
|
||||||
import de.robv.android.xposed.XposedBridge;
|
import de.robv.android.xposed.XposedBridge;
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,8 @@ import android.text.TextUtils;
|
||||||
|
|
||||||
import com.elderdrivers.riru.edxp.Main;
|
import com.elderdrivers.riru.edxp.Main;
|
||||||
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
||||||
|
import com.elderdrivers.riru.edxp.deopt.PrebuiltMethodsDeopter;
|
||||||
import com.elderdrivers.riru.edxp.yahfa.entry.Router;
|
import com.elderdrivers.riru.edxp.yahfa.entry.Router;
|
||||||
import com.elderdrivers.riru.edxp.yahfa.util.PrebuiltMethodsDeopter;
|
|
||||||
import com.elderdrivers.riru.edxp.util.ProcessUtils;
|
import com.elderdrivers.riru.edxp.util.ProcessUtils;
|
||||||
import com.elderdrivers.riru.edxp.util.Utils;
|
import com.elderdrivers.riru.edxp.util.Utils;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ package com.elderdrivers.riru.edxp.yahfa.proxy;
|
||||||
|
|
||||||
import com.elderdrivers.riru.edxp.Main;
|
import com.elderdrivers.riru.edxp.Main;
|
||||||
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
||||||
import com.elderdrivers.riru.edxp.yahfa.util.PrebuiltMethodsDeopter;
|
import com.elderdrivers.riru.edxp.deopt.PrebuiltMethodsDeopter;
|
||||||
import com.elderdrivers.riru.edxp.yahfa.entry.Router;
|
import com.elderdrivers.riru.edxp.yahfa.entry.Router;
|
||||||
|
|
||||||
import static com.elderdrivers.riru.edxp.util.FileUtils.getDataPathPrefix;
|
import static com.elderdrivers.riru.edxp.util.FileUtils.getDataPathPrefix;
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -73,5 +73,15 @@ public class EdXpConfigGlobal {
|
||||||
public long getMethodId(Member member) {
|
public long getMethodId(Member member) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object findMethodNative(Class clazz, String methodName, String methodSig) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deoptMethodNative(Object method) {
|
||||||
|
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,4 +15,8 @@ public interface HookProvider {
|
||||||
void deoptMethods(String packageName, ClassLoader classLoader);
|
void deoptMethods(String packageName, ClassLoader classLoader);
|
||||||
|
|
||||||
long getMethodId(Member member);
|
long getMethodId(Member member);
|
||||||
|
|
||||||
|
Object findMethodNative(Class clazz, String methodName, String methodSig);
|
||||||
|
|
||||||
|
void deoptMethodNative(Object method);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue