Skip to content

Commit c10b24c

Browse files
committed
YouTube: Fix settings hook fails on Android 12 and below.
Avoid `DexClass.getMethodInstance()` as it cannot resolve methods in classes that use APIs newer than the current runtime API level.
1 parent 581fd3b commit c10b24c

File tree

1 file changed

+27
-5
lines changed
  • app/src/main/java/io/github/chsbuffer/revancedxposed

1 file changed

+27
-5
lines changed

app/src/main/java/io/github/chsbuffer/revancedxposed/BaseHook.kt

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import app.revanced.extension.shared.Logger
88
import app.revanced.extension.shared.Utils
99
import de.robv.android.xposed.XC_MethodHook
1010
import de.robv.android.xposed.XposedBridge
11+
import de.robv.android.xposed.XposedHelpers
1112
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam
1213
import io.github.chsbuffer.revancedxposed.BuildConfig.DEBUG
1314
import org.luckypray.dexkit.DexKitBridge
@@ -17,7 +18,9 @@ import org.luckypray.dexkit.result.MethodData
1718
import org.luckypray.dexkit.wrap.DexClass
1819
import org.luckypray.dexkit.wrap.DexField
1920
import org.luckypray.dexkit.wrap.DexMethod
21+
import java.lang.reflect.Constructor
2022
import java.lang.reflect.Member
23+
import java.lang.reflect.Method
2124
import kotlin.reflect.KFunction0
2225
import kotlin.system.measureTimeMillis
2326

@@ -36,11 +39,30 @@ interface IHook {
3639
}
3740

3841
fun DexClass.toClass() = getInstance(classLoader)
39-
fun DexMethod.toMethod() = getMethodInstance(classLoader)
40-
fun DexMethod.toMember() = when {
41-
isMethod -> getMethodInstance(classLoader)
42-
isConstructor -> getConstructorInstance(classLoader)
43-
else -> throw NotImplementedError()
42+
fun DexMethod.toMethod(): Method {
43+
var clz = classLoader.loadClass(className)
44+
do {
45+
return XposedHelpers.findMethodExactIfExists(clz, name, *paramTypeNames.toTypedArray())
46+
?: continue
47+
} while (clz.superclass.also { clz = it } != null)
48+
throw NoSuchMethodException("Method $this not found")
49+
}
50+
51+
fun DexMethod.toConstructor(): Constructor<*> {
52+
var clz = classLoader.loadClass(className)
53+
do {
54+
return XposedHelpers.findConstructorExactIfExists(clz, *paramTypeNames.toTypedArray())
55+
?: continue
56+
} while (clz.superclass.also { clz = it } != null)
57+
throw NoSuchMethodException("Method $this not found")
58+
}
59+
60+
fun DexMethod.toMember(): Member {
61+
return when {
62+
isMethod -> toMethod()
63+
isConstructor -> toConstructor()
64+
else -> throw NotImplementedError()
65+
}
4466
}
4567

4668
fun DexField.toField() = getFieldInstance(classLoader)

0 commit comments

Comments
 (0)