fix(modules/HookScriptLoaderModule): delay script execution until hooks completed

This commit is contained in:
PalmDevs 2025-10-12 02:05:19 +07:00
parent 4f583a86f2
commit b0fd423863
No known key found for this signature in database
GPG key ID: 6FAE8F8677ACA8BA
2 changed files with 18 additions and 1 deletions

View file

@ -7,12 +7,18 @@ import android.os.Bundle
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.IXposedHookZygoteInit
import de.robv.android.xposed.callbacks.XC_LoadPackage
import io.github.revenge.xposed.Utils.Log
import io.github.revenge.xposed.modules.*
import io.github.revenge.xposed.modules.appearance.FontsModule
import io.github.revenge.xposed.modules.appearance.SysColorsModule
import io.github.revenge.xposed.modules.appearance.ThemesModule
import io.github.revenge.xposed.modules.bridge.AdditionalBridgeMethodsModule
import io.github.revenge.xposed.modules.bridge.BridgeModule
import kotlinx.coroutines.CompletableDeferred
object HookReadyHolder {
val deferred = CompletableDeferred<Unit>()
}
class Main : Module(), IXposedHookLoadPackage, IXposedHookZygoteInit {
private var hooked = false
@ -45,13 +51,16 @@ class Main : Module(), IXposedHookLoadPackage, IXposedHookZygoteInit {
ContextWrapper::class.java.hookMethod("attachBaseContext", Context::class.java) {
after {
Log.i("Received Context")
this@Main.onContext(args[0] as Context)
}
}
reactActivity.hookMethod("onCreate", Bundle::class.java) {
after {
Log.i("Received Activity")
this@Main.onActivity(thisObject as Activity)
HookReadyHolder.deferred.complete(Unit)
}
}

View file

@ -6,9 +6,12 @@ import de.robv.android.xposed.IXposedHookZygoteInit
import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage
import io.github.revenge.xposed.Constants
import io.github.revenge.xposed.HookReadyHolder
import io.github.revenge.xposed.Module
import io.github.revenge.xposed.Utils.Log
import io.github.revenge.xposed.modules.HookScriptLoaderModule.Companion.PRELOADS_DIR
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.runBlocking
import java.io.File
import java.lang.reflect.Method
@ -84,7 +87,12 @@ class HookScriptLoaderModule : Module() {
private fun HookScope.runCustomScripts(loadScriptFromFile: Method, loadScriptFromAssets: Method) {
Log.i("Running custom scripts...")
runBlocking { UpdaterModule.downloadScript().join() }
runBlocking {
val ready = async { HookReadyHolder.deferred.join() }
val download = async { UpdaterModule.downloadScript().join() }
awaitAll(ready, download)
}
val loadSynchronously = args[2]
val runScriptFile = { file: File ->