diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0e75c5e727..2e63070d13 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -22,7 +22,7 @@ android { applicationId = "xyz.jmir.tachiyomi.mi" versionCode = 124 - versionName = "0.16.4.2" + versionName = "0.16.4.3" buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"") buildConfigField("String", "COMMIT_SHA", "\"${getGitSha()}\"") diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionLoader.kt index 17508d589e..9995d97d20 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionLoader.kt @@ -7,6 +7,7 @@ import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.os.Build import androidx.core.content.pm.PackageInfoCompat +import dalvik.system.PathClassLoader import eu.kanade.domain.extension.anime.interactor.TrustAnimeExtension import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.tachiyomi.animesource.AnimeCatalogueSource @@ -306,6 +307,26 @@ internal object AnimeExtensionLoader { is AnimeSourceFactory -> obj.createSources() else -> throw Exception("Unknown source class type: ${obj.javaClass}") } + } catch (e: LinkageError) { + try { + val fallBackClassLoader = PathClassLoader(appInfo.sourceDir, null, context.classLoader) + when ( + val obj = Class.forName( + it, + false, + fallBackClassLoader + ).getDeclaredConstructor().newInstance() + ) { + is AnimeSource -> { + listOf(obj) + } + is AnimeSourceFactory -> obj.createSources() + else -> throw Exception("Unknown source class type: ${obj.javaClass}") + } + } catch (e: Throwable) { + logcat(LogPriority.ERROR, e) { "Extension load error: $extName ($it)" } + return AnimeLoadResult.Error + } } catch (e: Throwable) { logcat(LogPriority.ERROR, e) { "Extension load error: $extName ($it)" } return AnimeLoadResult.Error diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionLoader.kt index 565847211c..a7b6cfa222 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionLoader.kt @@ -7,6 +7,7 @@ import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.os.Build import androidx.core.content.pm.PackageInfoCompat +import dalvik.system.PathClassLoader import eu.kanade.domain.extension.manga.interactor.TrustMangaExtension import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.tachiyomi.extension.manga.model.MangaExtension @@ -316,6 +317,26 @@ internal object MangaExtensionLoader { is SourceFactory -> obj.createSources() else -> throw Exception("Unknown source class type: ${obj.javaClass}") } + } catch (e: LinkageError) { + try { + val fallBackClassLoader = PathClassLoader(appInfo.sourceDir, null, context.classLoader) + when ( + val obj = Class.forName( + it, + false, + fallBackClassLoader + ).getDeclaredConstructor().newInstance() + ) { + is MangaSource -> { + listOf(obj) + } + is SourceFactory -> obj.createSources() + else -> throw Exception("Unknown source class type: ${obj.javaClass}") + } + } catch (e: Throwable) { + logcat(LogPriority.ERROR, e) { "Extension load error: $extName ($it)" } + return MangaLoadResult.Error + } } catch (e: Throwable) { logcat(LogPriority.ERROR, e) { "Extension load error: $extName ($it)" } return MangaLoadResult.Error