From 696ede0209e67963da24f9d0765782ab15b202e0 Mon Sep 17 00:00:00 2001 From: solohsu Date: Tue, 19 Mar 2019 22:25:48 +0800 Subject: [PATCH] Add edxp-common module --- edxp-common/.gitignore | 1 + edxp-common/build.gradle | 49 ++++++++++++++++++ edxp-common/libs/framework-stub.jar | Bin 0 -> 15295 bytes edxp-common/proguard-rules.pro | 31 +++++++++++ edxp-common/src/main/AndroidManifest.xml | 1 + .../com/elderdrivers/riru/common/KeepAll.java | 0 .../elderdrivers/riru/common/KeepMembers.java | 0 .../riru/edxp/config/ConfigManager.java | 0 .../riru/edxp/config/InstallerChooser.java | 14 ++--- .../riru/edxp/util/ClassLoaderUtils.java | 0 .../elderdrivers/riru/edxp/util/DexUtils.java | 0 .../riru/edxp/util/FileUtils.java | 0 .../riru/edxp/util/ProcessUtils.java | 7 +-- .../elderdrivers/riru/edxp/util/Utils.java | 0 edxp-yahfa/build.gradle | 1 + .../elderdrivers/riru/edxp/yahfa/Main.java | 2 + .../edxp/yahfa/config/YahfaHookProvider.java | 2 +- .../edxp/yahfa/dexmaker/DynamicBridge.java | 2 +- .../yahfa/entry/hooker/SystemMainHooker.java | 2 +- .../edxp/yahfa/proxy/BlackWhiteListProxy.java | 4 +- .../riru/edxp/yahfa/proxy/NormalProxy.java | 2 +- .../util/InlinedMethodCallers.java | 2 +- .../util/PrebuiltMethodsDeopter.java | 7 +-- settings.gradle | 2 +- 24 files changed, 106 insertions(+), 23 deletions(-) create mode 100644 edxp-common/.gitignore create mode 100644 edxp-common/build.gradle create mode 100644 edxp-common/libs/framework-stub.jar create mode 100644 edxp-common/proguard-rules.pro create mode 100644 edxp-common/src/main/AndroidManifest.xml rename {edxp-yahfa => edxp-common}/src/main/java/com/elderdrivers/riru/common/KeepAll.java (100%) rename {edxp-yahfa => edxp-common}/src/main/java/com/elderdrivers/riru/common/KeepMembers.java (100%) rename {edxp-yahfa => edxp-common}/src/main/java/com/elderdrivers/riru/edxp/config/ConfigManager.java (100%) rename {edxp-yahfa => edxp-common}/src/main/java/com/elderdrivers/riru/edxp/config/InstallerChooser.java (88%) rename {edxp-yahfa => edxp-common}/src/main/java/com/elderdrivers/riru/edxp/util/ClassLoaderUtils.java (100%) rename {edxp-yahfa => edxp-common}/src/main/java/com/elderdrivers/riru/edxp/util/DexUtils.java (100%) rename {edxp-yahfa => edxp-common}/src/main/java/com/elderdrivers/riru/edxp/util/FileUtils.java (100%) rename {edxp-yahfa => edxp-common}/src/main/java/com/elderdrivers/riru/edxp/util/ProcessUtils.java (92%) rename {edxp-yahfa => edxp-common}/src/main/java/com/elderdrivers/riru/edxp/util/Utils.java (100%) rename edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/{ => yahfa}/util/InlinedMethodCallers.java (97%) rename edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/{ => yahfa}/util/PrebuiltMethodsDeopter.java (80%) diff --git a/edxp-common/.gitignore b/edxp-common/.gitignore new file mode 100644 index 00000000..796b96d1 --- /dev/null +++ b/edxp-common/.gitignore @@ -0,0 +1 @@ +/build diff --git a/edxp-common/build.gradle b/edxp-common/build.gradle new file mode 100644 index 00000000..25ac598b --- /dev/null +++ b/edxp-common/build.gradle @@ -0,0 +1,49 @@ +apply plugin: 'com.android.library' + +android { + compileSdkVersion 28 + + defaultConfig { + minSdkVersion 26 + targetSdkVersion 28 + versionCode 1 + versionName "1.0" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + +} + +dependencies { + compileOnly files("libs/framework-stub.jar") + implementation project(':xposed-bridge') + compileOnly project(':dexmaker') +} + + +preBuild.doLast { + def imlFile = file(project.name + ".iml") + println 'Change ' + project.name + '.iml order' + try { + def parsedXml = (new groovy.util.XmlParser()).parse(imlFile) + def jdkNode = parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' } + parsedXml.component[1].remove(jdkNode) + def sdkString = "Android API " + android.compileSdkVersion.substring("android-".length()) + " Platform" + new groovy.util.Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK']) + groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile)) + } catch (FileNotFoundException e) { + // nop, iml not found + } +} + +afterEvaluate { + + tasks.withType(JavaCompile) { + options.compilerArgs.add("-Xbootclasspath/p:${projectDir.absolutePath}/libs/framework-stub.jar") + } +} \ No newline at end of file diff --git a/edxp-common/libs/framework-stub.jar b/edxp-common/libs/framework-stub.jar new file mode 100644 index 0000000000000000000000000000000000000000..36cd86b3c4fd658ed66ff5195ae0cc54d6ebc485 GIT binary patch literal 15295 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 SP*C)sAAQg^FUtb{>;D0!&FVP- literal 0 HcmV?d00001 diff --git a/edxp-common/proguard-rules.pro b/edxp-common/proguard-rules.pro new file mode 100644 index 00000000..721fdf5c --- /dev/null +++ b/edxp-common/proguard-rules.pro @@ -0,0 +1,31 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile + +-dontobfuscate +-keep class de.robv.android.xposed.** {*;} +-keep class android.** { *; } + +-keep interface com.elderdrivers.riru.common.KeepAll +-keep interface com.elderdrivers.riru.common.KeepMembers + +-keep class * implements com.elderdrivers.riru.common.KeepAll { *; } +-keepclassmembers class * implements com.elderdrivers.riru.common.KeepMembers { *; } \ No newline at end of file diff --git a/edxp-common/src/main/AndroidManifest.xml b/edxp-common/src/main/AndroidManifest.xml new file mode 100644 index 00000000..d879e9df --- /dev/null +++ b/edxp-common/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/common/KeepAll.java b/edxp-common/src/main/java/com/elderdrivers/riru/common/KeepAll.java similarity index 100% rename from edxp-yahfa/src/main/java/com/elderdrivers/riru/common/KeepAll.java rename to edxp-common/src/main/java/com/elderdrivers/riru/common/KeepAll.java diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/common/KeepMembers.java b/edxp-common/src/main/java/com/elderdrivers/riru/common/KeepMembers.java similarity index 100% rename from edxp-yahfa/src/main/java/com/elderdrivers/riru/common/KeepMembers.java rename to edxp-common/src/main/java/com/elderdrivers/riru/common/KeepMembers.java diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/config/ConfigManager.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/config/ConfigManager.java similarity index 100% rename from edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/config/ConfigManager.java rename to edxp-common/src/main/java/com/elderdrivers/riru/edxp/config/ConfigManager.java diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/config/InstallerChooser.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/config/InstallerChooser.java similarity index 88% rename from edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/config/InstallerChooser.java rename to edxp-common/src/main/java/com/elderdrivers/riru/edxp/config/InstallerChooser.java index 1caa1491..9e829296 100644 --- a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/config/InstallerChooser.java +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/config/InstallerChooser.java @@ -10,23 +10,25 @@ import java.util.concurrent.atomic.AtomicBoolean; import de.robv.android.xposed.SELinuxHelper; import de.robv.android.xposed.services.BaseService; -import static com.elderdrivers.riru.edxp.yahfa.Main.getInstallerPkgName; - public class InstallerChooser { private static final AtomicBoolean hasSet = new AtomicBoolean(false); + @SuppressLint("SdCardPath") private static final String DATA_DIR_PATH_PREFIX = - Build.VERSION.SDK_INT >= Build.VERSION_CODES.N ? "/data/user_de/0/" : "/data/data/"; + Build.VERSION.SDK_INT >= Build.VERSION_CODES.N ? "/data/user_de/0/" : "/data/user/0/"; public static final String PRIMARY_INSTALLER_PACKAGE_NAME = "com.solohsu.android.edxp.manager"; public static final String SECONDARY_INSTALLER_PACKAGE_NAME = "org.meowcat.edxposed.manager"; public static final String LEGACY_INSTALLER_PACKAGE_NAME = "de.robv.android.xposed.installer"; - public static String INSTALLER_PACKAGE_NAME = getInstallerPkgName(); - @SuppressLint("SdCardPath") - public static String INSTALLER_DATA_BASE_DIR = DATA_DIR_PATH_PREFIX + INSTALLER_PACKAGE_NAME + "/"; + public static String INSTALLER_PACKAGE_NAME; + public static String INSTALLER_DATA_BASE_DIR; + public static void setInstallerPackageName(String packageName) { + INSTALLER_PACKAGE_NAME = packageName; + INSTALLER_DATA_BASE_DIR = DATA_DIR_PATH_PREFIX + INSTALLER_PACKAGE_NAME + "/"; + } public static void setup() { if (!hasSet.compareAndSet(false, true)) { diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/ClassLoaderUtils.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/ClassLoaderUtils.java similarity index 100% rename from edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/ClassLoaderUtils.java rename to edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/ClassLoaderUtils.java diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/DexUtils.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/DexUtils.java similarity index 100% rename from edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/DexUtils.java rename to edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/DexUtils.java diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/FileUtils.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/FileUtils.java similarity index 100% rename from edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/FileUtils.java rename to edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/FileUtils.java diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/ProcessUtils.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/ProcessUtils.java similarity index 92% rename from edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/ProcessUtils.java rename to edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/ProcessUtils.java index a860c8a0..b0e8edaa 100644 --- a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/ProcessUtils.java +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/ProcessUtils.java @@ -3,8 +3,6 @@ package com.elderdrivers.riru.edxp.util; import android.os.Process; import android.text.TextUtils; -import com.elderdrivers.riru.edxp.yahfa.Main; - import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; @@ -16,8 +14,7 @@ public class ProcessUtils { public static final int PER_USER_RANGE = 100000; public static final int USER_SYSTEM = 0; - public static String getCurrentProcessName() { - String prettyName = Main.appProcessName; + public static String getCurrentProcessName(String prettyName) { if (!TextUtils.isEmpty(prettyName)) { return prettyName; } @@ -26,8 +23,6 @@ public class ProcessUtils { /** * a common solution from https://stackoverflow.com/a/21389402 - *

- * use {@link Main#appProcessName} to get current process name */ public static String getProcessName(int pid) { BufferedReader cmdlineReader = null; diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/Utils.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/Utils.java similarity index 100% rename from edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/Utils.java rename to edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/Utils.java diff --git a/edxp-yahfa/build.gradle b/edxp-yahfa/build.gradle index f8e0e74f..ea531df8 100644 --- a/edxp-yahfa/build.gradle +++ b/edxp-yahfa/build.gradle @@ -22,6 +22,7 @@ android { dependencies { compileOnly files("libs/framework-stub.jar") + implementation project(':edxp-common') implementation project(':xposed-bridge') compileOnly project(':dexmaker') } diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/Main.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/Main.java index 73edd260..f855d593 100644 --- a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/Main.java +++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/Main.java @@ -6,6 +6,7 @@ import android.os.Process; import com.elderdrivers.riru.common.KeepAll; import com.elderdrivers.riru.edxp.BuildConfig; +import com.elderdrivers.riru.edxp.config.InstallerChooser; import com.elderdrivers.riru.edxp.yahfa.core.HookMethodResolver; import com.elderdrivers.riru.edxp.yahfa.entry.Router; import com.elderdrivers.riru.edxp.yahfa.proxy.BlackWhiteListProxy; @@ -28,6 +29,7 @@ public class Main implements KeepAll { init(Build.VERSION.SDK_INT); HookMethodResolver.init(); Router.injectConfig(); + InstallerChooser.setInstallerPackageName(getInstallerPkgName()); } /////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/config/YahfaHookProvider.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/config/YahfaHookProvider.java index a160de32..c573f441 100644 --- a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/config/YahfaHookProvider.java +++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/config/YahfaHookProvider.java @@ -1,7 +1,7 @@ package com.elderdrivers.riru.edxp.yahfa.config; import com.elderdrivers.riru.edxp.hook.HookProvider; -import com.elderdrivers.riru.edxp.util.PrebuiltMethodsDeopter; +import com.elderdrivers.riru.edxp.yahfa.util.PrebuiltMethodsDeopter; import com.elderdrivers.riru.edxp.yahfa.dexmaker.DexMakerUtils; import com.elderdrivers.riru.edxp.yahfa.dexmaker.DynamicBridge; diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DynamicBridge.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DynamicBridge.java index 2905a53b..a6307f7b 100644 --- a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DynamicBridge.java +++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DynamicBridge.java @@ -76,7 +76,7 @@ public final class DynamicBridge { // in case some app is installing hooks before phone is unlocked String fixedAppDataDir = getDataPathPrefix() + getPackageName(Main.appDataDir) + "/"; dexDir = new File(fixedAppDataDir, "/cache/edhookers/" - + getCurrentProcessName().replace(":", "_") + "/"); + + getCurrentProcessName(Main.appProcessName).replace(":", "_") + "/"); dexOptDir = new File(dexDir, "oat"); dexDir.mkdirs(); DexLog.d(Main.appProcessName + " deleting dir: " + dexOptDir.getAbsolutePath()); diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/SystemMainHooker.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/SystemMainHooker.java index 92546c91..2478f2e6 100644 --- a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/SystemMainHooker.java +++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/SystemMainHooker.java @@ -3,7 +3,7 @@ package com.elderdrivers.riru.edxp.yahfa.entry.hooker; import android.app.ActivityThread; import com.elderdrivers.riru.common.KeepMembers; -import com.elderdrivers.riru.edxp.util.PrebuiltMethodsDeopter; +import com.elderdrivers.riru.edxp.yahfa.util.PrebuiltMethodsDeopter; import com.elderdrivers.riru.edxp.yahfa.entry.Router; import de.robv.android.xposed.XposedBridge; diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/BlackWhiteListProxy.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/BlackWhiteListProxy.java index aa0ba58c..dd59ee82 100644 --- a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/BlackWhiteListProxy.java +++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/BlackWhiteListProxy.java @@ -5,7 +5,7 @@ import android.text.TextUtils; import com.elderdrivers.riru.edxp.yahfa.Main; import com.elderdrivers.riru.edxp.config.ConfigManager; import com.elderdrivers.riru.edxp.yahfa.entry.Router; -import com.elderdrivers.riru.edxp.util.PrebuiltMethodsDeopter; +import com.elderdrivers.riru.edxp.yahfa.util.PrebuiltMethodsDeopter; import com.elderdrivers.riru.edxp.util.ProcessUtils; import com.elderdrivers.riru.edxp.util.Utils; @@ -112,7 +112,7 @@ public class BlackWhiteListProxy { boolean needHook; if (TextUtils.isEmpty(appDataDir)) { Utils.logE("niceName:" + niceName + ", procName:" - + ProcessUtils.getCurrentProcessName() + ", appDataDir is null, blacklisted!"); + + ProcessUtils.getCurrentProcessName(Main.appProcessName) + ", appDataDir is null, blacklisted!"); needHook = false; } else { // FIXME some process cannot read app_data_file because of MLS, e.g. bluetooth diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/NormalProxy.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/NormalProxy.java index 2ccd5963..0df49cd6 100644 --- a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/NormalProxy.java +++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/NormalProxy.java @@ -2,7 +2,7 @@ package com.elderdrivers.riru.edxp.yahfa.proxy; import com.elderdrivers.riru.edxp.yahfa.Main; import com.elderdrivers.riru.edxp.config.ConfigManager; -import com.elderdrivers.riru.edxp.util.PrebuiltMethodsDeopter; +import com.elderdrivers.riru.edxp.yahfa.util.PrebuiltMethodsDeopter; import com.elderdrivers.riru.edxp.yahfa.entry.Router; import static com.elderdrivers.riru.edxp.util.FileUtils.getDataPathPrefix; diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/InlinedMethodCallers.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/util/InlinedMethodCallers.java similarity index 97% rename from edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/InlinedMethodCallers.java rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/util/InlinedMethodCallers.java index f4efe27d..15fffeb0 100644 --- a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/InlinedMethodCallers.java +++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/util/InlinedMethodCallers.java @@ -1,4 +1,4 @@ -package com.elderdrivers.riru.edxp.util; +package com.elderdrivers.riru.edxp.yahfa.util; import java.util.HashMap; diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/PrebuiltMethodsDeopter.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/util/PrebuiltMethodsDeopter.java similarity index 80% rename from edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/PrebuiltMethodsDeopter.java rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/util/PrebuiltMethodsDeopter.java index caee422b..86041628 100644 --- a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/PrebuiltMethodsDeopter.java +++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/util/PrebuiltMethodsDeopter.java @@ -1,13 +1,14 @@ -package com.elderdrivers.riru.edxp.util; +package com.elderdrivers.riru.edxp.yahfa.util; +import com.elderdrivers.riru.edxp.util.Utils; import com.elderdrivers.riru.edxp.yahfa.Main; import java.util.Arrays; import de.robv.android.xposed.XposedHelpers; -import static com.elderdrivers.riru.edxp.util.InlinedMethodCallers.KEY_BOOT_IMAGE; -import static com.elderdrivers.riru.edxp.util.InlinedMethodCallers.KEY_SYSTEM_SERVER; +import static com.elderdrivers.riru.edxp.yahfa.util.InlinedMethodCallers.KEY_BOOT_IMAGE; +import static com.elderdrivers.riru.edxp.yahfa.util.InlinedMethodCallers.KEY_SYSTEM_SERVER; public class PrebuiltMethodsDeopter { diff --git a/settings.gradle b/settings.gradle index 0608b9f8..2b7924b5 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':edxp-core', ':xposed-bridge', ':hiddenapi-stubs', ':dexmaker', ':dalvikdx', ':edxp-yahfa' \ No newline at end of file +include ':edxp-core', ':xposed-bridge', ':hiddenapi-stubs', ':dexmaker', ':dalvikdx', ':edxp-yahfa', ':edxp-common' \ No newline at end of file