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 00000000..36cd86b3
Binary files /dev/null and b/edxp-common/libs/framework-stub.jar differ
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 @@
+
- * 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