diff --git a/core/src/main/java/io/github/libxposed/XposedContextWrapper.java b/core/src/main/java/io/github/libxposed/XposedContextWrapper.java index 59bc0b0c..09849165 100644 --- a/core/src/main/java/io/github/libxposed/XposedContextWrapper.java +++ b/core/src/main/java/io/github/libxposed/XposedContextWrapper.java @@ -85,6 +85,12 @@ public class XposedContextWrapper extends ContextWrapper implements XposedInterf return getBaseContext().deoptimize(constructor); } + @Nullable + @Override + public XposedUtils getUtils() { + return getBaseContext().getUtils(); + } + @Override final public void log(@NonNull String message) { getBaseContext().log(message); diff --git a/core/src/main/java/io/github/libxposed/XposedInterface.java b/core/src/main/java/io/github/libxposed/XposedInterface.java index 2dae95d5..65f1bdc3 100644 --- a/core/src/main/java/io/github/libxposed/XposedInterface.java +++ b/core/src/main/java/io/github/libxposed/XposedInterface.java @@ -5,6 +5,7 @@ import androidx.annotation.Nullable; import java.lang.reflect.Constructor; import java.lang.reflect.Method; +import java.util.ConcurrentModificationException; public interface XposedInterface { interface BeforeHookCallback { @@ -24,7 +25,7 @@ public interface XposedInterface { @Nullable Object invokeOrigin(@Nullable Object thisObject, Object[] args); - void setExtra(String key, @Nullable U value); + void setExtra(@NonNull String key, @Nullable U value) throws ConcurrentModificationException; } interface AfterHookCallback { @@ -53,7 +54,7 @@ public interface XposedInterface { Object invokeOrigin(@Nullable Object thisObject, Object[] args); @Nullable - U getExtra(String key); + U getExtra(@NonNull String key); } interface PriorityMethodHooker { @@ -109,6 +110,8 @@ public interface XposedInterface { boolean deoptimize(@Nullable Constructor constructor); + @Nullable XposedUtils getUtils(); + void log(@NonNull String message); void log(@NonNull String message, @NonNull Throwable throwable); diff --git a/core/src/main/java/io/github/libxposed/XposedUtils.java b/core/src/main/java/io/github/libxposed/XposedUtils.java new file mode 100644 index 00000000..b5e6a9ab --- /dev/null +++ b/core/src/main/java/io/github/libxposed/XposedUtils.java @@ -0,0 +1,18 @@ +package io.github.libxposed; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +public interface XposedUtils { + @NonNull + Class classByName(@NonNull String className, @Nullable ClassLoader classLoader) throws ClassNotFoundException; + + @Nullable + Class classOrNullByName(@NonNull String className, @Nullable ClassLoader classLoader); + + @NonNull + Class classByBinaryName(@NonNull String binaryClassName, @Nullable ClassLoader classLoader) throws ClassNotFoundException; + + @Nullable + Class classOrNullByBinaryName(@NonNull String binaryClassName, @Nullable ClassLoader classLoader); +} diff --git a/core/src/main/java/org/lsposed/lspd/impl/LSPosedContext.java b/core/src/main/java/org/lsposed/lspd/impl/LSPosedContext.java index 85d6282f..9f4d371f 100644 --- a/core/src/main/java/org/lsposed/lspd/impl/LSPosedContext.java +++ b/core/src/main/java/org/lsposed/lspd/impl/LSPosedContext.java @@ -53,6 +53,7 @@ import de.robv.android.xposed.XposedInit; import io.github.libxposed.XposedContext; import io.github.libxposed.XposedModule; import io.github.libxposed.XposedModuleInterface; +import io.github.libxposed.XposedUtils; public class LSPosedContext extends XposedContext { @@ -787,13 +788,20 @@ public class LSPosedContext extends XposedContext { return false; } + // TODO + @Nullable @Override - public void log(@NonNull String message) { + public XposedUtils getUtils() { + return null; + } + + @Override + public synchronized void log(@NonNull String message) { Log.i(TAG, mPackageName + ": " + message); } @Override - public void log(@NonNull String message, @NonNull Throwable throwable) { + public synchronized void log(@NonNull String message, @NonNull Throwable throwable) { Log.e(TAG, mPackageName + ": " + message, throwable); } }