From da6d34c53e2ad356ab18006a62e417e7b88489d9 Mon Sep 17 00:00:00 2001 From: HanaHime <62001729+PisLuanyao@users.noreply.github.com> Date: Fri, 1 Mar 2024 16:48:49 +0800 Subject: [PATCH] fix Crash for Emu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 强制初始化配置 --- .../shamrock/xposed/hooks/PullConfig.kt | 3 + .../tmpnativehelper/initShamrockConfig.kt | 80 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/loader/tmpnativehelper/initShamrockConfig.kt diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/hooks/PullConfig.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/hooks/PullConfig.kt index cb3f223..b6f643e 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/hooks/PullConfig.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/hooks/PullConfig.kt @@ -9,7 +9,9 @@ import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import moe.fuqiuluo.shamrock.remote.HTTPServer import moe.fuqiuluo.shamrock.remote.service.config.ShamrockConfig +import moe.fuqiuluo.shamrock.utils.MMKVFetcher import moe.fuqiuluo.shamrock.utils.PlatformUtils +import moe.fuqiuluo.shamrock.xposed.loader.tmpnativehelper.PutDefaultConfig import moe.fuqiuluo.shamrock.xposed.helper.internal.DataRequester import moe.fuqiuluo.shamrock.xposed.helper.internal.DynamicReceiver import moe.fuqiuluo.shamrock.xposed.helper.internal.IPCRequest @@ -70,6 +72,7 @@ class PullConfig: IAction { DataRequester.request("init", onFailure = { if (!ShamrockConfig.isInit()) { ctx.toast("请启动Shamrock主进程以初始化服务,进程将退出。") + PutDefaultConfig.putSettings() thread { Thread.sleep(3000) exitProcess(1) diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/loader/tmpnativehelper/initShamrockConfig.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/loader/tmpnativehelper/initShamrockConfig.kt new file mode 100644 index 0000000..c7fa00b --- /dev/null +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/loader/tmpnativehelper/initShamrockConfig.kt @@ -0,0 +1,80 @@ +package moe.fuqiuluo.shamrock.xposed.loader.tmpnativehelper + +import de.robv.android.xposed.XposedBridge +import kotlinx.serialization.decodeFromString +import moe.fuqiuluo.shamrock.remote.service.config.ConnectionConfig +import moe.fuqiuluo.shamrock.remote.service.config.ServiceConfig +import moe.fuqiuluo.shamrock.remote.service.config.ShamrockConfig +import moe.fuqiuluo.shamrock.tools.GlobalJson5 +import moe.fuqiuluo.shamrock.utils.MMKVFetcher +import mqq.app.MobileQQ +import kotlin.concurrent.thread +import kotlin.system.exitProcess + +class PutDefaultConfig { + companion object { + private val configDir = MobileQQ.getContext().getExternalFilesDir(null)!! + .parentFile!!.resolve("Tencent/Shamrock").also { + if (it.exists()) it.delete() + it.mkdirs() + } + + private val config = kotlin.runCatching { + GlobalJson5.decodeFromString(configDir.resolve("config.json").also { + if (!it.exists()) it.writeText("{}") + }.readText()) + }.onFailure { + XposedBridge.log("[Shamrock] 配置文件有误: ${it.stackTraceToString()}") + }.getOrElse { + ServiceConfig() + } + + fun putSettings() { + val mmkv = MMKVFetcher.mmkvWithId("shamrock_config") + if ((!ShamrockConfig.isInit()) && (!mmkv.getBoolean("isEmergencyInitBefore", false))){ + mmkv.apply { + putBoolean("tablet", false) // 强制平板模式 + putInt("port", 5700) // 主动HTTP端口 + putBoolean("ws", false) // 主动WS开关 + putBoolean("http", false) // HTTP回调开关 + putString("http_addr", null) // WebHook回调地址 + putBoolean("ws_client", false) // 被动WS开关 + putBoolean("use_cqcode", false) // 使用CQ码 + putBoolean("inject_packet", false) // 拦截无用包 + putBoolean("debug", false) // 调试模式 + putString("key_store", null) // 证书路径 + putString("ssl_pwd", null) // 证书密码 + putString("ssl_private_pwd", null) // 证书私钥密码 + putString("ssl_alias", null) // 证书别名 + putInt("ssl_port", 5701) // 主动HTTP端口 + putBoolean("alive_reply", true) // 自回复测试 + putBoolean("enable_self_msg", false) // 推送自己发的消息 + putBoolean("shell", false) // 开启Shell接口 + putBoolean("enable_sync_msg_as_sent_msg", true) // 推送同步消息 + putBoolean("forbid_useless_process", false) // 禁用QQ生成无用进程 + putBoolean("enable_old_bdh", false) // 启用旧版BDH + putBoolean("antiTrace", false) + putBoolean("super_anti", true) + config.defaultToken = null + // config.antiTrace = true + val wsPort = 5800 + config.activeWebSocket = + if (config.activeWebSocket == null) ConnectionConfig( + address = "0.0.0.0", + port = wsPort, + ) else config.activeWebSocket?.also { + it.port = wsPort + } + config.passiveWebSocket = null + putBoolean("isInit", true) + putBoolean("isEmergencyInitBefore", true) + } + XposedBridge.log("[Shamrock] 强制初始化配置完成,请重新打开QQ") + } else { + XposedBridge.log("[Shamrock] 程序逻辑错误或错误地多次强制初始化") + mmkv.putBoolean("isEmergencyInitBefore", false) + XposedBridge.log("[Shamrock] 如果执意要再次强制初始化,请重新执行程序") + } + } + } +} \ No newline at end of file