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