From bc8b2bc16bafe58c414a7fe9bc426fd22cce70fc Mon Sep 17 00:00:00 2001 From: solohsu Date: Tue, 23 Apr 2019 00:18:06 +0800 Subject: [PATCH] Add resources hooking support for all variants --- .../main/java/com/elderdrivers/riru/edxp/Main.java | 6 ++++++ .../edxp/sandhook/config/SandHookProvider.java | 13 +++++++++++++ .../main/java/com/elderdrivers/riru/edxp/Main.java | 6 ++++++ .../riru/edxp/whale/config/WhaleHookProvider.java | 14 ++++++++++++++ .../elderdrivers/riru/edxp/yahfa/entry/Router.java | 1 - 5 files changed, 39 insertions(+), 1 deletion(-) diff --git a/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/Main.java b/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/Main.java index ba3214c2..ef87ebb1 100644 --- a/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/Main.java +++ b/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/Main.java @@ -1,6 +1,8 @@ package com.elderdrivers.riru.edxp; import android.annotation.SuppressLint; +import android.content.res.Resources; +import android.content.res.XResources; import android.os.Build; import android.os.Process; @@ -147,4 +149,8 @@ public class Main implements KeepAll { public static native void resumeAllThreads(long obj); public static native int waitForGcToComplete(long thread); + + public static native boolean initXResourcesNative(); + + public static native void rewriteXmlReferencesNative(long parserPtr, XResources origRes, Resources repRes); } diff --git a/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/config/SandHookProvider.java b/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/config/SandHookProvider.java index df543516..ce6d94f9 100644 --- a/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/config/SandHookProvider.java +++ b/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/config/SandHookProvider.java @@ -1,7 +1,10 @@ package com.elderdrivers.riru.edxp.sandhook.config; +import android.content.res.Resources; +import android.content.res.XResources; import android.util.Log; +import com.elderdrivers.riru.edxp.Main; import com.elderdrivers.riru.edxp.config.BaseHookProvider; import com.elderdrivers.riru.edxp.deopt.PrebuiltMethodsDeopter; import com.elderdrivers.riru.edxp.sandhook.dexmaker.DynamicBridge; @@ -53,4 +56,14 @@ public class SandHookProvider extends BaseHookProvider { public long getMethodId(Member member) { return 0; } + + @Override + public boolean initXResourcesNative() { + return Main.initXResourcesNative(); + } + + @Override + public void rewriteXmlReferencesNative(long parserPtr, XResources origRes, Resources repRes) { + Main.rewriteXmlReferencesNative(parserPtr, origRes, repRes); + } } diff --git a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/Main.java b/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/Main.java index 2bf72fb4..3f1019be 100644 --- a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/Main.java +++ b/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/Main.java @@ -1,6 +1,8 @@ package com.elderdrivers.riru.edxp; import android.annotation.SuppressLint; +import android.content.res.Resources; +import android.content.res.XResources; import android.os.Build; import android.os.Process; @@ -138,4 +140,8 @@ public class Main implements KeepAll { public static native void resumeAllThreads(long obj); public static native int waitForGcToComplete(long thread); + + public static native boolean initXResourcesNative(); + + public static native void rewriteXmlReferencesNative(long parserPtr, XResources origRes, Resources repRes); } diff --git a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/config/WhaleHookProvider.java b/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/config/WhaleHookProvider.java index 571b5cb8..c56bdadc 100644 --- a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/config/WhaleHookProvider.java +++ b/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/config/WhaleHookProvider.java @@ -1,5 +1,9 @@ package com.elderdrivers.riru.edxp.whale.config; +import android.content.res.Resources; +import android.content.res.XResources; + +import com.elderdrivers.riru.edxp.Main; import com.elderdrivers.riru.edxp.config.BaseHookProvider; import com.lody.whale.WhaleRuntime; @@ -43,4 +47,14 @@ public class WhaleHookProvider extends BaseHookProvider { public long getMethodId(Member member) { return WhaleRuntime.getMethodSlot(member); } + + @Override + public boolean initXResourcesNative() { + return Main.initXResourcesNative(); + } + + @Override + public void rewriteXmlReferencesNative(long parserPtr, XResources origRes, Resources repRes) { + Main.rewriteXmlReferencesNative(parserPtr, origRes, repRes); + } } diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/Router.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/Router.java index 5eae8a75..57493cab 100644 --- a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/Router.java +++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/Router.java @@ -58,7 +58,6 @@ public class Router { } Router.startBootstrapHook(isSystem); XposedInit.initForZygote(isSystem); - Main.initXResourcesNative(); } catch (Throwable t) { Utils.logE("error during Xposed initialization", t); XposedBridge.disableHooks = true;