From dd444f9fba6129a9e0adca9c429c13c438fd336a Mon Sep 17 00:00:00 2001 From: ajp_anton Date: Wed, 15 Jul 2026 23:56:59 +0000 Subject: [PATCH] Remove unused LoadedApk fallback hook --- .../java/se/ajpanton/navbuttons/NavButtons.kt | 38 ------------------- 1 file changed, 38 deletions(-) diff --git a/app/src/main/java/se/ajpanton/navbuttons/NavButtons.kt b/app/src/main/java/se/ajpanton/navbuttons/NavButtons.kt index a8f7bcb..0ddffda 100644 --- a/app/src/main/java/se/ajpanton/navbuttons/NavButtons.kt +++ b/app/src/main/java/se/ajpanton/navbuttons/NavButtons.kt @@ -1,7 +1,6 @@ package se.ajpanton.navbuttons import android.content.Context -import android.content.pm.ApplicationInfo import android.os.Handler import android.os.Looper import android.os.SystemClock @@ -29,7 +28,6 @@ class NavButtons() : XposedModule() { private var systemServerProcess = false private var launcherHookInstalled = false private var aospTaskbarHookInstalled = false - private var loadedApkClassLoaderFallbackHookInstalled = false private var appBindFallbackHookInstalled = false private var lastHomeLongPressHandledAtMs = 0L private val targetHookRetryAttempts = mutableMapOf() @@ -164,7 +162,6 @@ class NavButtons() : XposedModule() { override fun getClassLoader(): ClassLoader = classLoader }) } else { - hookLoadedApkClassLoaderFallback(param.processName) hookAppBindFallback(param.processName) handleTargetPackage(param.processName, classLoader) scheduleTargetHookRetry(param.processName) @@ -282,41 +279,6 @@ class NavButtons() : XposedModule() { } } - private fun hookLoadedApkClassLoaderFallback(processName: String) { - if (loadedApkClassLoaderFallbackHookInstalled || processName !in TARGET_PACKAGES) { - return - } - val loadedApkClass = findClassIfExists("android.app.LoadedApk", null) ?: return - val methods = findMethodsNamed(loadedApkClass, "createOrUpdateClassLoaderLocked") - if (methods.isEmpty()) { - log("LoadedApk classloader fallback method not found.") - return - } - - loadedApkClassLoaderFallbackHookInstalled = true - methods.forEach { method -> - deoptimizeMethodIfPresent(method) - hook(method).intercept { chain -> - val result = chain.proceed() - val loadedApk = chain.thisObject ?: return@intercept result - val packageName = getLoadedApkPackageName(loadedApk) ?: return@intercept result - if (packageName in TARGET_PACKAGES) { - val classLoader = getFieldValue(loadedApk, "mClassLoader") as? ClassLoader - handleTargetPackage(packageName, classLoader) - } - result - } - } - } - - private fun getLoadedApkPackageName(loadedApk: Any): String? { - val packageName = getFieldValue(loadedApk, "mPackageName") as? String - if (packageName != null) { - return packageName - } - return (getFieldValue(loadedApk, "mApplicationInfo") as? ApplicationInfo)?.packageName - } - private fun getAppBindClassLoader(appBindData: Any?): ClassLoader? { val loadedApk = getFieldValue(appBindData, "info") ?: return null return (getFieldValue(loadedApk, "mClassLoader") as? ClassLoader)