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.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)) {
|
||||
|
|
@ -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
|
||||
* <p>
|
||||
* use {@link Main#appProcessName} to get current process name
|
||||
*/
|
||||
public static String getProcessName(int pid) {
|
||||
BufferedReader cmdlineReader = null;
|
||||
|
|
@ -22,6 +22,7 @@ android {
|
|||
|
||||
dependencies {
|
||||
compileOnly files("libs/framework-stub.jar")
|
||||
implementation project(':edxp-common')
|
||||
implementation project(':xposed-bridge')
|
||||
compileOnly project(':dexmaker')
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package com.elderdrivers.riru.edxp.util;
|
||||
package com.elderdrivers.riru.edxp.yahfa.util;
|
||||
|
||||
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 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 {
|
||||
|
||||
|
|
@ -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