Add edxp-common module

This commit is contained in:
solohsu 2019-03-19 22:25:48 +08:00
parent 53d0dbd120
commit 696ede0209
24 changed files with 106 additions and 23 deletions

1
edxp-common/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build

49
edxp-common/build.gradle Normal file
View File

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

31
edxp-common/proguard-rules.pro vendored Normal file
View File

@ -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 { *; }

View File

@ -0,0 +1 @@
<manifest package="com.elderdrivers.riru.edxp.common" />

View File

@ -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)) {

View File

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

View File

@ -22,6 +22,7 @@ android {
dependencies {
compileOnly files("libs/framework-stub.jar")
implementation project(':edxp-common')
implementation project(':xposed-bridge')
compileOnly project(':dexmaker')
}

View File

@ -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());
}
///////////////////////////////////////////////////////////////////////////////////////////////

View File

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

View File

@ -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());

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
package com.elderdrivers.riru.edxp.util;
package com.elderdrivers.riru.edxp.yahfa.util;
import java.util.HashMap;

View File

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

View File

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