Add new manager hook
This commit is contained in:
parent
c75907be01
commit
12047ded30
15
build.gradle
15
build.gradle
|
|
@ -15,7 +15,22 @@ buildscript {
|
|||
}
|
||||
|
||||
allprojects {
|
||||
// Values set here will be overriden by AppVeyor, feel free to modify during development.
|
||||
def buildVersionName = 'v0.5.2.0'
|
||||
def buildVersionCode = 233
|
||||
|
||||
if (System.env.APPVEYOR_BUILD_VERSION != null) {
|
||||
buildVersionName = "v${System.getenv('appveyor_build_version')}"
|
||||
}
|
||||
|
||||
if (System.env.APPVEYOR_BUILD_NUMBER != null) {
|
||||
// Split is necessary because PRs set the build number to "1234-something".
|
||||
def parts = System.env.APPVEYOR_BUILD_NUMBER.split('-')
|
||||
buildVersionCode = Integer.valueOf(parts[0])
|
||||
}
|
||||
ext {
|
||||
versionCode = buildVersionCode
|
||||
versionName = buildVersionName
|
||||
templateRootPath = project(":edxp-core").projectDir.path + "/template_override/"
|
||||
templateSystemPath = templateRootPath + "/system/"
|
||||
templateSystemx86Path = templateRootPath + "/system_x86/"
|
||||
|
|
|
|||
|
|
@ -14,6 +14,12 @@ android {
|
|||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
buildConfigField("String", "VERSION_NAME", "\"${rootProject.ext.versionName}\"")
|
||||
buildConfigField("Integer", "VERSION_CODE", String.valueOf(rootProject.ext.versionCode))
|
||||
}
|
||||
debug {
|
||||
buildConfigField("String", "VERSION_NAME", "\"${rootProject.ext.versionName}\"")
|
||||
buildConfigField("Integer", "VERSION_CODE", String.valueOf(rootProject.ext.versionCode))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,10 +19,6 @@ public class BaseEdxpConfig implements EdxpConfig {
|
|||
return ConfigManager.getInstallerPackageName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getXposedPropPath() {
|
||||
return ConfigManager.getXposedPropPath();
|
||||
}
|
||||
@Override
|
||||
public String getLibSandHookName() {
|
||||
return ConfigManager.getLibSandHookName();
|
||||
|
|
|
|||
|
|
@ -37,8 +37,6 @@ public class ConfigManager {
|
|||
|
||||
public static native String getInstallerPackageName();
|
||||
|
||||
public static native String getXposedPropPath();
|
||||
|
||||
public static native String getLibSandHookName();
|
||||
|
||||
public static native String getConfigPath(String suffix);
|
||||
|
|
|
|||
|
|
@ -10,10 +10,13 @@ import android.view.ViewGroup;
|
|||
|
||||
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
||||
import com.elderdrivers.riru.edxp.config.EdXpConfigGlobal;
|
||||
import com.elderdrivers.riru.edxp.common.BuildConfig;
|
||||
import com.elderdrivers.riru.edxp.core.EdxpImpl;
|
||||
import com.elderdrivers.riru.edxp.core.Main;
|
||||
import com.elderdrivers.riru.edxp.util.Utils;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import de.robv.android.xposed.XC_MethodHook;
|
||||
|
|
@ -54,10 +57,27 @@ public class XposedInstallerHooker {
|
|||
Utils.logD("reloadXposedProp already done, skip...");
|
||||
return;
|
||||
}
|
||||
File file = new File(ConfigManager.getXposedPropPath());
|
||||
FileInputStream is = null;
|
||||
try {
|
||||
is = new FileInputStream(file);
|
||||
//version=92.0-$version ($backend)
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
stringBuilder.append("version=");
|
||||
stringBuilder.append(XposedBridge.getXposedVersion());
|
||||
stringBuilder.append(".0-");
|
||||
stringBuilder.append(BuildConfig.VERSION_NAME);
|
||||
stringBuilder.append(" (");
|
||||
String variant = "None";
|
||||
switch (Main.getEdxpVariant()) {
|
||||
case EdxpImpl.NONE:
|
||||
break;
|
||||
case EdxpImpl.YAHFA:
|
||||
variant = "YAHFA";
|
||||
break;
|
||||
case EdxpImpl.SANDHOOK:
|
||||
variant = "SandHook";
|
||||
break;
|
||||
}
|
||||
stringBuilder.append(variant);
|
||||
stringBuilder.append(")");
|
||||
try (ByteArrayInputStream is = new ByteArrayInputStream(stringBuilder.toString().getBytes())) {
|
||||
Object props = XposedHelpers.callStaticMethod(InstallZipUtil,
|
||||
"parseXposedProp", is);
|
||||
synchronized (thisObject) {
|
||||
|
|
@ -66,14 +86,7 @@ public class XposedInstallerHooker {
|
|||
Utils.logD("reloadXposedProp done...");
|
||||
param.setResult(null);
|
||||
} catch (IOException e) {
|
||||
Utils.logE("Could not read " + file.getPath(), e);
|
||||
} finally {
|
||||
if (is != null) {
|
||||
try {
|
||||
is.close();
|
||||
} catch (IOException ignored) {
|
||||
}
|
||||
}
|
||||
Utils.logE("Could not reloadXposedProp", e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -106,6 +119,59 @@ public class XposedInstallerHooker {
|
|||
} catch (Throwable t) {
|
||||
Utils.logE("Could not hook Xposed Installer", t);
|
||||
}
|
||||
|
||||
// for new manager
|
||||
try {
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.Constants", classLoader, "getXposedApiVersion", new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
|
||||
return XposedBridge.getXposedVersion();
|
||||
}
|
||||
});
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.Constants", classLoader, "getXposedVersion", new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
|
||||
return BuildConfig.VERSION_NAME;
|
||||
}
|
||||
});
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.Constants", classLoader, "getXposedVersionCode", new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
|
||||
return BuildConfig.VERSION_CODE;
|
||||
}
|
||||
});
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.Constants", classLoader, "getXposedApiVersion", new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
|
||||
return XposedBridge.getXposedVersion();
|
||||
}
|
||||
});
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.Constants", classLoader, "getXposedVariant", new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
|
||||
String variant = "None";
|
||||
switch (Main.getEdxpVariant()) {
|
||||
case EdxpImpl.NONE:
|
||||
break;
|
||||
case EdxpImpl.YAHFA:
|
||||
variant = "YAHFA";
|
||||
break;
|
||||
case EdxpImpl.SANDHOOK:
|
||||
variant = "SandHook";
|
||||
break;
|
||||
}
|
||||
return variant;
|
||||
}
|
||||
});
|
||||
XposedHelpers.findAndHookMethod("org.meowcat.edxposed.manager.Constants", classLoader, "getBaseDir", new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
|
||||
return ConfigManager.getBaseConfigPath() + "/";
|
||||
}
|
||||
});
|
||||
} catch (Throwable t) {
|
||||
Utils.logE("Could not hook EdXposed Installer", t);
|
||||
}
|
||||
}
|
||||
|
||||
private static void deoptMethod(ClassLoader cl, String className, String methodName, Class<?> ...params) {
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@ if (System.env.APPVEYOR_BUILD_NUMBER != null) {
|
|||
version buildVersionName
|
||||
|
||||
ext {
|
||||
versionCode = buildVersionCode
|
||||
module_name = "EdXposed"
|
||||
jar_dest_dir = "${projectDir}/template_override/system/framework/"
|
||||
is_windows = OperatingSystem.current().isWindows()
|
||||
|
|
@ -73,8 +72,8 @@ android {
|
|||
cppFlags "-std=c++17 -ffixed-x18 -Qunused-arguments -frtti -fomit-frame-pointer"
|
||||
cFlags "-std=gnu99 -ffixed-x18 -Qunused-arguments -frtti -fomit-frame-pointer"
|
||||
arguments "-DRIRU_MODULE_API_VERSION=$moduleMaxRiruApiVersion",
|
||||
"-DRIRU_MODULE_VERSION=$buildVersionCode",
|
||||
"-DRIRU_MODULE_VERSION_NAME:STRING=\"$buildVersionName\""
|
||||
"-DRIRU_MODULE_VERSION=$rootProject.ext.versionCode",
|
||||
"-DRIRU_MODULE_VERSION_NAME:STRING=\"$rootProject.ext.versionName\""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,10 +27,6 @@ namespace edxp {
|
|||
return env->NewStringUTF(ConfigManager::GetInstance()->GetInstallerPackageName().c_str());
|
||||
}
|
||||
|
||||
static jstring ConfigManager_getXposedPropPath(JNI_START) {
|
||||
return env->NewStringUTF(ConfigManager::GetInstance()->GetXposedPropPath().c_str());
|
||||
}
|
||||
|
||||
static jstring ConfigManager_getLibSandHookName(JNI_START) {
|
||||
return env->NewStringUTF(ConfigManager::GetInstance()->GetLibSandHookName().c_str());
|
||||
}
|
||||
|
|
@ -80,7 +76,6 @@ namespace edxp {
|
|||
NATIVE_METHOD(ConfigManager, isDeoptBootImageEnabled, "()Z"),
|
||||
NATIVE_METHOD(ConfigManager, isNoModuleLogEnabled, "()Z"),
|
||||
NATIVE_METHOD(ConfigManager, getInstallerPackageName, "()Ljava/lang/String;"),
|
||||
NATIVE_METHOD(ConfigManager, getXposedPropPath, "()Ljava/lang/String;"),
|
||||
NATIVE_METHOD(ConfigManager, getLibSandHookName, "()Ljava/lang/String;"),
|
||||
NATIVE_METHOD(ConfigManager, getDataPathPrefix, "()Ljava/lang/String;"),
|
||||
NATIVE_METHOD(ConfigManager, getConfigPath,
|
||||
|
|
|
|||
|
|
@ -143,7 +143,6 @@ extract "${ZIPFILE}" 'sepolicy.rule' "${MODPATH}"
|
|||
extract "${ZIPFILE}" 'post-fs-data.sh' "${MODPATH}"
|
||||
extract "${ZIPFILE}" 'uninstall.sh' "${MODPATH}"
|
||||
|
||||
extract "${ZIPFILE}" 'system/framework/edconfig.jar' "${MODPATH}"
|
||||
extract "${ZIPFILE}" 'system/framework/eddalvikdx.dex' "${MODPATH}"
|
||||
extract "${ZIPFILE}" 'system/framework/eddexmaker.dex' "${MODPATH}"
|
||||
extract "${ZIPFILE}" 'system/framework/edservice.dex' "${MODPATH}"
|
||||
|
|
|
|||
|
|
@ -8,8 +8,6 @@ public interface EdxpConfig {
|
|||
|
||||
String getInstallerPackageName();
|
||||
|
||||
String getXposedPropPath();
|
||||
|
||||
String getLibSandHookName();
|
||||
|
||||
boolean isNoModuleLogEnabled();
|
||||
|
|
|
|||
Loading…
Reference in New Issue