From 2be6e97817437f40e17893dfff3bea2cd4c3ff9e Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Mon, 7 Oct 2024 18:25:43 +0200 Subject: [PATCH] fix: Make it work on Android by not using APIs from JVM unavailable to Android. --- src/main/kotlin/app/revanced/patcher/patch/Patch.kt | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/app/revanced/patcher/patch/Patch.kt b/src/main/kotlin/app/revanced/patcher/patch/Patch.kt index 39bd930..6397252 100644 --- a/src/main/kotlin/app/revanced/patcher/patch/Patch.kt +++ b/src/main/kotlin/app/revanced/patcher/patch/Patch.kt @@ -10,6 +10,9 @@ import lanchon.multidexlib2.BasicDexFileNamer import lanchon.multidexlib2.MultiDexIO import java.io.File import java.io.InputStream +import java.lang.reflect.Member +import java.lang.reflect.Method +import java.lang.reflect.Modifier import java.net.URLClassLoader import java.util.jar.JarFile import kotlin.reflect.KProperty @@ -636,7 +639,7 @@ sealed class PatchLoader private constructor( */ private val Class<*>.patchFields get() = fields.filter { field -> - field.type.isPatch && field.canAccess(null) + field.type.isPatch && field.canAccess() }.map { field -> field.get(null) as Patch<*> } @@ -646,7 +649,7 @@ sealed class PatchLoader private constructor( */ private val Class<*>.patchMethods get() = methods.filter { method -> - method.returnType.isPatch && method.parameterCount == 0 && method.canAccess(null) + method.returnType.isPatch && method.parameterCount == 0 && method.canAccess() }.map { method -> method.invoke(null) as Patch<*> } @@ -670,6 +673,12 @@ sealed class PatchLoader private constructor( it.name != null }.toSet() } + + private fun Member.canAccess(): Boolean { + if (this is Method && parameterCount != 0) return false + + return Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers) + } } }