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