Add new manager hook

This commit is contained in:
NekoInverter 2021-01-17 21:20:31 +08:00 committed by kotori0
parent c75907be01
commit 12047ded30
No known key found for this signature in database
GPG Key ID: 3FEE57ED0385A6B2
9 changed files with 102 additions and 30 deletions

View File

@ -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/"

View File

@ -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))
}
}

View File

@ -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();

View File

@ -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);

View File

@ -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) {

View File

@ -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\""
}
}
}

View File

@ -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,

View File

@ -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}"

View File

@ -8,8 +8,6 @@ public interface EdxpConfig {
String getInstallerPackageName();
String getXposedPropPath();
String getLibSandHookName();
boolean isNoModuleLogEnabled();