From 593f461ffe066af3f8d6e259e25b0260ed199426 Mon Sep 17 00:00:00 2001 From: HanaHime <62001729+PisLuanyao@users.noreply.github.com> Date: Fri, 1 Mar 2024 14:57:21 +0800 Subject: [PATCH] fix NativeLoader for Emu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 发现 isEmu 里反射的有问题,会出现 java.lang.NoSuchFieldException: No field vmInstructionSet in class Ldalvik/system/VMRuntime; (declaration of 'dalvik.system.VMRuntime' appears in /system/framework/core-libart.jar) --- .../moe/fuqiuluo/shamrock/xposed/loader/NativeLoader.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/loader/NativeLoader.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/loader/NativeLoader.kt index 90ea425..70d4278 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/loader/NativeLoader.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/loader/NativeLoader.kt @@ -89,6 +89,7 @@ internal object NativeLoader { val soPath = getLibFilePath(name) val soFile = File(soDir, name) fun reloadSo(tmp: File? = null) { + XposedBridge.log("[Shamrock] 重载SO文件 $soFile") LogCenter.log("SO文件大小不一致或不存在,正在重新加载", Level.INFO) soFile.delete() if (tmp == null) moduleClassLoader.getResourceAsStream(soPath).use { origin -> @@ -99,7 +100,7 @@ internal object NativeLoader { if (!soFile.exists()) { reloadSo() } else { - val tmpSoFile = soFile.resolve("$name.tmp").also { file -> + val tmpSoFile = File(soDir, "$name.tmp").also { file -> if (file.exists()) file.delete() file.outputStream().use { moduleClassLoader.getResourceAsStream(soPath).use { origin -> @@ -107,11 +108,12 @@ internal object NativeLoader { } } } + XposedBridge.log("[Shamrock] 正在校验${name}库文件") if (soFile.length() != tmpSoFile.length() || MD5.getFileMD5(soFile).let { it != MD5.getFileMD5(tmpSoFile) }) { reloadSo(tmpSoFile) - } + } else { tmpSoFile.delete() } } try { System.load(soFile.absolutePath)