Remove unused LoadedApk fallback hook
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
package se.ajpanton.navbuttons
|
package se.ajpanton.navbuttons
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.pm.ApplicationInfo
|
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.os.SystemClock
|
import android.os.SystemClock
|
||||||
@@ -29,7 +28,6 @@ class NavButtons() : XposedModule() {
|
|||||||
private var systemServerProcess = false
|
private var systemServerProcess = false
|
||||||
private var launcherHookInstalled = false
|
private var launcherHookInstalled = false
|
||||||
private var aospTaskbarHookInstalled = false
|
private var aospTaskbarHookInstalled = false
|
||||||
private var loadedApkClassLoaderFallbackHookInstalled = false
|
|
||||||
private var appBindFallbackHookInstalled = false
|
private var appBindFallbackHookInstalled = false
|
||||||
private var lastHomeLongPressHandledAtMs = 0L
|
private var lastHomeLongPressHandledAtMs = 0L
|
||||||
private val targetHookRetryAttempts = mutableMapOf<String, Int>()
|
private val targetHookRetryAttempts = mutableMapOf<String, Int>()
|
||||||
@@ -164,7 +162,6 @@ class NavButtons() : XposedModule() {
|
|||||||
override fun getClassLoader(): ClassLoader = classLoader
|
override fun getClassLoader(): ClassLoader = classLoader
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
hookLoadedApkClassLoaderFallback(param.processName)
|
|
||||||
hookAppBindFallback(param.processName)
|
hookAppBindFallback(param.processName)
|
||||||
handleTargetPackage(param.processName, classLoader)
|
handleTargetPackage(param.processName, classLoader)
|
||||||
scheduleTargetHookRetry(param.processName)
|
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? {
|
private fun getAppBindClassLoader(appBindData: Any?): ClassLoader? {
|
||||||
val loadedApk = getFieldValue(appBindData, "info") ?: return null
|
val loadedApk = getFieldValue(appBindData, "info") ?: return null
|
||||||
return (getFieldValue(loadedApk, "mClassLoader") as? ClassLoader)
|
return (getFieldValue(loadedApk, "mClassLoader") as? ClassLoader)
|
||||||
|
|||||||
Reference in New Issue
Block a user