diff --git a/Bridge/build.gradle b/Bridge/build.gradle
deleted file mode 100644
index d223e8bc..00000000
--- a/Bridge/build.gradle
+++ /dev/null
@@ -1,132 +0,0 @@
-import groovy.xml.XmlUtil
-
-apply plugin: 'com.android.application'
-
-gradle.projectsEvaluated {
- tasks.withType(JavaCompile) {
- options.compilerArgs.add('-Xbootclasspath/p:libs/framework-stub.jar')
- }
-}
-
-android {
- compileSdkVersion 28
- buildToolsVersion '28.0.3'
-
- defaultConfig {
- multiDexEnabled false
- minSdkVersion 23
- }
-
- sourceSets {
- main {
- java.srcDirs += ['src/main/apacheCommonsLang']
- jniLibs.srcDirs = ['libs']
- }
- }
-
- buildTypes {
- release {
- minifyEnabled true
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
-
- // Only build the release variant
-// variantFilter { variant ->
-// if (variant.buildType.name != BuilderConstants.DEBUG) {
-// variant.ignore = true
-// }
-// }
-}
-
-task generateStubs(type: Javadoc, dependsOn: 'compileReleaseSources') {
- source = file('src/main/java')
- ext.stubsDir = "$buildDir/api/stub-sources"
- outputs.dir ext.stubsDir
- title = null
-
- options {
- doclet = 'com.google.doclava.Doclava'
- docletpath = fileTree(dir: 'doclib', include: '**/*.jar').asType(List)
- jFlags '-Dignore.symbol.file'
- addBooleanOption 'nodocs', true
- addFileOption 'stubs', file(ext.stubsDir)
- addFileOption 'api', file('doclib/api/current.txt')
- addBooleanOption 'hide 111', true
- addBooleanOption 'hide 113', true
- addBooleanOption 'hidePackage xposed.dummy', true
- }
-}
-
-task compileStubs(type: JavaCompile, dependsOn: 'generateStubs') {
- source = fileTree(generateStubs.ext.stubsDir)
- destinationDir = file("$buildDir/api/stub-classes")
- options.compilerArgs += '-XDsuppressNotes'
-}
-
-task jarStubs(type: Jar) {
- from compileStubs
- destinationDir = file("$buildDir/api")
- baseName = 'api'
-}
-
-task jarStubsSource(type: Jar) {
- from generateStubs.source
- destinationDir = jarStubs.destinationDir
- baseName = jarStubs.baseName
- classifier = 'sources'
-}
-
-task generateAPI(dependsOn: ['generateStubs', 'jarStubs', 'jarStubsSource'])
-
-// Make sure that hiddenapistubs are placed before the Android SDK in app.iml
-// as there doesn't seem to be any way to configure this in Android Studio.
-task fixIml {
- ext.imlFile = projectDir.absolutePath + '/' + project.name + '.iml'
- inputs.file imlFile
- outputs.file imlFile
-
- println imlFile
- doLast {
- def imlFile = file(project.name + ".iml")
- println 'Change ' + project.name + '.iml order'
- try {
- def parsedXml = (new 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 Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK'])
- XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile))
- } catch (FileNotFoundException e) {
- // nop, iml not found
- }
- }
-}
-
-tasks.preBuild.dependsOn fixIml
-
-dependencies {
- compileOnly files("libs/framework-stub.jar")
- compileOnly project(':dexmaker')
-}
-
-afterEvaluate {
-
- task javac
-
- tasks.withType(JavaCompile) {
- options.compilerArgs.add('-Xbootclasspath/p:libs/framework-stub.jar')
- }
-
- android.applicationVariants.all { variant ->
- def nameCapped = variant.name.capitalize()
- def nameLowered = variant.name.toLowerCase()
-
- def makeAndCopyTask = task("makeAndCopy${nameCapped}", type: Jar, dependsOn: "assemble${nameCapped}") {
- from "build/intermediates/transforms/dexMerger/${nameLowered}/0/"
- destinationDir file("../Core/template_override/system/framework/")
- baseName "edxp"
- }
- }
-
-}
\ No newline at end of file
diff --git a/README.md b/README.md
index 49bb3a42..61c153ad 100644
--- a/README.md
+++ b/README.md
@@ -32,10 +32,9 @@ and zip binaries can be downloaded from [here](http://gnuwin32.sourceforge.net/p
## Build
-1. run `:Bridge:makeAndCopyRelease` in Gradle window to build `edxp.jar`
-2. run `:Core:zipRelease` to build Magisk Riru module flashable zip file
-3. find the flashable under `Core/release/`
-4. flash the zip in recovery mode or in Magisk Manager
+1. run `./gradlew :edxp-core:zipRelease` to build flashable zip
+2. find the flashable under `edxp-core/release/`
+3. flash the zip in recovery mode or in Magisk Manager
## Install
diff --git a/build.gradle b/build.gradle
index 7d4bf63d..d5187bf6 100644
--- a/build.gradle
+++ b/build.gradle
@@ -7,7 +7,7 @@ buildscript {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.2.1'
+ classpath 'com.android.tools.build:gradle:3.3.2'
// NOTE: Do not place your application dependencies here; they belong
diff --git a/Core/.gitignore b/edxp-core/.gitignore
similarity index 100%
rename from Core/.gitignore
rename to edxp-core/.gitignore
diff --git a/Core/build-module.sh b/edxp-core/build-module.sh
similarity index 100%
rename from Core/build-module.sh
rename to edxp-core/build-module.sh
diff --git a/Core/build.gradle b/edxp-core/build.gradle
similarity index 80%
rename from Core/build.gradle
rename to edxp-core/build.gradle
index bcb47d16..3f22d263 100644
--- a/Core/build.gradle
+++ b/edxp-core/build.gradle
@@ -1,5 +1,4 @@
-import org.gradle.internal.os.OperatingSystem;
-
+import org.gradle.internal.os.OperatingSystem
apply plugin: 'com.android.library'
version "v0.3.1.6_beta-SNAPSHOT"
extensions["module_name"] = "EdXposed"
@@ -28,12 +27,12 @@ afterEvaluate {
def nameCapped = variant.name.capitalize()
def nameLowered = variant.name.toLowerCase()
- def zipTask = task("zip${nameCapped}", type: Exec, dependsOn: ":Bridge:makeAndCopy${nameCapped}") {
+ def zipTask = task("zip${nameCapped}", type: Exec, dependsOn: ":edxp-yahfa:makeAndCopy${nameCapped}") {
workingDir '..'
- commandLine 'sh', 'build.sh', \
- project.name, \
- "${project.version}-${nameLowered}", \
- "${project.extensions['module_name']}"
+ commandLine 'sh', 'build.sh', \
+ project.name, \
+ "${project.version}-${nameLowered}", \
+ "${project.extensions['module_name']}"
}
def pushTask = task("push${nameCapped}", type: Exec) {
@@ -51,3 +50,6 @@ afterEvaluate {
}
}
+
+dependencies {
+}
\ No newline at end of file
diff --git a/Core/jni/.gitattributes b/edxp-core/jni/.gitattributes
similarity index 100%
rename from Core/jni/.gitattributes
rename to edxp-core/jni/.gitattributes
diff --git a/Core/jni/Android.mk b/edxp-core/jni/Android.mk
similarity index 100%
rename from Core/jni/Android.mk
rename to edxp-core/jni/Android.mk
diff --git a/Core/jni/Application.mk b/edxp-core/jni/Application.mk
similarity index 100%
rename from Core/jni/Application.mk
rename to edxp-core/jni/Application.mk
diff --git a/Core/jni/external/Android.mk b/edxp-core/jni/external/Android.mk
similarity index 100%
rename from Core/jni/external/Android.mk
rename to edxp-core/jni/external/Android.mk
diff --git a/Core/jni/external/include/xhook/xhook.h b/edxp-core/jni/external/include/xhook/xhook.h
similarity index 100%
rename from Core/jni/external/include/xhook/xhook.h
rename to edxp-core/jni/external/include/xhook/xhook.h
diff --git a/Core/jni/external/xhook/queue.h b/edxp-core/jni/external/xhook/queue.h
similarity index 100%
rename from Core/jni/external/xhook/queue.h
rename to edxp-core/jni/external/xhook/queue.h
diff --git a/Core/jni/external/xhook/tree.h b/edxp-core/jni/external/xhook/tree.h
similarity index 100%
rename from Core/jni/external/xhook/tree.h
rename to edxp-core/jni/external/xhook/tree.h
diff --git a/Core/jni/external/xhook/xh_core.c b/edxp-core/jni/external/xhook/xh_core.c
similarity index 100%
rename from Core/jni/external/xhook/xh_core.c
rename to edxp-core/jni/external/xhook/xh_core.c
diff --git a/Core/jni/external/xhook/xh_core.h b/edxp-core/jni/external/xhook/xh_core.h
similarity index 100%
rename from Core/jni/external/xhook/xh_core.h
rename to edxp-core/jni/external/xhook/xh_core.h
diff --git a/Core/jni/external/xhook/xh_elf.c b/edxp-core/jni/external/xhook/xh_elf.c
similarity index 100%
rename from Core/jni/external/xhook/xh_elf.c
rename to edxp-core/jni/external/xhook/xh_elf.c
diff --git a/Core/jni/external/xhook/xh_elf.h b/edxp-core/jni/external/xhook/xh_elf.h
similarity index 100%
rename from Core/jni/external/xhook/xh_elf.h
rename to edxp-core/jni/external/xhook/xh_elf.h
diff --git a/Core/jni/external/xhook/xh_errno.h b/edxp-core/jni/external/xhook/xh_errno.h
similarity index 100%
rename from Core/jni/external/xhook/xh_errno.h
rename to edxp-core/jni/external/xhook/xh_errno.h
diff --git a/Core/jni/external/xhook/xh_jni.c b/edxp-core/jni/external/xhook/xh_jni.c
similarity index 100%
rename from Core/jni/external/xhook/xh_jni.c
rename to edxp-core/jni/external/xhook/xh_jni.c
diff --git a/Core/jni/external/xhook/xh_log.c b/edxp-core/jni/external/xhook/xh_log.c
similarity index 100%
rename from Core/jni/external/xhook/xh_log.c
rename to edxp-core/jni/external/xhook/xh_log.c
diff --git a/Core/jni/external/xhook/xh_log.h b/edxp-core/jni/external/xhook/xh_log.h
similarity index 100%
rename from Core/jni/external/xhook/xh_log.h
rename to edxp-core/jni/external/xhook/xh_log.h
diff --git a/Core/jni/external/xhook/xh_util.c b/edxp-core/jni/external/xhook/xh_util.c
similarity index 100%
rename from Core/jni/external/xhook/xh_util.c
rename to edxp-core/jni/external/xhook/xh_util.c
diff --git a/Core/jni/external/xhook/xh_util.h b/edxp-core/jni/external/xhook/xh_util.h
similarity index 100%
rename from Core/jni/external/xhook/xh_util.h
rename to edxp-core/jni/external/xhook/xh_util.h
diff --git a/Core/jni/external/xhook/xh_version.c b/edxp-core/jni/external/xhook/xh_version.c
similarity index 100%
rename from Core/jni/external/xhook/xh_version.c
rename to edxp-core/jni/external/xhook/xh_version.c
diff --git a/Core/jni/external/xhook/xh_version.h b/edxp-core/jni/external/xhook/xh_version.h
similarity index 100%
rename from Core/jni/external/xhook/xh_version.h
rename to edxp-core/jni/external/xhook/xh_version.h
diff --git a/Core/jni/external/xhook/xhook.c b/edxp-core/jni/external/xhook/xhook.c
similarity index 100%
rename from Core/jni/external/xhook/xhook.c
rename to edxp-core/jni/external/xhook/xhook.c
diff --git a/Core/jni/external/xhook/xhook.h b/edxp-core/jni/external/xhook/xhook.h
similarity index 100%
rename from Core/jni/external/xhook/xhook.h
rename to edxp-core/jni/external/xhook/xhook.h
diff --git a/Core/jni/main/Android.mk b/edxp-core/jni/main/Android.mk
similarity index 100%
rename from Core/jni/main/Android.mk
rename to edxp-core/jni/main/Android.mk
diff --git a/Core/jni/main/include/JNIHelper.h b/edxp-core/jni/main/include/JNIHelper.h
similarity index 100%
rename from Core/jni/main/include/JNIHelper.h
rename to edxp-core/jni/main/include/JNIHelper.h
diff --git a/Core/jni/main/include/android_build.h b/edxp-core/jni/main/include/android_build.h
similarity index 100%
rename from Core/jni/main/include/android_build.h
rename to edxp-core/jni/main/include/android_build.h
diff --git a/Core/jni/main/include/config.h b/edxp-core/jni/main/include/config.h
similarity index 100%
rename from Core/jni/main/include/config.h
rename to edxp-core/jni/main/include/config.h
diff --git a/Core/jni/main/include/fd_utils-inl.h b/edxp-core/jni/main/include/fd_utils-inl.h
similarity index 100%
rename from Core/jni/main/include/fd_utils-inl.h
rename to edxp-core/jni/main/include/fd_utils-inl.h
diff --git a/Core/jni/main/include/logging.h b/edxp-core/jni/main/include/logging.h
similarity index 100%
rename from Core/jni/main/include/logging.h
rename to edxp-core/jni/main/include/logging.h
diff --git a/Core/jni/main/include/misc.cpp b/edxp-core/jni/main/include/misc.cpp
similarity index 100%
rename from Core/jni/main/include/misc.cpp
rename to edxp-core/jni/main/include/misc.cpp
diff --git a/Core/jni/main/include/misc.h b/edxp-core/jni/main/include/misc.h
similarity index 100%
rename from Core/jni/main/include/misc.h
rename to edxp-core/jni/main/include/misc.h
diff --git a/Core/jni/main/include/riru.c b/edxp-core/jni/main/include/riru.c
similarity index 100%
rename from Core/jni/main/include/riru.c
rename to edxp-core/jni/main/include/riru.c
diff --git a/Core/jni/main/include/riru.h b/edxp-core/jni/main/include/riru.h
similarity index 100%
rename from Core/jni/main/include/riru.h
rename to edxp-core/jni/main/include/riru.h
diff --git a/Core/jni/main/inject/config_manager.cpp b/edxp-core/jni/main/inject/config_manager.cpp
similarity index 100%
rename from Core/jni/main/inject/config_manager.cpp
rename to edxp-core/jni/main/inject/config_manager.cpp
diff --git a/Core/jni/main/inject/config_manager.h b/edxp-core/jni/main/inject/config_manager.h
similarity index 100%
rename from Core/jni/main/inject/config_manager.h
rename to edxp-core/jni/main/inject/config_manager.h
diff --git a/Core/jni/main/inject/framework_hook.cpp b/edxp-core/jni/main/inject/framework_hook.cpp
similarity index 100%
rename from Core/jni/main/inject/framework_hook.cpp
rename to edxp-core/jni/main/inject/framework_hook.cpp
diff --git a/Core/jni/main/inject/framework_hook.h b/edxp-core/jni/main/inject/framework_hook.h
similarity index 100%
rename from Core/jni/main/inject/framework_hook.h
rename to edxp-core/jni/main/inject/framework_hook.h
diff --git a/Core/jni/main/java_hook/java_hook.cpp b/edxp-core/jni/main/java_hook/java_hook.cpp
similarity index 100%
rename from Core/jni/main/java_hook/java_hook.cpp
rename to edxp-core/jni/main/java_hook/java_hook.cpp
diff --git a/Core/jni/main/java_hook/java_hook.h b/edxp-core/jni/main/java_hook/java_hook.h
similarity index 100%
rename from Core/jni/main/java_hook/java_hook.h
rename to edxp-core/jni/main/java_hook/java_hook.h
diff --git a/Core/jni/main/main.cpp b/edxp-core/jni/main/main.cpp
similarity index 100%
rename from Core/jni/main/main.cpp
rename to edxp-core/jni/main/main.cpp
diff --git a/Core/jni/main/native_hook/native_hook.cpp b/edxp-core/jni/main/native_hook/native_hook.cpp
similarity index 100%
rename from Core/jni/main/native_hook/native_hook.cpp
rename to edxp-core/jni/main/native_hook/native_hook.cpp
diff --git a/Core/jni/main/native_hook/native_hook.h b/edxp-core/jni/main/native_hook/native_hook.h
similarity index 100%
rename from Core/jni/main/native_hook/native_hook.h
rename to edxp-core/jni/main/native_hook/native_hook.h
diff --git a/Core/jni/main/native_hook/riru_hook.cpp b/edxp-core/jni/main/native_hook/riru_hook.cpp
similarity index 100%
rename from Core/jni/main/native_hook/riru_hook.cpp
rename to edxp-core/jni/main/native_hook/riru_hook.cpp
diff --git a/Core/jni/main/native_hook/riru_hook.h b/edxp-core/jni/main/native_hook/riru_hook.h
similarity index 100%
rename from Core/jni/main/native_hook/riru_hook.h
rename to edxp-core/jni/main/native_hook/riru_hook.h
diff --git a/Core/jni/main/yahfa/HookMain.c b/edxp-core/jni/main/yahfa/HookMain.c
similarity index 100%
rename from Core/jni/main/yahfa/HookMain.c
rename to edxp-core/jni/main/yahfa/HookMain.c
diff --git a/Core/jni/main/yahfa/HookMain.h b/edxp-core/jni/main/yahfa/HookMain.h
similarity index 100%
rename from Core/jni/main/yahfa/HookMain.h
rename to edxp-core/jni/main/yahfa/HookMain.h
diff --git a/Core/jni/main/yahfa/common.h b/edxp-core/jni/main/yahfa/common.h
similarity index 100%
rename from Core/jni/main/yahfa/common.h
rename to edxp-core/jni/main/yahfa/common.h
diff --git a/Core/jni/main/yahfa/env.h b/edxp-core/jni/main/yahfa/env.h
similarity index 100%
rename from Core/jni/main/yahfa/env.h
rename to edxp-core/jni/main/yahfa/env.h
diff --git a/Core/jni/main/yahfa/trampoline.c b/edxp-core/jni/main/yahfa/trampoline.c
similarity index 100%
rename from Core/jni/main/yahfa/trampoline.c
rename to edxp-core/jni/main/yahfa/trampoline.c
diff --git a/Core/jni/main/yahfa/trampoline.h b/edxp-core/jni/main/yahfa/trampoline.h
similarity index 100%
rename from Core/jni/main/yahfa/trampoline.h
rename to edxp-core/jni/main/yahfa/trampoline.h
diff --git a/Core/src/main/AndroidManifest.xml b/edxp-core/src/main/AndroidManifest.xml
similarity index 100%
rename from Core/src/main/AndroidManifest.xml
rename to edxp-core/src/main/AndroidManifest.xml
diff --git a/Core/template_override/META-INF/com/google/android/update-binary b/edxp-core/template_override/META-INF/com/google/android/update-binary
similarity index 100%
rename from Core/template_override/META-INF/com/google/android/update-binary
rename to edxp-core/template_override/META-INF/com/google/android/update-binary
diff --git a/Core/template_override/META-INF/com/google/android/updater-script b/edxp-core/template_override/META-INF/com/google/android/updater-script
similarity index 100%
rename from Core/template_override/META-INF/com/google/android/updater-script
rename to edxp-core/template_override/META-INF/com/google/android/updater-script
diff --git a/Core/template_override/common/post-fs-data.sh b/edxp-core/template_override/common/post-fs-data.sh
similarity index 100%
rename from Core/template_override/common/post-fs-data.sh
rename to edxp-core/template_override/common/post-fs-data.sh
diff --git a/Core/template_override/common/service.sh b/edxp-core/template_override/common/service.sh
similarity index 100%
rename from Core/template_override/common/service.sh
rename to edxp-core/template_override/common/service.sh
diff --git a/Core/template_override/common/system.prop b/edxp-core/template_override/common/system.prop
similarity index 100%
rename from Core/template_override/common/system.prop
rename to edxp-core/template_override/common/system.prop
diff --git a/Core/template_override/common/util_functions.sh b/edxp-core/template_override/common/util_functions.sh
similarity index 100%
rename from Core/template_override/common/util_functions.sh
rename to edxp-core/template_override/common/util_functions.sh
diff --git a/Core/template_override/config.sh b/edxp-core/template_override/config.sh
similarity index 100%
rename from Core/template_override/config.sh
rename to edxp-core/template_override/config.sh
diff --git a/Core/template_override/module.prop b/edxp-core/template_override/module.prop
similarity index 100%
rename from Core/template_override/module.prop
rename to edxp-core/template_override/module.prop
diff --git a/Core/template_override/riru_module.prop b/edxp-core/template_override/riru_module.prop
similarity index 100%
rename from Core/template_override/riru_module.prop
rename to edxp-core/template_override/riru_module.prop
diff --git a/Core/template_override/system/framework/edconfig.jar b/edxp-core/template_override/system/framework/edconfig.jar
similarity index 100%
rename from Core/template_override/system/framework/edconfig.jar
rename to edxp-core/template_override/system/framework/edconfig.jar
diff --git a/Core/template_override/system/framework/eddalvikdx.jar b/edxp-core/template_override/system/framework/eddalvikdx.jar
similarity index 100%
rename from Core/template_override/system/framework/eddalvikdx.jar
rename to edxp-core/template_override/system/framework/eddalvikdx.jar
diff --git a/Core/template_override/system/framework/eddexmaker.jar b/edxp-core/template_override/system/framework/eddexmaker.jar
similarity index 100%
rename from Core/template_override/system/framework/eddexmaker.jar
rename to edxp-core/template_override/system/framework/eddexmaker.jar
diff --git a/Core/template_override/system/lib/libwhale.so b/edxp-core/template_override/system/lib/libwhale.so
similarity index 100%
rename from Core/template_override/system/lib/libwhale.so
rename to edxp-core/template_override/system/lib/libwhale.so
diff --git a/Core/template_override/system/lib64/libwhale.so b/edxp-core/template_override/system/lib64/libwhale.so
similarity index 100%
rename from Core/template_override/system/lib64/libwhale.so
rename to edxp-core/template_override/system/lib64/libwhale.so
diff --git a/Core/template_override/system_x86/lib/libwhale.so b/edxp-core/template_override/system_x86/lib/libwhale.so
similarity index 100%
rename from Core/template_override/system_x86/lib/libwhale.so
rename to edxp-core/template_override/system_x86/lib/libwhale.so
diff --git a/Core/template_override/system_x86/lib64/libwhale.so b/edxp-core/template_override/system_x86/lib64/libwhale.so
similarity index 100%
rename from Core/template_override/system_x86/lib64/libwhale.so
rename to edxp-core/template_override/system_x86/lib64/libwhale.so
diff --git a/Bridge/.gitignore b/edxp-yahfa/.gitignore
similarity index 100%
rename from Bridge/.gitignore
rename to edxp-yahfa/.gitignore
diff --git a/edxp-yahfa/build.gradle b/edxp-yahfa/build.gradle
new file mode 100644
index 00000000..f8e0e74f
--- /dev/null
+++ b/edxp-yahfa/build.gradle
@@ -0,0 +1,61 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 28
+
+ defaultConfig {
+ applicationId "com.elderdrivers.riru.edxp.yahfa"
+ 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")
+ }
+
+ android.applicationVariants.all { variant ->
+ def nameCapped = variant.name.capitalize()
+ def nameLowered = variant.name.toLowerCase()
+
+ def makeAndCopyTask = task("makeAndCopy${nameCapped}", type: Jar, dependsOn: "assemble${nameCapped}") {
+ from "build/intermediates/dex/${nameLowered}/mergeDex${nameCapped}/out/"
+ destinationDir file("../edxp-core/template_override/system/framework/")
+ baseName "edxp"
+ }
+ }
+}
\ No newline at end of file
diff --git a/Bridge/libs/framework-stub.jar b/edxp-yahfa/libs/framework-stub.jar
similarity index 100%
rename from Bridge/libs/framework-stub.jar
rename to edxp-yahfa/libs/framework-stub.jar
diff --git a/Bridge/proguard-rules.pro b/edxp-yahfa/proguard-rules.pro
similarity index 100%
rename from Bridge/proguard-rules.pro
rename to edxp-yahfa/proguard-rules.pro
diff --git a/edxp-yahfa/src/main/AndroidManifest.xml b/edxp-yahfa/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..7998b31b
--- /dev/null
+++ b/edxp-yahfa/src/main/AndroidManifest.xml
@@ -0,0 +1 @@
+
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/common/KeepAll.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/common/KeepAll.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/common/KeepAll.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/common/KeepAll.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/common/KeepMembers.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/common/KeepMembers.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/common/KeepMembers.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/common/KeepMembers.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/config/ConfigManager.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/config/ConfigManager.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/config/ConfigManager.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/config/ConfigManager.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/config/InstallerChooser.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/config/InstallerChooser.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/config/InstallerChooser.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/config/InstallerChooser.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/util/ClassLoaderUtils.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/ClassLoaderUtils.java
similarity index 96%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/util/ClassLoaderUtils.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/ClassLoaderUtils.java
index 82528cff..af7dd803 100644
--- a/Bridge/src/main/java/com/elderdrivers/riru/edxp/util/ClassLoaderUtils.java
+++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/ClassLoaderUtils.java
@@ -11,6 +11,7 @@ import java.util.HashSet;
import java.util.List;
import dalvik.system.PathClassLoader;
+import de.robv.android.xposed.XposedHelpers;
public class ClassLoaderUtils {
@@ -91,7 +92,7 @@ public class ClassLoaderUtils {
try {
PathClassLoader baseDexClassLoader = (PathClassLoader) classLoader;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- baseDexClassLoader.addDexPath(DEXPATH);
+ XposedHelpers.callMethod(baseDexClassLoader, "addDexPath", DEXPATH);
} else {
DexUtils.injectDexAtFirst(DEXPATH, baseDexClassLoader);
}
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/util/DexUtils.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/DexUtils.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/util/DexUtils.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/DexUtils.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/util/FileUtils.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/FileUtils.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/util/FileUtils.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/FileUtils.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/util/InlinedMethodCallers.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/InlinedMethodCallers.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/util/InlinedMethodCallers.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/InlinedMethodCallers.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/util/PrebuiltMethodsDeopter.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/PrebuiltMethodsDeopter.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/util/PrebuiltMethodsDeopter.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/PrebuiltMethodsDeopter.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/util/ProcessUtils.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/ProcessUtils.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/util/ProcessUtils.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/ProcessUtils.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/util/Utils.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/Utils.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/util/Utils.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/util/Utils.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/Main.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/Main.java
similarity index 98%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/Main.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/Main.java
index a7b9933d..73edd260 100644
--- a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/Main.java
+++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/Main.java
@@ -7,6 +7,7 @@ import android.os.Process;
import com.elderdrivers.riru.common.KeepAll;
import com.elderdrivers.riru.edxp.BuildConfig;
import com.elderdrivers.riru.edxp.yahfa.core.HookMethodResolver;
+import com.elderdrivers.riru.edxp.yahfa.entry.Router;
import com.elderdrivers.riru.edxp.yahfa.proxy.BlackWhiteListProxy;
import com.elderdrivers.riru.edxp.yahfa.proxy.NormalProxy;
import com.elderdrivers.riru.edxp.util.Utils;
@@ -26,6 +27,7 @@ public class Main implements KeepAll {
static {
init(Build.VERSION.SDK_INT);
HookMethodResolver.init();
+ Router.injectConfig();
}
///////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/config/YahfaEdxpConfig.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/config/YahfaEdxpConfig.java
new file mode 100644
index 00000000..3a27654f
--- /dev/null
+++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/config/YahfaEdxpConfig.java
@@ -0,0 +1,23 @@
+package com.elderdrivers.riru.edxp.yahfa.config;
+
+import com.elderdrivers.riru.edxp.config.EdXpConfig;
+import com.elderdrivers.riru.edxp.config.InstallerChooser;
+import com.elderdrivers.riru.edxp.yahfa.Main;
+import com.elderdrivers.riru.edxp.yahfa.entry.hooker.XposedBlackListHooker;
+
+public class YahfaEdxpConfig implements EdXpConfig {
+ @Override
+ public String getInstallerBaseDir() {
+ return InstallerChooser.INSTALLER_DATA_BASE_DIR;
+ }
+
+ @Override
+ public String getBlackListModulePackageName() {
+ return XposedBlackListHooker.BLACK_LIST_PACKAGE_NAME;
+ }
+
+ @Override
+ public boolean isDynamicModulesMode() {
+ return Main.isDynamicModulesEnabled();
+ }
+}
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
new file mode 100644
index 00000000..a160de32
--- /dev/null
+++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/config/YahfaHookProvider.java
@@ -0,0 +1,33 @@
+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.dexmaker.DexMakerUtils;
+import com.elderdrivers.riru.edxp.yahfa.dexmaker.DynamicBridge;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Member;
+
+import de.robv.android.xposed.XposedBridge;
+
+public class YahfaHookProvider implements HookProvider {
+ @Override
+ public void hookMethod(Member method, XposedBridge.AdditionalHookInfo additionalInfo) {
+ DynamicBridge.hookMethod(method, additionalInfo);
+ }
+
+ @Override
+ public Object invokeOriginalMethod(Member method, Object thisObject, Object[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+ return DynamicBridge.invokeOriginalMethod(method, thisObject, args);
+ }
+
+ @Override
+ public Member findMethodNative(Member hookMethod) {
+ return DexMakerUtils.findMethodNative(hookMethod);
+ }
+
+ @Override
+ public void deoptMethods(String packageName, ClassLoader classLoader) {
+ PrebuiltMethodsDeopter.deoptMethods(packageName, classLoader);
+ }
+}
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/core/HookMain.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/core/HookMain.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/core/HookMain.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/core/HookMain.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/core/HookMethodResolver.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/core/HookMethodResolver.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/core/HookMethodResolver.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/core/HookMethodResolver.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DexLog.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DexLog.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DexLog.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DexLog.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DexMakerUtils.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DexMakerUtils.java
similarity index 94%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DexMakerUtils.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DexMakerUtils.java
index 4083e370..5b56caf3 100644
--- a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DexMakerUtils.java
+++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DexMakerUtils.java
@@ -3,10 +3,13 @@ package com.elderdrivers.riru.edxp.yahfa.dexmaker;
import android.app.AndroidAppHelper;
import android.os.Build;
import android.text.TextUtils;
+import android.util.Log;
import com.elderdrivers.riru.edxp.yahfa.Main;
import com.elderdrivers.riru.edxp.config.ConfigManager;
+import com.elderdrivers.riru.edxp.yahfa.core.HookMain;
+import java.lang.reflect.Member;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.Map;
@@ -243,4 +246,17 @@ public class DexMakerUtils {
}
return "";
}
+
+ public static Member findMethodNative(Member hookMethod) {
+ MethodInfo methodInfo = new MethodInfo(hookMethod);
+ Class declaringClass = methodInfo.getClassForSure();
+ Member reflectMethod = (Member) HookMain.findMethod(
+ declaringClass, methodInfo.methodName, methodInfo.methodSig);
+ if (reflectMethod == null) {
+ DexLog.e("method not found: name="
+ + methodInfo.methodName + ", sig=" + methodInfo.methodSig);
+ reflectMethod = hookMethod;
+ }
+ return reflectMethod;
+ }
}
diff --git a/Bridge/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
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DynamicBridge.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DynamicBridge.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/HookerDexMaker.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/HookerDexMaker.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/HookerDexMaker.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/HookerDexMaker.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/MethodInfo.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/MethodInfo.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/MethodInfo.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/MethodInfo.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/Router.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/Router.java
similarity index 74%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/Router.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/Router.java
index bc931e41..980ca8f5 100644
--- a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/Router.java
+++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/Router.java
@@ -1,7 +1,12 @@
package com.elderdrivers.riru.edxp.yahfa.entry;
+import android.app.AndroidAppHelper;
import android.text.TextUtils;
+import com.elderdrivers.riru.edxp.config.EdXpConfigGlobal;
+import com.elderdrivers.riru.edxp.util.Utils;
+import com.elderdrivers.riru.edxp.yahfa.config.YahfaEdxpConfig;
+import com.elderdrivers.riru.edxp.yahfa.config.YahfaHookProvider;
import com.elderdrivers.riru.edxp.yahfa.core.HookMain;
import com.elderdrivers.riru.edxp.yahfa.dexmaker.DynamicBridge;
import com.elderdrivers.riru.edxp.yahfa.entry.bootstrap.AppBootstrapHookInfo;
@@ -9,7 +14,8 @@ import com.elderdrivers.riru.edxp.yahfa.entry.bootstrap.SysBootstrapHookInfo;
import com.elderdrivers.riru.edxp.yahfa.entry.bootstrap.SysInnerHookInfo;
import com.elderdrivers.riru.edxp.yahfa.entry.bootstrap.WorkAroundHookInfo;
import com.elderdrivers.riru.edxp.yahfa.entry.hooker.SystemMainHooker;
-import com.elderdrivers.riru.edxp.util.Utils;
+
+import java.util.concurrent.atomic.AtomicBoolean;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedInit;
@@ -18,6 +24,9 @@ public class Router {
public volatile static boolean forkCompleted = false;
+ private static volatile AtomicBoolean bootstrapHooked = new AtomicBoolean(false);
+
+
public static void prepare(boolean isSystem) {
// this flag is needed when loadModules
XposedInit.startsSystemServer = isSystem;
@@ -43,6 +52,10 @@ public class Router {
public static void installBootstrapHooks(boolean isSystem) {
// Initialize the Xposed framework
try {
+ if (!bootstrapHooked.compareAndSet(false, true)) {
+ return;
+ }
+ Router.startBootstrapHook(isSystem);
XposedInit.initForZygote(isSystem);
} catch (Throwable t) {
Utils.logE("error during Xposed initialization", t);
@@ -93,4 +106,19 @@ public class Router {
forkCompleted = true;
DynamicBridge.onForkPost();
}
+
+ public static void logD(String prefix) {
+ Utils.logD(String.format("%s: pkg=%s, prc=%s", prefix, AndroidAppHelper.currentPackageName(),
+ AndroidAppHelper.currentProcessName()));
+ }
+
+ public static void logE(String prefix, Throwable throwable) {
+ Utils.logE(String.format("%s: pkg=%s, prc=%s", prefix, AndroidAppHelper.currentPackageName(),
+ AndroidAppHelper.currentProcessName()), throwable);
+ }
+
+ public static void injectConfig() {
+ EdXpConfigGlobal.sConfig = new YahfaEdxpConfig();
+ EdXpConfigGlobal.sHookProvider = new YahfaHookProvider();
+ }
}
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/bootstrap/AppBootstrapHookInfo.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/bootstrap/AppBootstrapHookInfo.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/bootstrap/AppBootstrapHookInfo.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/bootstrap/AppBootstrapHookInfo.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/bootstrap/SysBootstrapHookInfo.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/bootstrap/SysBootstrapHookInfo.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/bootstrap/SysBootstrapHookInfo.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/bootstrap/SysBootstrapHookInfo.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/bootstrap/SysInnerHookInfo.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/bootstrap/SysInnerHookInfo.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/bootstrap/SysInnerHookInfo.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/bootstrap/SysInnerHookInfo.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/bootstrap/WorkAroundHookInfo.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/bootstrap/WorkAroundHookInfo.java
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/bootstrap/WorkAroundHookInfo.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/bootstrap/WorkAroundHookInfo.java
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/HandleBindAppHooker.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/HandleBindAppHooker.java
similarity index 73%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/HandleBindAppHooker.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/HandleBindAppHooker.java
index 5292f0b2..2d3050e7 100644
--- a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/HandleBindAppHooker.java
+++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/HandleBindAppHooker.java
@@ -7,20 +7,18 @@ import android.content.pm.ApplicationInfo;
import android.content.res.CompatibilityInfo;
import com.elderdrivers.riru.common.KeepMembers;
-import com.elderdrivers.riru.edxp.yahfa.Main;
import com.elderdrivers.riru.edxp.util.Utils;
+import com.elderdrivers.riru.edxp.yahfa.Main;
+import com.elderdrivers.riru.edxp.yahfa.entry.Router;
import de.robv.android.xposed.XposedBridge;
+import de.robv.android.xposed.XposedHelpers;
+import de.robv.android.xposed.XposedInit;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
import static com.elderdrivers.riru.edxp.config.InstallerChooser.INSTALLER_PACKAGE_NAME;
-import static com.elderdrivers.riru.edxp.yahfa.entry.hooker.XposedBlackListHooker.BLACK_LIST_PACKAGE_NAME;
import static com.elderdrivers.riru.edxp.util.ClassLoaderUtils.replaceParentClassLoader;
-import static de.robv.android.xposed.XposedHelpers.getObjectField;
-import static de.robv.android.xposed.XposedHelpers.setObjectField;
-import static de.robv.android.xposed.XposedInit.loadedPackagesInProcess;
-import static de.robv.android.xposed.XposedInit.logD;
-import static de.robv.android.xposed.XposedInit.logE;
+import static com.elderdrivers.riru.edxp.yahfa.entry.hooker.XposedBlackListHooker.BLACK_LIST_PACKAGE_NAME;
// normal process initialization (for new Activity, Service, BroadcastReceiver etc.)
public class HandleBindAppHooker implements KeepMembers {
@@ -35,39 +33,39 @@ public class HandleBindAppHooker implements KeepMembers {
return;
}
try {
- logD("ActivityThread#handleBindApplication() starts");
+ Router.logD("ActivityThread#handleBindApplication() starts");
ActivityThread activityThread = (ActivityThread) thiz;
- ApplicationInfo appInfo = (ApplicationInfo) getObjectField(bindData, "appInfo");
+ ApplicationInfo appInfo = (ApplicationInfo) XposedHelpers.getObjectField(bindData, "appInfo");
// save app process name here for later use
- Main.appProcessName = (String) getObjectField(bindData, "processName");
+ Main.appProcessName = (String) XposedHelpers.getObjectField(bindData, "processName");
String reportedPackageName = appInfo.packageName.equals("android") ? "system" : appInfo.packageName;
- Utils.logD("processName=" + Main.appProcessName +
+ Utils.logD("processName=" + Main.appProcessName +
", packageName=" + reportedPackageName + ", appDataDir=" + Main.appDataDir);
if (XposedBlackListHooker.shouldDisableHooks(reportedPackageName)) {
return;
}
- ComponentName instrumentationName = (ComponentName) getObjectField(bindData, "instrumentationName");
+ ComponentName instrumentationName = (ComponentName) XposedHelpers.getObjectField(bindData, "instrumentationName");
if (instrumentationName != null) {
- logD("Instrumentation detected, disabling framework for");
+ Router.logD("Instrumentation detected, disabling framework for");
XposedBridge.disableHooks = true;
return;
}
- CompatibilityInfo compatInfo = (CompatibilityInfo) getObjectField(bindData, "compatInfo");
+ CompatibilityInfo compatInfo = (CompatibilityInfo) XposedHelpers.getObjectField(bindData, "compatInfo");
if (appInfo.sourceDir == null) {
return;
}
- setObjectField(activityThread, "mBoundApplication", bindData);
- loadedPackagesInProcess.add(reportedPackageName);
+ XposedHelpers.setObjectField(activityThread, "mBoundApplication", bindData);
+ XposedInit.loadedPackagesInProcess.add(reportedPackageName);
LoadedApk loadedApk = activityThread.getPackageInfoNoCheck(appInfo, compatInfo);
replaceParentClassLoader(loadedApk.getClassLoader());
XC_LoadPackage.LoadPackageParam lpparam = new XC_LoadPackage.LoadPackageParam(XposedBridge.sLoadedPackageCallbacks);
lpparam.packageName = reportedPackageName;
- lpparam.processName = (String) getObjectField(bindData, "processName");
+ lpparam.processName = (String) XposedHelpers.getObjectField(bindData, "processName");
lpparam.classLoader = loadedApk.getClassLoader();
lpparam.appInfo = appInfo;
lpparam.isFirstApplication = true;
@@ -80,7 +78,7 @@ public class HandleBindAppHooker implements KeepMembers {
XposedBlackListHooker.hook(lpparam.classLoader);
}
} catch (Throwable t) {
- logE("error when hooking bindApp", t);
+ Router.logE("error when hooking bindApp", t);
} finally {
backup(thiz, bindData);
}
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/LoadedApkConstructorHooker.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/LoadedApkConstructorHooker.java
similarity index 77%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/LoadedApkConstructorHooker.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/LoadedApkConstructorHooker.java
index 44302a9e..ce2f7605 100644
--- a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/LoadedApkConstructorHooker.java
+++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/LoadedApkConstructorHooker.java
@@ -8,16 +8,14 @@ import android.content.res.CompatibilityInfo;
import android.util.Log;
import com.elderdrivers.riru.common.KeepMembers;
+import com.elderdrivers.riru.edxp.yahfa.entry.Router;
import de.robv.android.xposed.XposedBridge;
+import de.robv.android.xposed.XposedHelpers;
+import de.robv.android.xposed.XposedInit;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
import static com.elderdrivers.riru.edxp.util.ClassLoaderUtils.replaceParentClassLoader;
-import static de.robv.android.xposed.XposedHelpers.getBooleanField;
-import static de.robv.android.xposed.XposedHelpers.getObjectField;
-import static de.robv.android.xposed.XposedInit.loadedPackagesInProcess;
-import static de.robv.android.xposed.XposedInit.logD;
-import static de.robv.android.xposed.XposedInit.logE;
// when a package is loaded for an existing process, trigger the callbacks as well
// ed: remove resources related hooking
@@ -40,40 +38,40 @@ public class LoadedApkConstructorHooker implements KeepMembers {
return;
}
- logD("LoadedApk# starts");
+ Router.logD("LoadedApk# starts");
backup(thiz, activityThread, aInfo, compatInfo, baseLoader, securityViolation,
includeCode, registerPackage);
try {
LoadedApk loadedApk = (LoadedApk) thiz;
String packageName = loadedApk.getPackageName();
- Object mAppDir = getObjectField(thiz, "mAppDir");
- logD("LoadedApk# ends: " + mAppDir);
+ Object mAppDir = XposedHelpers.getObjectField(thiz, "mAppDir");
+ Router.logD("LoadedApk# ends: " + mAppDir);
if (XposedBlackListHooker.shouldDisableHooks(packageName)) {
return;
}
if (packageName.equals("android")) {
- logD("LoadedApk# is android, skip: " + mAppDir);
+ Router.logD("LoadedApk# is android, skip: " + mAppDir);
return;
}
// mIncludeCode checking should go ahead of loadedPackagesInProcess added checking
- if (!getBooleanField(loadedApk, "mIncludeCode")) {
- logD("LoadedApk# mIncludeCode == false: " + mAppDir);
+ if (!XposedHelpers.getBooleanField(loadedApk, "mIncludeCode")) {
+ Router.logD("LoadedApk# mIncludeCode == false: " + mAppDir);
return;
}
- if (!loadedPackagesInProcess.add(packageName)) {
- logD("LoadedApk# has been loaded before, skip: " + mAppDir);
+ if (!XposedInit.loadedPackagesInProcess.add(packageName)) {
+ Router.logD("LoadedApk# has been loaded before, skip: " + mAppDir);
return;
}
// OnePlus magic...
if (Log.getStackTraceString(new Throwable()).
contains("android.app.ActivityThread$ApplicationThread.schedulePreload")) {
- logD("LoadedApk# maybe oneplus's custom opt, skip");
+ Router.logD("LoadedApk# maybe oneplus's custom opt, skip");
return;
}
@@ -87,7 +85,7 @@ public class LoadedApkConstructorHooker implements KeepMembers {
lpparam.isFirstApplication = false;
XC_LoadPackage.callAll(lpparam);
} catch (Throwable t) {
- logE("error when hooking LoadedApk.", t);
+ Router.logE("error when hooking LoadedApk.", t);
}
}
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/OnePlusWorkAroundHooker.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/OnePlusWorkAroundHooker.java
similarity index 93%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/OnePlusWorkAroundHooker.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/OnePlusWorkAroundHooker.java
index 40bfe6ab..87cda6b2 100644
--- a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/OnePlusWorkAroundHooker.java
+++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/OnePlusWorkAroundHooker.java
@@ -1,13 +1,11 @@
package com.elderdrivers.riru.edxp.yahfa.entry.hooker;
import com.elderdrivers.riru.common.KeepMembers;
-import com.elderdrivers.riru.edxp.yahfa.entry.Router;
import com.elderdrivers.riru.edxp.yahfa.Main;
+import com.elderdrivers.riru.edxp.yahfa.entry.Router;
import de.robv.android.xposed.XposedBridge;
-import static de.robv.android.xposed.XposedInit.logD;
-
/**
* On OnePlus stock roms (Android Pie), {@link dalvik.system.BaseDexClassLoader#findClass(String)}
* will open /dev/binder to communicate with PackageManagerService to check whether
@@ -33,7 +31,7 @@ public class OnePlusWorkAroundHooker implements KeepMembers {
if (XposedBridge.disableHooks || Router.forkCompleted) {
return backup(type, packageName);
}
- logD("BaseDexClassLoader#inCompatConfigList() starts");
+ Router.logD("BaseDexClassLoader#inCompatConfigList() starts");
return false;
}
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/StartBootstrapServicesHooker.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/StartBootstrapServicesHooker.java
similarity index 91%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/StartBootstrapServicesHooker.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/StartBootstrapServicesHooker.java
index 0156eebe..7bc1c542 100644
--- a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/StartBootstrapServicesHooker.java
+++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/StartBootstrapServicesHooker.java
@@ -3,17 +3,17 @@ package com.elderdrivers.riru.edxp.yahfa.entry.hooker;
import android.os.Build;
import com.elderdrivers.riru.common.KeepMembers;
+import com.elderdrivers.riru.edxp.yahfa.entry.Router;
import de.robv.android.xposed.XC_MethodReplacement;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
+import de.robv.android.xposed.XposedInit;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
import static com.elderdrivers.riru.edxp.util.ClassLoaderUtils.replaceParentClassLoader;
import static com.elderdrivers.riru.edxp.util.Utils.logD;
import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
-import static de.robv.android.xposed.XposedInit.loadedPackagesInProcess;
-import static de.robv.android.xposed.XposedInit.logE;
public class StartBootstrapServicesHooker implements KeepMembers {
public static String className = "com.android.server.SystemServer";
@@ -30,7 +30,7 @@ public class StartBootstrapServicesHooker implements KeepMembers {
logD("SystemServer#startBootstrapServices() starts");
try {
- loadedPackagesInProcess.add("android");
+ XposedInit.loadedPackagesInProcess.add("android");
replaceParentClassLoader(SystemMainHooker.systemServerCL);
@@ -54,7 +54,7 @@ public class StartBootstrapServicesHooker implements KeepMembers {
} catch (XposedHelpers.ClassNotFoundError | NoSuchMethodError ignored) {
}
} catch (Throwable t) {
- logE("error when hooking startBootstrapServices", t);
+ Router.logE("error when hooking startBootstrapServices", t);
} finally {
backup(systemServer);
}
diff --git a/Bridge/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
similarity index 85%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/SystemMainHooker.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/SystemMainHooker.java
index 9941ee74..92546c91 100644
--- a/Bridge/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,14 +3,11 @@ package com.elderdrivers.riru.edxp.yahfa.entry.hooker;
import android.app.ActivityThread;
import com.elderdrivers.riru.common.KeepMembers;
-import com.elderdrivers.riru.edxp.yahfa.entry.Router;
import com.elderdrivers.riru.edxp.util.PrebuiltMethodsDeopter;
+import com.elderdrivers.riru.edxp.yahfa.entry.Router;
import de.robv.android.xposed.XposedBridge;
-import static de.robv.android.xposed.XposedInit.logD;
-import static de.robv.android.xposed.XposedInit.logE;
-
// system_server initialization
// ed: only support sdk >= 21 for now
@@ -26,7 +23,7 @@ public class SystemMainHooker implements KeepMembers {
if (XposedBridge.disableHooks) {
return backup();
}
- logD("ActivityThread#systemMain() starts");
+ Router.logD("ActivityThread#systemMain() starts");
ActivityThread activityThread = backup();
try {
// get system_server classLoader
@@ -35,7 +32,7 @@ public class SystemMainHooker implements KeepMembers {
PrebuiltMethodsDeopter.deoptSystemServerMethods(systemServerCL);
Router.startSystemServerHook();
} catch (Throwable t) {
- logE("error when hooking systemMain", t);
+ Router.logE("error when hooking systemMain", t);
}
return activityThread;
}
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/XposedBlackListHooker.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/XposedBlackListHooker.java
similarity index 94%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/XposedBlackListHooker.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/XposedBlackListHooker.java
index 1fe6572a..7261f63b 100644
--- a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/XposedBlackListHooker.java
+++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/XposedBlackListHooker.java
@@ -17,10 +17,10 @@ import java.util.Set;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XSharedPreferences;
import de.robv.android.xposed.XposedBridge;
+import de.robv.android.xposed.XposedHelpers;
import static com.elderdrivers.riru.edxp.config.InstallerChooser.INSTALLER_PACKAGE_NAME;
import static com.elderdrivers.riru.edxp.util.FileUtils.IS_USING_PROTECTED_STORAGE;
-import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
public class XposedBlackListHooker {
@@ -62,7 +62,7 @@ public class XposedBlackListHooker {
return;
}
try {
- findAndHookMethod(ContextWrapper.class, "getSharedPreferences", String.class, int.class, new XC_MethodHook() {
+ XposedHelpers.findAndHookMethod(ContextWrapper.class, "getSharedPreferences", String.class, int.class, new XC_MethodHook() {
@TargetApi(Build.VERSION_CODES.N)
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
diff --git a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/XposedInstallerHooker.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/XposedInstallerHooker.java
similarity index 76%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/XposedInstallerHooker.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/XposedInstallerHooker.java
index 17ca675d..07931306 100644
--- a/Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/XposedInstallerHooker.java
+++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/hooker/XposedInstallerHooker.java
@@ -9,31 +9,27 @@ import java.io.IOException;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XC_MethodReplacement;
import de.robv.android.xposed.XposedBridge;
+import de.robv.android.xposed.XposedHelpers;
import static com.elderdrivers.riru.edxp.config.InstallerChooser.LEGACY_INSTALLER_PACKAGE_NAME;
-import static de.robv.android.xposed.XposedHelpers.callStaticMethod;
-import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
-import static de.robv.android.xposed.XposedHelpers.findClass;
-import static de.robv.android.xposed.XposedHelpers.getObjectField;
-import static de.robv.android.xposed.XposedHelpers.setObjectField;
public class XposedInstallerHooker {
public static void hookXposedInstaller(ClassLoader classLoader) {
try {
final String xposedAppClass = LEGACY_INSTALLER_PACKAGE_NAME + ".XposedApp";
- final Class InstallZipUtil = findClass(LEGACY_INSTALLER_PACKAGE_NAME
+ final Class InstallZipUtil = XposedHelpers.findClass(LEGACY_INSTALLER_PACKAGE_NAME
+ ".util.InstallZipUtil", classLoader);
- findAndHookMethod(xposedAppClass, classLoader, "getActiveXposedVersion",
+ XposedHelpers.findAndHookMethod(xposedAppClass, classLoader, "getActiveXposedVersion",
XC_MethodReplacement.returnConstant(XposedBridge.getXposedVersion()));
- findAndHookMethod(xposedAppClass, classLoader,
+ XposedHelpers.findAndHookMethod(xposedAppClass, classLoader,
"reloadXposedProp", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
Utils.logD("before reloadXposedProp...");
final String propFieldName = "mXposedProp";
final Object thisObject = param.thisObject;
- if (getObjectField(thisObject, propFieldName) != null) {
+ if (XposedHelpers.getObjectField(thisObject, propFieldName) != null) {
param.setResult(null);
Utils.logD("reloadXposedProp already done, skip...");
return;
@@ -42,10 +38,10 @@ public class XposedInstallerHooker {
FileInputStream is = null;
try {
is = new FileInputStream(file);
- Object props = callStaticMethod(InstallZipUtil,
+ Object props = XposedHelpers.callStaticMethod(InstallZipUtil,
"parseXposedProp", is);
synchronized (thisObject) {
- setObjectField(thisObject, propFieldName, props);
+ XposedHelpers.setObjectField(thisObject, propFieldName, props);
}
Utils.logD("reloadXposedProp done...");
param.setResult(null);
diff --git a/Bridge/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
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/BlackWhiteListProxy.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/BlackWhiteListProxy.java
diff --git a/Bridge/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
similarity index 100%
rename from Bridge/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/NormalProxy.java
rename to edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/NormalProxy.java
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 9a4163a4..4e974715 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
old mode 100644
new mode 100755
diff --git a/hiddenapistubs/.gitignore b/hiddenapi-stubs/.gitignore
similarity index 100%
rename from hiddenapistubs/.gitignore
rename to hiddenapi-stubs/.gitignore
diff --git a/hiddenapistubs/build.gradle b/hiddenapi-stubs/build.gradle
similarity index 100%
rename from hiddenapistubs/build.gradle
rename to hiddenapi-stubs/build.gradle
diff --git a/hiddenapistubs/src/main/AndroidManifest.xml b/hiddenapi-stubs/src/main/AndroidManifest.xml
similarity index 100%
rename from hiddenapistubs/src/main/AndroidManifest.xml
rename to hiddenapi-stubs/src/main/AndroidManifest.xml
diff --git a/hiddenapistubs/src/main/java/android/app/ActivityThread.java b/hiddenapi-stubs/src/main/java/android/app/ActivityThread.java
similarity index 100%
rename from hiddenapistubs/src/main/java/android/app/ActivityThread.java
rename to hiddenapi-stubs/src/main/java/android/app/ActivityThread.java
diff --git a/hiddenapistubs/src/main/java/android/app/LoadedApk.java b/hiddenapi-stubs/src/main/java/android/app/LoadedApk.java
similarity index 100%
rename from hiddenapistubs/src/main/java/android/app/LoadedApk.java
rename to hiddenapi-stubs/src/main/java/android/app/LoadedApk.java
diff --git a/hiddenapistubs/src/main/java/android/content/pm/PackageParser.java b/hiddenapi-stubs/src/main/java/android/content/pm/PackageParser.java
similarity index 100%
rename from hiddenapistubs/src/main/java/android/content/pm/PackageParser.java
rename to hiddenapi-stubs/src/main/java/android/content/pm/PackageParser.java
diff --git a/hiddenapistubs/src/main/java/android/content/res/AssetManager.java b/hiddenapi-stubs/src/main/java/android/content/res/AssetManager.java
similarity index 100%
rename from hiddenapistubs/src/main/java/android/content/res/AssetManager.java
rename to hiddenapi-stubs/src/main/java/android/content/res/AssetManager.java
diff --git a/hiddenapistubs/src/main/java/android/content/res/CompatibilityInfo.java b/hiddenapi-stubs/src/main/java/android/content/res/CompatibilityInfo.java
similarity index 100%
rename from hiddenapistubs/src/main/java/android/content/res/CompatibilityInfo.java
rename to hiddenapi-stubs/src/main/java/android/content/res/CompatibilityInfo.java
diff --git a/hiddenapistubs/src/main/java/android/content/res/Resources.java b/hiddenapi-stubs/src/main/java/android/content/res/Resources.java
similarity index 100%
rename from hiddenapistubs/src/main/java/android/content/res/Resources.java
rename to hiddenapi-stubs/src/main/java/android/content/res/Resources.java
diff --git a/hiddenapistubs/src/main/java/android/content/res/TypedArray.java b/hiddenapi-stubs/src/main/java/android/content/res/TypedArray.java
similarity index 100%
rename from hiddenapistubs/src/main/java/android/content/res/TypedArray.java
rename to hiddenapi-stubs/src/main/java/android/content/res/TypedArray.java
diff --git a/hiddenapistubs/src/main/java/android/os/SELinux.java b/hiddenapi-stubs/src/main/java/android/os/SELinux.java
similarity index 100%
rename from hiddenapistubs/src/main/java/android/os/SELinux.java
rename to hiddenapi-stubs/src/main/java/android/os/SELinux.java
diff --git a/hiddenapistubs/src/main/java/android/os/ServiceManager.java b/hiddenapi-stubs/src/main/java/android/os/ServiceManager.java
similarity index 100%
rename from hiddenapistubs/src/main/java/android/os/ServiceManager.java
rename to hiddenapi-stubs/src/main/java/android/os/ServiceManager.java
diff --git a/hiddenapistubs/src/main/java/com/android/internal/os/RuntimeInit.java b/hiddenapi-stubs/src/main/java/com/android/internal/os/RuntimeInit.java
similarity index 100%
rename from hiddenapistubs/src/main/java/com/android/internal/os/RuntimeInit.java
rename to hiddenapi-stubs/src/main/java/com/android/internal/os/RuntimeInit.java
diff --git a/hiddenapistubs/src/main/java/com/android/internal/os/ZygoteInit.java b/hiddenapi-stubs/src/main/java/com/android/internal/os/ZygoteInit.java
similarity index 100%
rename from hiddenapistubs/src/main/java/com/android/internal/os/ZygoteInit.java
rename to hiddenapi-stubs/src/main/java/com/android/internal/os/ZygoteInit.java
diff --git a/hiddenapistubs/src/main/java/com/android/internal/util/XmlUtils.java b/hiddenapi-stubs/src/main/java/com/android/internal/util/XmlUtils.java
similarity index 100%
rename from hiddenapistubs/src/main/java/com/android/internal/util/XmlUtils.java
rename to hiddenapi-stubs/src/main/java/com/android/internal/util/XmlUtils.java
diff --git a/hiddenapistubs/src/main/java/dalvik/system/BaseDexClassLoader.java b/hiddenapi-stubs/src/main/java/dalvik/system/BaseDexClassLoader.java
similarity index 100%
rename from hiddenapistubs/src/main/java/dalvik/system/BaseDexClassLoader.java
rename to hiddenapi-stubs/src/main/java/dalvik/system/BaseDexClassLoader.java
diff --git a/hiddenapistubs/src/main/java/xposed/dummy/XResourcesSuperClass.java b/hiddenapi-stubs/src/main/java/xposed/dummy/XResourcesSuperClass.java
similarity index 100%
rename from hiddenapistubs/src/main/java/xposed/dummy/XResourcesSuperClass.java
rename to hiddenapi-stubs/src/main/java/xposed/dummy/XResourcesSuperClass.java
diff --git a/hiddenapistubs/src/main/java/xposed/dummy/XTypedArraySuperClass.java b/hiddenapi-stubs/src/main/java/xposed/dummy/XTypedArraySuperClass.java
similarity index 100%
rename from hiddenapistubs/src/main/java/xposed/dummy/XTypedArraySuperClass.java
rename to hiddenapi-stubs/src/main/java/xposed/dummy/XTypedArraySuperClass.java
diff --git a/settings.gradle b/settings.gradle
index d61f9317..0608b9f8 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1 @@
-include ':Core', ':Bridge', ':hiddenapistubs', ':dexmaker', ':dalvikdx'
\ No newline at end of file
+include ':edxp-core', ':xposed-bridge', ':hiddenapi-stubs', ':dexmaker', ':dalvikdx', ':edxp-yahfa'
\ No newline at end of file
diff --git a/xposed-bridge/.gitignore b/xposed-bridge/.gitignore
new file mode 100644
index 00000000..796b96d1
--- /dev/null
+++ b/xposed-bridge/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/xposed-bridge/build.gradle b/xposed-bridge/build.gradle
new file mode 100644
index 00000000..6ae23f5d
--- /dev/null
+++ b/xposed-bridge/build.gradle
@@ -0,0 +1,54 @@
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion 28
+ buildToolsVersion '28.0.3'
+
+ defaultConfig {
+ multiDexEnabled false
+ minSdkVersion 23
+ }
+
+ sourceSets {
+ main {
+ java.srcDirs += ['src/main/apacheCommonsLang']
+ }
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled true
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+// Make sure that hiddenapistubs are placed before the Android SDK in xposed-bridge.iml
+// as there doesn't seem to be any way to configure this in Android Studio.
+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
+ }
+}
+
+dependencies {
+ compileOnly files("libs/framework-stub.jar")
+ compileOnly project(':dexmaker')
+}
+
+afterEvaluate {
+
+ tasks.withType(JavaCompile) {
+ options.compilerArgs.add("-Xbootclasspath/p:${projectDir.absolutePath}/libs/framework-stub.jar")
+ }
+
+}
\ No newline at end of file
diff --git a/xposed-bridge/libs/framework-stub.jar b/xposed-bridge/libs/framework-stub.jar
new file mode 100644
index 00000000..36cd86b3
Binary files /dev/null and b/xposed-bridge/libs/framework-stub.jar differ
diff --git a/xposed-bridge/proguard-rules.pro b/xposed-bridge/proguard-rules.pro
new file mode 100644
index 00000000..e72d685a
--- /dev/null
+++ b/xposed-bridge/proguard-rules.pro
@@ -0,0 +1,25 @@
+# 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.** { *; }
\ No newline at end of file
diff --git a/Bridge/src/main/AndroidManifest.xml b/xposed-bridge/src/main/AndroidManifest.xml
similarity index 100%
rename from Bridge/src/main/AndroidManifest.xml
rename to xposed-bridge/src/main/AndroidManifest.xml
diff --git a/Bridge/src/main/apacheCommonsLang/LICENSE.txt b/xposed-bridge/src/main/apacheCommonsLang/LICENSE.txt
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/LICENSE.txt
rename to xposed-bridge/src/main/apacheCommonsLang/LICENSE.txt
diff --git a/Bridge/src/main/apacheCommonsLang/MODIFICATIONS.txt b/xposed-bridge/src/main/apacheCommonsLang/MODIFICATIONS.txt
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/MODIFICATIONS.txt
rename to xposed-bridge/src/main/apacheCommonsLang/MODIFICATIONS.txt
diff --git a/Bridge/src/main/apacheCommonsLang/NOTICE.txt b/xposed-bridge/src/main/apacheCommonsLang/NOTICE.txt
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/NOTICE.txt
rename to xposed-bridge/src/main/apacheCommonsLang/NOTICE.txt
diff --git a/Bridge/src/main/apacheCommonsLang/RELEASE-NOTES.txt b/xposed-bridge/src/main/apacheCommonsLang/RELEASE-NOTES.txt
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/RELEASE-NOTES.txt
rename to xposed-bridge/src/main/apacheCommonsLang/RELEASE-NOTES.txt
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/ArrayUtils.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/ArrayUtils.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/ArrayUtils.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/ArrayUtils.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/CharSequenceUtils.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/CharSequenceUtils.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/CharSequenceUtils.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/CharSequenceUtils.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/CharUtils.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/CharUtils.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/CharUtils.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/CharUtils.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/ClassUtils.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/ClassUtils.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/ClassUtils.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/ClassUtils.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/JavaVersion.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/JavaVersion.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/JavaVersion.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/JavaVersion.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/ObjectUtils.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/ObjectUtils.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/ObjectUtils.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/ObjectUtils.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/StringUtils.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/StringUtils.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/StringUtils.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/StringUtils.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/SystemUtils.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/SystemUtils.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/SystemUtils.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/SystemUtils.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/Validate.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/Validate.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/Validate.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/Validate.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/Builder.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/Builder.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/Builder.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/Builder.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/CompareToBuilder.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/CompareToBuilder.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/CompareToBuilder.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/CompareToBuilder.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/EqualsBuilder.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/EqualsBuilder.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/EqualsBuilder.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/EqualsBuilder.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/HashCodeBuilder.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/HashCodeBuilder.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/HashCodeBuilder.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/HashCodeBuilder.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/IDKey.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/IDKey.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/IDKey.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/IDKey.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/ReflectionToStringBuilder.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/ReflectionToStringBuilder.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/ReflectionToStringBuilder.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/ReflectionToStringBuilder.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/ToStringBuilder.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/ToStringBuilder.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/ToStringBuilder.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/ToStringBuilder.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/ToStringStyle.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/ToStringStyle.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/ToStringStyle.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/ToStringStyle.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/package.html b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/package.html
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/package.html
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/builder/package.html
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/exception/CloneFailedException.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/exception/CloneFailedException.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/exception/CloneFailedException.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/exception/CloneFailedException.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/exception/package.html b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/exception/package.html
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/exception/package.html
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/exception/package.html
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/mutable/Mutable.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/mutable/Mutable.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/mutable/Mutable.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/mutable/Mutable.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/mutable/MutableInt.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/mutable/MutableInt.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/mutable/MutableInt.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/mutable/MutableInt.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/mutable/package.html b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/mutable/package.html
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/mutable/package.html
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/mutable/package.html
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/overview.html b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/overview.html
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/overview.html
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/overview.html
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/package.html b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/package.html
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/package.html
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/package.html
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/reflect/MemberUtils.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/reflect/MemberUtils.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/reflect/MemberUtils.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/reflect/MemberUtils.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/reflect/MethodUtils.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/reflect/MethodUtils.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/reflect/MethodUtils.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/reflect/MethodUtils.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/reflect/package.html b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/reflect/package.html
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/reflect/package.html
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/reflect/package.html
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/tuple/ImmutablePair.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/tuple/ImmutablePair.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/tuple/ImmutablePair.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/tuple/ImmutablePair.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/tuple/Pair.java b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/tuple/Pair.java
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/tuple/Pair.java
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/tuple/Pair.java
diff --git a/Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/tuple/package.html b/xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/tuple/package.html
similarity index 100%
rename from Bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/tuple/package.html
rename to xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/tuple/package.html
diff --git a/Bridge/src/main/java/android/app/AndroidAppHelper.java b/xposed-bridge/src/main/java/android/app/AndroidAppHelper.java
similarity index 100%
rename from Bridge/src/main/java/android/app/AndroidAppHelper.java
rename to xposed-bridge/src/main/java/android/app/AndroidAppHelper.java
diff --git a/Bridge/src/main/java/android/app/package-info.java b/xposed-bridge/src/main/java/android/app/package-info.java
similarity index 100%
rename from Bridge/src/main/java/android/app/package-info.java
rename to xposed-bridge/src/main/java/android/app/package-info.java
diff --git a/Bridge/src/main/java/android/content/res/XModuleResources.java b/xposed-bridge/src/main/java/android/content/res/XModuleResources.java
similarity index 100%
rename from Bridge/src/main/java/android/content/res/XModuleResources.java
rename to xposed-bridge/src/main/java/android/content/res/XModuleResources.java
diff --git a/Bridge/src/main/java/android/content/res/XResForwarder.java b/xposed-bridge/src/main/java/android/content/res/XResForwarder.java
similarity index 100%
rename from Bridge/src/main/java/android/content/res/XResForwarder.java
rename to xposed-bridge/src/main/java/android/content/res/XResForwarder.java
diff --git a/Bridge/src/main/java/android/content/res/XResources.java b/xposed-bridge/src/main/java/android/content/res/XResources.java
similarity index 100%
rename from Bridge/src/main/java/android/content/res/XResources.java
rename to xposed-bridge/src/main/java/android/content/res/XResources.java
diff --git a/Bridge/src/main/java/android/content/res/package-info.java b/xposed-bridge/src/main/java/android/content/res/package-info.java
similarity index 100%
rename from Bridge/src/main/java/android/content/res/package-info.java
rename to xposed-bridge/src/main/java/android/content/res/package-info.java
diff --git a/xposed-bridge/src/main/java/com/elderdrivers/riru/edxp/config/EdXpConfig.java b/xposed-bridge/src/main/java/com/elderdrivers/riru/edxp/config/EdXpConfig.java
new file mode 100644
index 00000000..9ec66244
--- /dev/null
+++ b/xposed-bridge/src/main/java/com/elderdrivers/riru/edxp/config/EdXpConfig.java
@@ -0,0 +1,12 @@
+package com.elderdrivers.riru.edxp.config;
+
+public interface EdXpConfig {
+
+
+ String getInstallerBaseDir();
+
+ String getBlackListModulePackageName();
+
+ boolean isDynamicModulesMode();
+
+}
diff --git a/xposed-bridge/src/main/java/com/elderdrivers/riru/edxp/config/EdXpConfigGlobal.java b/xposed-bridge/src/main/java/com/elderdrivers/riru/edxp/config/EdXpConfigGlobal.java
new file mode 100644
index 00000000..6fc716b2
--- /dev/null
+++ b/xposed-bridge/src/main/java/com/elderdrivers/riru/edxp/config/EdXpConfigGlobal.java
@@ -0,0 +1,72 @@
+package com.elderdrivers.riru.edxp.config;
+
+import com.elderdrivers.riru.edxp.hook.HookProvider;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Member;
+
+import de.robv.android.xposed.XposedBridge;
+
+public class EdXpConfigGlobal {
+
+ public static volatile EdXpConfig sConfig;
+ public static volatile HookProvider sHookProvider;
+
+ public static EdXpConfig getConfig() {
+ if (sConfig == null) {
+ return defaultConfig;
+ }
+ return sConfig;
+ }
+
+ public static HookProvider getHookProvider() {
+ if (sHookProvider == null) {
+ return defaultHookProvider;
+ }
+ return sHookProvider;
+ }
+
+
+ private static final EdXpConfig defaultConfig = new EdXpConfig() {
+
+ @Override
+ public String getInstallerBaseDir() {
+ return "";
+ }
+
+ @Override
+ public String getBlackListModulePackageName() {
+ return "";
+ }
+
+ @Override
+ public boolean isDynamicModulesMode() {
+ return false;
+ }
+ };
+
+
+ private static final HookProvider defaultHookProvider = new HookProvider() {
+
+ @Override
+ public void hookMethod(Member method, XposedBridge.AdditionalHookInfo additionalInfo) {
+
+ }
+
+ @Override
+ public Object invokeOriginalMethod(Member method, Object thisObject, Object[] args)
+ throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+ return null;
+ }
+
+ @Override
+ public Member findMethodNative(Member hookMethod) {
+ return hookMethod;
+ }
+
+ @Override
+ public void deoptMethods(String packageName, ClassLoader classLoader) {
+
+ }
+ };
+}
diff --git a/xposed-bridge/src/main/java/com/elderdrivers/riru/edxp/hook/HookProvider.java b/xposed-bridge/src/main/java/com/elderdrivers/riru/edxp/hook/HookProvider.java
new file mode 100644
index 00000000..f2f553f0
--- /dev/null
+++ b/xposed-bridge/src/main/java/com/elderdrivers/riru/edxp/hook/HookProvider.java
@@ -0,0 +1,17 @@
+package com.elderdrivers.riru.edxp.hook;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Member;
+
+import de.robv.android.xposed.XposedBridge;
+
+public interface HookProvider {
+
+ void hookMethod(Member method, XposedBridge.AdditionalHookInfo additionalInfo);
+
+ Object invokeOriginalMethod(Member method, Object thisObject, Object[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException;
+
+ Member findMethodNative(Member hookMethod);
+
+ void deoptMethods(String packageName, ClassLoader classLoader);
+}
diff --git a/Bridge/src/main/java/de/robv/android/xposed/DexCreator.java b/xposed-bridge/src/main/java/de/robv/android/xposed/DexCreator.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/DexCreator.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/DexCreator.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/IXposedHookCmdInit.java b/xposed-bridge/src/main/java/de/robv/android/xposed/IXposedHookCmdInit.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/IXposedHookCmdInit.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/IXposedHookCmdInit.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/IXposedHookInitPackageResources.java b/xposed-bridge/src/main/java/de/robv/android/xposed/IXposedHookInitPackageResources.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/IXposedHookInitPackageResources.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/IXposedHookInitPackageResources.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/IXposedHookLoadPackage.java b/xposed-bridge/src/main/java/de/robv/android/xposed/IXposedHookLoadPackage.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/IXposedHookLoadPackage.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/IXposedHookLoadPackage.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/IXposedHookZygoteInit.java b/xposed-bridge/src/main/java/de/robv/android/xposed/IXposedHookZygoteInit.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/IXposedHookZygoteInit.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/IXposedHookZygoteInit.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/IXposedMod.java b/xposed-bridge/src/main/java/de/robv/android/xposed/IXposedMod.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/IXposedMod.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/IXposedMod.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/SELinuxHelper.java b/xposed-bridge/src/main/java/de/robv/android/xposed/SELinuxHelper.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/SELinuxHelper.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/SELinuxHelper.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/XC_MethodHook.java b/xposed-bridge/src/main/java/de/robv/android/xposed/XC_MethodHook.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/XC_MethodHook.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/XC_MethodHook.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/XC_MethodReplacement.java b/xposed-bridge/src/main/java/de/robv/android/xposed/XC_MethodReplacement.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/XC_MethodReplacement.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/XC_MethodReplacement.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/XSharedPreferences.java b/xposed-bridge/src/main/java/de/robv/android/xposed/XSharedPreferences.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/XSharedPreferences.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/XSharedPreferences.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/XposedBridge.java b/xposed-bridge/src/main/java/de/robv/android/xposed/XposedBridge.java
similarity index 95%
rename from Bridge/src/main/java/de/robv/android/xposed/XposedBridge.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/XposedBridge.java
index 95758d63..25abdc04 100644
--- a/Bridge/src/main/java/de/robv/android/xposed/XposedBridge.java
+++ b/xposed-bridge/src/main/java/de/robv/android/xposed/XposedBridge.java
@@ -3,9 +3,7 @@ package de.robv.android.xposed;
import android.annotation.SuppressLint;
import android.util.Log;
-import com.elderdrivers.riru.edxp.yahfa.core.HookMain;
-import com.elderdrivers.riru.edxp.yahfa.dexmaker.DynamicBridge;
-import com.elderdrivers.riru.edxp.yahfa.dexmaker.MethodInfo;
+import com.elderdrivers.riru.edxp.config.EdXpConfigGlobal;
import java.io.File;
import java.io.IOException;
@@ -198,15 +196,7 @@ public final class XposedBridge {
}
AdditionalHookInfo additionalInfo = new AdditionalHookInfo(callbacks, parameterTypes, returnType);
- MethodInfo methodInfo = new MethodInfo(hookMethod);
- declaringClass = methodInfo.getClassForSure();
- Member reflectMethod = (Member) HookMain.findMethod(
- declaringClass, methodInfo.methodName, methodInfo.methodSig);
- if (reflectMethod == null) {
- Log.e(TAG, "method not found: name="
- + methodInfo.methodName + ", sig=" + methodInfo.methodSig);
- reflectMethod = hookMethod;
- }
+ Member reflectMethod = EdXpConfigGlobal.getHookProvider().findMethodNative(hookMethod);
hookMethodNative(reflectMethod, declaringClass, slot, additionalInfo);
}
@@ -405,7 +395,7 @@ public final class XposedBridge {
*/
private synchronized static void hookMethodNative(final Member method, Class> declaringClass,
int slot, final Object additionalInfoObj) {
- DynamicBridge.hookMethod(method, (AdditionalHookInfo) additionalInfoObj);
+ EdXpConfigGlobal.getHookProvider().hookMethod(method, (AdditionalHookInfo) additionalInfoObj);
}
private static Object invokeOriginalMethodNative(Member method, int methodId,
@@ -413,7 +403,7 @@ public final class XposedBridge {
Class> returnType,
Object thisObject, Object[] args)
throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
- return DynamicBridge.invokeOriginalMethod(method, thisObject, args);
+ return EdXpConfigGlobal.getHookProvider().invokeOriginalMethod(method, thisObject, args);
}
/**
diff --git a/Bridge/src/main/java/de/robv/android/xposed/XposedHelpers.java b/xposed-bridge/src/main/java/de/robv/android/xposed/XposedHelpers.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/XposedHelpers.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/XposedHelpers.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/XposedInit.java b/xposed-bridge/src/main/java/de/robv/android/xposed/XposedInit.java
similarity index 87%
rename from Bridge/src/main/java/de/robv/android/xposed/XposedInit.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/XposedInit.java
index 9e53b3cd..bba953fd 100644
--- a/Bridge/src/main/java/de/robv/android/xposed/XposedInit.java
+++ b/xposed-bridge/src/main/java/de/robv/android/xposed/XposedInit.java
@@ -1,14 +1,11 @@
package de.robv.android.xposed;
-import android.app.AndroidAppHelper;
import android.os.Build;
import android.text.TextUtils;
import android.util.Log;
import com.android.internal.os.ZygoteInit;
-import com.elderdrivers.riru.edxp.config.ConfigManager;
-import com.elderdrivers.riru.edxp.yahfa.entry.Router;
-import com.elderdrivers.riru.edxp.util.Utils;
+import com.elderdrivers.riru.edxp.config.EdXpConfigGlobal;
import java.io.BufferedReader;
import java.io.File;
@@ -24,8 +21,6 @@ import dalvik.system.DexFile;
import dalvik.system.PathClassLoader;
import de.robv.android.xposed.services.BaseService;
-import static com.elderdrivers.riru.edxp.config.InstallerChooser.INSTALLER_DATA_BASE_DIR;
-import static com.elderdrivers.riru.edxp.yahfa.entry.hooker.XposedBlackListHooker.BLACK_LIST_PACKAGE_NAME;
import static de.robv.android.xposed.XposedHelpers.closeSilently;
import static de.robv.android.xposed.XposedHelpers.findClass;
import static de.robv.android.xposed.XposedHelpers.findFieldIfExists;
@@ -45,18 +40,11 @@ public final class XposedInit {
private XposedInit() {
}
- private static volatile AtomicBoolean bootstrapHooked = new AtomicBoolean(false);
-
/**
* Hook some methods which we want to create an easier interface for developers.
*/
/*package*/
public static void initForZygote(boolean isSystem) throws Throwable {
- if (!bootstrapHooked.compareAndSet(false, true)) {
- return;
- }
- Router.startBootstrapHook(isSystem);
-
// TODO Are these still needed for us?
// MIUI
if (findFieldIfExists(ZygoteInit.class, "BOOT_START_TIME") != null) {
@@ -90,12 +78,12 @@ public final class XposedInit {
public static void loadModules(boolean isInZygote) throws IOException {
boolean hasLoaded = !modulesLoaded.compareAndSet(false, true);
// dynamic module list mode doesn't apply to loading in zygote
- if (hasLoaded && (isInZygote || !ConfigManager.isDynamicModulesMode())) {
+ if (hasLoaded && (isInZygote || !EdXpConfigGlobal.getConfig().isDynamicModulesMode())) {
return;
}
// FIXME module list is cleared but never could be reload again when using dynamic-module-list under multi-user environment
XposedBridge.clearLoadedPackages();
- final String filename = INSTALLER_DATA_BASE_DIR + "conf/modules.list";
+ final String filename = EdXpConfigGlobal.getConfig().getInstallerBaseDir() + "conf/modules.list";
BaseService service = SELinuxHelper.getAppDataFileService();
if (!service.checkFileExists(filename)) {
Log.e(TAG, "Cannot load any modules because " + filename + " was not found");
@@ -125,7 +113,10 @@ public final class XposedInit {
private static void loadModule(String apk, ClassLoader topClassLoader) {
Log.i(TAG, "Loading modules from " + apk);
- if (!TextUtils.isEmpty(apk) && apk.contains(BLACK_LIST_PACKAGE_NAME)) {
+ // todo remove this legacy logic
+ String blackListModulePackageName = EdXpConfigGlobal.getConfig().getBlackListModulePackageName();
+ if (!TextUtils.isEmpty(apk) && !TextUtils.isEmpty(blackListModulePackageName)
+ && apk.contains(blackListModulePackageName)) {
Log.i(TAG, "We are going to take over black list's job...");
return;
}
@@ -233,14 +224,4 @@ public final class XposedInit {
}
public final static HashSet loadedPackagesInProcess = new HashSet<>(1);
-
- public static void logD(String prefix) {
- Utils.logD(String.format("%s: pkg=%s, prc=%s", prefix, AndroidAppHelper.currentPackageName(),
- AndroidAppHelper.currentProcessName()));
- }
-
- public static void logE(String prefix, Throwable throwable) {
- Utils.logE(String.format("%s: pkg=%s, prc=%s", prefix, AndroidAppHelper.currentPackageName(),
- AndroidAppHelper.currentProcessName()), throwable);
- }
}
diff --git a/Bridge/src/main/java/de/robv/android/xposed/callbacks/IXUnhook.java b/xposed-bridge/src/main/java/de/robv/android/xposed/callbacks/IXUnhook.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/callbacks/IXUnhook.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/callbacks/IXUnhook.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/callbacks/XC_InitPackageResources.java b/xposed-bridge/src/main/java/de/robv/android/xposed/callbacks/XC_InitPackageResources.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/callbacks/XC_InitPackageResources.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/callbacks/XC_InitPackageResources.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/callbacks/XC_LayoutInflated.java b/xposed-bridge/src/main/java/de/robv/android/xposed/callbacks/XC_LayoutInflated.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/callbacks/XC_LayoutInflated.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/callbacks/XC_LayoutInflated.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/callbacks/XC_LoadPackage.java b/xposed-bridge/src/main/java/de/robv/android/xposed/callbacks/XC_LoadPackage.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/callbacks/XC_LoadPackage.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/callbacks/XC_LoadPackage.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/callbacks/XCallback.java b/xposed-bridge/src/main/java/de/robv/android/xposed/callbacks/XCallback.java
similarity index 96%
rename from Bridge/src/main/java/de/robv/android/xposed/callbacks/XCallback.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/callbacks/XCallback.java
index 8e17e916..b8976e57 100644
--- a/Bridge/src/main/java/de/robv/android/xposed/callbacks/XCallback.java
+++ b/xposed-bridge/src/main/java/de/robv/android/xposed/callbacks/XCallback.java
@@ -2,7 +2,7 @@ package de.robv.android.xposed.callbacks;
import android.os.Bundle;
-import com.elderdrivers.riru.edxp.util.PrebuiltMethodsDeopter;
+import com.elderdrivers.riru.edxp.config.EdXpConfigGlobal;
import java.io.Serializable;
@@ -105,7 +105,7 @@ public abstract class XCallback implements Comparable {
// deopt methods in system apps or priv-apps, this would be not necessary
// only if we found out how to recompile their apks
XC_LoadPackage.LoadPackageParam lpp = (XC_LoadPackage.LoadPackageParam) param;
- PrebuiltMethodsDeopter.deoptMethods(lpp.packageName, lpp.classLoader);
+ EdXpConfigGlobal.getHookProvider().deoptMethods(lpp.packageName, lpp.classLoader);
}
if (param.callbacks == null)
diff --git a/Bridge/src/main/java/de/robv/android/xposed/callbacks/package-info.java b/xposed-bridge/src/main/java/de/robv/android/xposed/callbacks/package-info.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/callbacks/package-info.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/callbacks/package-info.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/package-info.java b/xposed-bridge/src/main/java/de/robv/android/xposed/package-info.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/package-info.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/package-info.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/services/BaseService.java b/xposed-bridge/src/main/java/de/robv/android/xposed/services/BaseService.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/services/BaseService.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/services/BaseService.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/services/BinderService.java b/xposed-bridge/src/main/java/de/robv/android/xposed/services/BinderService.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/services/BinderService.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/services/BinderService.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/services/DirectAccessService.java b/xposed-bridge/src/main/java/de/robv/android/xposed/services/DirectAccessService.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/services/DirectAccessService.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/services/DirectAccessService.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/services/FileResult.java b/xposed-bridge/src/main/java/de/robv/android/xposed/services/FileResult.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/services/FileResult.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/services/FileResult.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/services/ZygoteService.java b/xposed-bridge/src/main/java/de/robv/android/xposed/services/ZygoteService.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/services/ZygoteService.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/services/ZygoteService.java
diff --git a/Bridge/src/main/java/de/robv/android/xposed/services/package-info.java b/xposed-bridge/src/main/java/de/robv/android/xposed/services/package-info.java
similarity index 100%
rename from Bridge/src/main/java/de/robv/android/xposed/services/package-info.java
rename to xposed-bridge/src/main/java/de/robv/android/xposed/services/package-info.java