From cdd2856b42027be008942c6865773b633e26220b Mon Sep 17 00:00:00 2001 From: firelight <147925818+fire-light42@users.noreply.github.com> Date: Sat, 6 Jun 2026 17:13:03 +0000 Subject: [PATCH] Update SerializationClassTester.kt --- .../cloudstream3/SerializationClassTester.kt | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/app/src/androidTest/java/com/lagradost/cloudstream3/SerializationClassTester.kt b/app/src/androidTest/java/com/lagradost/cloudstream3/SerializationClassTester.kt index 0b19535cbd7..d1a11e00365 100644 --- a/app/src/androidTest/java/com/lagradost/cloudstream3/SerializationClassTester.kt +++ b/app/src/androidTest/java/com/lagradost/cloudstream3/SerializationClassTester.kt @@ -3,7 +3,7 @@ package com.lagradost.cloudstream3 import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry import com.lagradost.cloudstream3.utils.AppUtils.toJson -import io.github.classgraph.ClassGraph +import dalvik.system.DexFile import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.InternalSerializationApi import kotlinx.serialization.KSerializer @@ -100,19 +100,27 @@ class SerializationClassTester { } } + // DEX files are the best solution to read all our classes dynamically. + // ClassGraph() can be used instead, but it only gives results on the JVM, not Android. + @Suppress("DEPRECATION") private fun findSerializableClasses(packageName: String): List> { val context = InstrumentationRegistry .getInstrumentation() .targetContext - return ClassGraph() - .enableClassInfo() - .enableAnnotationInfo() - .overrideClassLoaders(context.classLoader) - .acceptPackages(packageName) - .scan() - .getClassesWithAnnotation(Serializable::class.java.name) - .mapNotNull { runCatching { Class.forName(it.name, false, context.classLoader).kotlin }.getOrNull() } + val dexFile = DexFile(context.packageCodePath) + + return dexFile.entries() + .toList() + .filter { it.startsWith(packageName) } + .mapNotNull { + runCatching { Class.forName(it).kotlin }.getOrNull() + }.filter { kClass -> + // Not possible to use .hasAnnotation() on newer Android versions. + kClass.java.annotations.any { + it is Serializable + } + } } @OptIn(InternalSerializationApi::class)