Add edxp-common module
This commit is contained in:
parent
53d0dbd120
commit
696ede0209
|
|
@ -0,0 +1 @@
|
||||||
|
/build
|
||||||
|
|
@ -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")
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
|
|
@ -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 { *; }
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
<manifest package="com.elderdrivers.riru.edxp.common" />
|
||||||
|
|
@ -10,23 +10,25 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import de.robv.android.xposed.SELinuxHelper;
|
import de.robv.android.xposed.SELinuxHelper;
|
||||||
import de.robv.android.xposed.services.BaseService;
|
import de.robv.android.xposed.services.BaseService;
|
||||||
|
|
||||||
import static com.elderdrivers.riru.edxp.yahfa.Main.getInstallerPkgName;
|
|
||||||
|
|
||||||
public class InstallerChooser {
|
public class InstallerChooser {
|
||||||
|
|
||||||
private static final AtomicBoolean hasSet = new AtomicBoolean(false);
|
private static final AtomicBoolean hasSet = new AtomicBoolean(false);
|
||||||
|
@SuppressLint("SdCardPath")
|
||||||
private static final String DATA_DIR_PATH_PREFIX =
|
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 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 SECONDARY_INSTALLER_PACKAGE_NAME = "org.meowcat.edxposed.manager";
|
||||||
public static final String LEGACY_INSTALLER_PACKAGE_NAME = "de.robv.android.xposed.installer";
|
public static final String LEGACY_INSTALLER_PACKAGE_NAME = "de.robv.android.xposed.installer";
|
||||||
|
|
||||||
public static String INSTALLER_PACKAGE_NAME = getInstallerPkgName();
|
public static String INSTALLER_PACKAGE_NAME;
|
||||||
@SuppressLint("SdCardPath")
|
public static String INSTALLER_DATA_BASE_DIR;
|
||||||
public static String INSTALLER_DATA_BASE_DIR = DATA_DIR_PATH_PREFIX + INSTALLER_PACKAGE_NAME + "/";
|
|
||||||
|
|
||||||
|
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() {
|
public static void setup() {
|
||||||
if (!hasSet.compareAndSet(false, true)) {
|
if (!hasSet.compareAndSet(false, true)) {
|
||||||
|
|
@ -3,8 +3,6 @@ package com.elderdrivers.riru.edxp.util;
|
||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import com.elderdrivers.riru.edxp.yahfa.Main;
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
|
|
@ -16,8 +14,7 @@ public class ProcessUtils {
|
||||||
public static final int PER_USER_RANGE = 100000;
|
public static final int PER_USER_RANGE = 100000;
|
||||||
public static final int USER_SYSTEM = 0;
|
public static final int USER_SYSTEM = 0;
|
||||||
|
|
||||||
public static String getCurrentProcessName() {
|
public static String getCurrentProcessName(String prettyName) {
|
||||||
String prettyName = Main.appProcessName;
|
|
||||||
if (!TextUtils.isEmpty(prettyName)) {
|
if (!TextUtils.isEmpty(prettyName)) {
|
||||||
return prettyName;
|
return prettyName;
|
||||||
}
|
}
|
||||||
|
|
@ -26,8 +23,6 @@ public class ProcessUtils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* a common solution from https://stackoverflow.com/a/21389402
|
* a common solution from https://stackoverflow.com/a/21389402
|
||||||
* <p>
|
|
||||||
* use {@link Main#appProcessName} to get current process name
|
|
||||||
*/
|
*/
|
||||||
public static String getProcessName(int pid) {
|
public static String getProcessName(int pid) {
|
||||||
BufferedReader cmdlineReader = null;
|
BufferedReader cmdlineReader = null;
|
||||||
|
|
@ -22,6 +22,7 @@ android {
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly files("libs/framework-stub.jar")
|
compileOnly files("libs/framework-stub.jar")
|
||||||
|
implementation project(':edxp-common')
|
||||||
implementation project(':xposed-bridge')
|
implementation project(':xposed-bridge')
|
||||||
compileOnly project(':dexmaker')
|
compileOnly project(':dexmaker')
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import android.os.Process;
|
||||||
|
|
||||||
import com.elderdrivers.riru.common.KeepAll;
|
import com.elderdrivers.riru.common.KeepAll;
|
||||||
import com.elderdrivers.riru.edxp.BuildConfig;
|
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.core.HookMethodResolver;
|
||||||
import com.elderdrivers.riru.edxp.yahfa.entry.Router;
|
import com.elderdrivers.riru.edxp.yahfa.entry.Router;
|
||||||
import com.elderdrivers.riru.edxp.yahfa.proxy.BlackWhiteListProxy;
|
import com.elderdrivers.riru.edxp.yahfa.proxy.BlackWhiteListProxy;
|
||||||
|
|
@ -28,6 +29,7 @@ public class Main implements KeepAll {
|
||||||
init(Build.VERSION.SDK_INT);
|
init(Build.VERSION.SDK_INT);
|
||||||
HookMethodResolver.init();
|
HookMethodResolver.init();
|
||||||
Router.injectConfig();
|
Router.injectConfig();
|
||||||
|
InstallerChooser.setInstallerPackageName(getInstallerPkgName());
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package com.elderdrivers.riru.edxp.yahfa.config;
|
package com.elderdrivers.riru.edxp.yahfa.config;
|
||||||
|
|
||||||
import com.elderdrivers.riru.edxp.hook.HookProvider;
|
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.DexMakerUtils;
|
||||||
import com.elderdrivers.riru.edxp.yahfa.dexmaker.DynamicBridge;
|
import com.elderdrivers.riru.edxp.yahfa.dexmaker.DynamicBridge;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ public final class DynamicBridge {
|
||||||
// in case some app is installing hooks before phone is unlocked
|
// in case some app is installing hooks before phone is unlocked
|
||||||
String fixedAppDataDir = getDataPathPrefix() + getPackageName(Main.appDataDir) + "/";
|
String fixedAppDataDir = getDataPathPrefix() + getPackageName(Main.appDataDir) + "/";
|
||||||
dexDir = new File(fixedAppDataDir, "/cache/edhookers/"
|
dexDir = new File(fixedAppDataDir, "/cache/edhookers/"
|
||||||
+ getCurrentProcessName().replace(":", "_") + "/");
|
+ getCurrentProcessName(Main.appProcessName).replace(":", "_") + "/");
|
||||||
dexOptDir = new File(dexDir, "oat");
|
dexOptDir = new File(dexDir, "oat");
|
||||||
dexDir.mkdirs();
|
dexDir.mkdirs();
|
||||||
DexLog.d(Main.appProcessName + " deleting dir: " + dexOptDir.getAbsolutePath());
|
DexLog.d(Main.appProcessName + " deleting dir: " + dexOptDir.getAbsolutePath());
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ package com.elderdrivers.riru.edxp.yahfa.entry.hooker;
|
||||||
import android.app.ActivityThread;
|
import android.app.ActivityThread;
|
||||||
|
|
||||||
import com.elderdrivers.riru.common.KeepMembers;
|
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 com.elderdrivers.riru.edxp.yahfa.entry.Router;
|
||||||
|
|
||||||
import de.robv.android.xposed.XposedBridge;
|
import de.robv.android.xposed.XposedBridge;
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import android.text.TextUtils;
|
||||||
import com.elderdrivers.riru.edxp.yahfa.Main;
|
import com.elderdrivers.riru.edxp.yahfa.Main;
|
||||||
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
||||||
import com.elderdrivers.riru.edxp.yahfa.entry.Router;
|
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.ProcessUtils;
|
||||||
import com.elderdrivers.riru.edxp.util.Utils;
|
import com.elderdrivers.riru.edxp.util.Utils;
|
||||||
|
|
||||||
|
|
@ -112,7 +112,7 @@ public class BlackWhiteListProxy {
|
||||||
boolean needHook;
|
boolean needHook;
|
||||||
if (TextUtils.isEmpty(appDataDir)) {
|
if (TextUtils.isEmpty(appDataDir)) {
|
||||||
Utils.logE("niceName:" + niceName + ", procName:"
|
Utils.logE("niceName:" + niceName + ", procName:"
|
||||||
+ ProcessUtils.getCurrentProcessName() + ", appDataDir is null, blacklisted!");
|
+ ProcessUtils.getCurrentProcessName(Main.appProcessName) + ", appDataDir is null, blacklisted!");
|
||||||
needHook = false;
|
needHook = false;
|
||||||
} else {
|
} else {
|
||||||
// FIXME some process cannot read app_data_file because of MLS, e.g. bluetooth
|
// FIXME some process cannot read app_data_file because of MLS, e.g. bluetooth
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ package com.elderdrivers.riru.edxp.yahfa.proxy;
|
||||||
|
|
||||||
import com.elderdrivers.riru.edxp.yahfa.Main;
|
import com.elderdrivers.riru.edxp.yahfa.Main;
|
||||||
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
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 com.elderdrivers.riru.edxp.yahfa.entry.Router;
|
||||||
|
|
||||||
import static com.elderdrivers.riru.edxp.util.FileUtils.getDataPathPrefix;
|
import static com.elderdrivers.riru.edxp.util.FileUtils.getDataPathPrefix;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package com.elderdrivers.riru.edxp.util;
|
package com.elderdrivers.riru.edxp.yahfa.util;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
|
@ -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 com.elderdrivers.riru.edxp.yahfa.Main;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import de.robv.android.xposed.XposedHelpers;
|
import de.robv.android.xposed.XposedHelpers;
|
||||||
|
|
||||||
import static com.elderdrivers.riru.edxp.util.InlinedMethodCallers.KEY_BOOT_IMAGE;
|
import static com.elderdrivers.riru.edxp.yahfa.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_SYSTEM_SERVER;
|
||||||
|
|
||||||
public class PrebuiltMethodsDeopter {
|
public class PrebuiltMethodsDeopter {
|
||||||
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
include ':edxp-core', ':xposed-bridge', ':hiddenapi-stubs', ':dexmaker', ':dalvikdx', ':edxp-yahfa'
|
include ':edxp-core', ':xposed-bridge', ':hiddenapi-stubs', ':dexmaker', ':dalvikdx', ':edxp-yahfa', ':edxp-common'
|
||||||
Loading…
Reference in New Issue