fix: Make it work on Android by not using APIs from JVM unavailable to Android.

This commit is contained in:
oSumAtrIX
2024-10-07 18:25:43 +02:00
parent 348d0070e7
commit 2be6e97817

View File

@@ -10,6 +10,9 @@ import lanchon.multidexlib2.BasicDexFileNamer
import lanchon.multidexlib2.MultiDexIO import lanchon.multidexlib2.MultiDexIO
import java.io.File import java.io.File
import java.io.InputStream 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.net.URLClassLoader
import java.util.jar.JarFile import java.util.jar.JarFile
import kotlin.reflect.KProperty import kotlin.reflect.KProperty
@@ -636,7 +639,7 @@ sealed class PatchLoader private constructor(
*/ */
private val Class<*>.patchFields private val Class<*>.patchFields
get() = fields.filter { field -> get() = fields.filter { field ->
field.type.isPatch && field.canAccess(null) field.type.isPatch && field.canAccess()
}.map { field -> }.map { field ->
field.get(null) as Patch<*> field.get(null) as Patch<*>
} }
@@ -646,7 +649,7 @@ sealed class PatchLoader private constructor(
*/ */
private val Class<*>.patchMethods private val Class<*>.patchMethods
get() = methods.filter { method -> get() = methods.filter { method ->
method.returnType.isPatch && method.parameterCount == 0 && method.canAccess(null) method.returnType.isPatch && method.parameterCount == 0 && method.canAccess()
}.map { method -> }.map { method ->
method.invoke(null) as Patch<*> method.invoke(null) as Patch<*>
} }
@@ -670,6 +673,12 @@ sealed class PatchLoader private constructor(
it.name != null it.name != null
}.toSet() }.toSet()
} }
private fun Member.canAccess(): Boolean {
if (this is Method && parameterCount != 0) return false
return Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers)
}
} }
} }