Use setStaticField instead

This commit is contained in:
LoveSy 2021-02-14 02:16:19 +08:00 committed by LoveSy
parent 83d5dbdc27
commit a652a81201
3 changed files with 38 additions and 53 deletions

View File

@ -23,36 +23,29 @@ package io.github.lsposed.manager;
import android.widget.Toast; import android.widget.Toast;
public class Constants { public class Constants {
private static int xposedApiVersion = -1;
private static String xposedVersion = null;
private static int xposedVersionCode = -1;
private static String xposedVariant = null;
private static String baseDir = null;
private static String logDir = null;
private static String miscDir = null;
private static boolean permissive = true;
public static int getXposedApiVersion() { public static int getXposedApiVersion() {
try { return xposedApiVersion;
return -1;
} catch (Throwable ignored) {
return -1;
}
} }
public static String getXposedVersion() { public static String getXposedVersion() {
try { return xposedVersion;
return null;
} catch (Throwable ignored) {
return null;
}
} }
public static int getXposedVersionCode() { public static int getXposedVersionCode() {
try { return xposedVersionCode;
return -1;
} catch (Throwable ignored) {
return -1;
}
} }
public static String getXposedVariant() { public static String getXposedVariant() {
try { return xposedVariant;
return null;
} catch (Throwable ignored) {
return null;
}
} }
public static String getEnabledModulesListFile() { public static String getEnabledModulesListFile() {
@ -68,35 +61,19 @@ public class Constants {
} }
public static String getBaseDir() { public static String getBaseDir() {
try { return baseDir;
return null;
} catch (Throwable ignored) {
return null;
}
} }
public static String getLogDir() { public static String getLogDir() {
try { return logDir;
return null;
} catch (Throwable ignored) {
return null;
}
} }
public static String getMiscDir() { public static String getMiscDir() {
try { return miscDir;
return null;
} catch (Throwable ignored) {
return null;
}
} }
public static boolean isPermissive() { public static boolean isPermissive() {
try { return permissive;
return true;
} catch (Throwable ignored) {
return true;
}
} }
public static void showErrorToast(int type) { public static void showErrorToast(int type) {

View File

@ -32,26 +32,41 @@ import io.github.lsposed.lspd.util.Utils;
public class XposedInstallerHooker { public class XposedInstallerHooker {
public static void hookXposedInstaller(final ClassLoader classLoader) { public static void hookXposedInstaller(final ClassLoader classLoader) {
String variant_; final String variant;
switch (Main.getEdxpVariant()) { switch (Main.getEdxpVariant()) {
case EdxpImpl.YAHFA: case EdxpImpl.YAHFA:
variant_ = "YAHFA"; variant = "YAHFA";
break; break;
case EdxpImpl.SANDHOOK: case EdxpImpl.SANDHOOK:
variant_ = "SandHook"; variant = "SandHook";
break; break;
case EdxpImpl.NONE: case EdxpImpl.NONE:
default: default:
variant_ = "Unknown"; variant = "Unknown";
break; break;
} }
final String variant = variant_;
Utils.logI("Found LSPosed Manager, hooking it"); Utils.logI("Found LSPosed Manager, hooking it");
// LSPosed Manager R // LSPosed Manager R
try { try {
Class<?> ConstantsClass = XposedHelpers.findClass("io.github.lsposed.manager.Constants", classLoader); Class<?> ConstantsClass = XposedHelpers.findClass("io.github.lsposed.manager.Constants", classLoader);
try {
XposedHelpers.setStaticIntField(ConstantsClass, "xposedApiVersion", XposedBridge.getXposedVersion());
XposedHelpers.setStaticObjectField(ConstantsClass, "xposedVersion", BuildConfig.VERSION_NAME);
XposedHelpers.setStaticIntField(ConstantsClass, "xposedVersionCode", BuildConfig.VERSION_CODE);
XposedHelpers.setStaticIntField(ConstantsClass, "xposedVersionCode", XposedBridge.getXposedVersion());
XposedHelpers.setStaticObjectField(ConstantsClass, "xposedVariant", variant);
XposedHelpers.setStaticObjectField(ConstantsClass, "baseDir", ConfigManager.getBaseConfigPath() + "/");
XposedHelpers.setStaticObjectField(ConstantsClass, "logDir", ConfigManager.getLogPath());
XposedHelpers.setStaticObjectField(ConstantsClass, "miscDir", ConfigManager.getMiscPath());
XposedHelpers.setStaticBooleanField(ConstantsClass, "permissive", ConfigManager.isPermissive());
Utils.logI("Hooked LSPosed Manager");
return;
} catch (Throwable ignored) {
// fallback
}
XposedHelpers.findAndHookMethod(ConstantsClass, "getXposedApiVersion", new XC_MethodReplacement() { XposedHelpers.findAndHookMethod(ConstantsClass, "getXposedApiVersion", new XC_MethodReplacement() {
@Override @Override
protected Object replaceHookedMethod(MethodHookParam param) { protected Object replaceHookedMethod(MethodHookParam param) {
@ -70,12 +85,6 @@ public class XposedInstallerHooker {
return BuildConfig.VERSION_CODE; return BuildConfig.VERSION_CODE;
} }
}); });
XposedHelpers.findAndHookMethod(ConstantsClass, "getXposedApiVersion", new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam param) {
return XposedBridge.getXposedVersion();
}
});
XposedHelpers.findAndHookMethod(ConstantsClass, "getXposedVariant", new XC_MethodReplacement() { XposedHelpers.findAndHookMethod(ConstantsClass, "getXposedVariant", new XC_MethodReplacement() {
@Override @Override
protected Object replaceHookedMethod(MethodHookParam param) { protected Object replaceHookedMethod(MethodHookParam param) {

View File

@ -17,8 +17,7 @@ androidBuildToolsVersion=30.0.3
apiCode=93 apiCode=93
androidCompileSdkVersion=30 androidCompileSdkVersion=30
androidMinSdkVersion=26 androidMinSdkVersion=26
org.gradle.jvmargs=-Xmx2048M
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
android.prefabVersion=1.1.2 android.prefabVersion=1.1.2
versionName=v0.5.4.0 versionName=v0.5.4.1