Remove unused LoadedApk fallback hook
This commit is contained in:
@@ -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<String, Int>()
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user