From 6d4ed6cb229e6347a0b2f14e2a3ab8fcf4295049 Mon Sep 17 00:00:00 2001 From: AntsyLich <59261191+AntsyLich@users.noreply.github.com> Date: Wed, 7 Oct 2026 11:07:27 +0600 Subject: [PATCH] Use the backport class loader for extensions before Android 17 ART maps app images compiled for the built-in DelegateLastClassLoader's class loader chain, and before Android 17 a damaged one crashes every launch until the app is updated. --- .../mihon/data/dalvik/DelegateLastClassLoaderCompat.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/mihon/data/dalvik/DelegateLastClassLoaderCompat.kt b/app/src/main/java/mihon/data/dalvik/DelegateLastClassLoaderCompat.kt index fba6a085f..8b601ee79 100644 --- a/app/src/main/java/mihon/data/dalvik/DelegateLastClassLoaderCompat.kt +++ b/app/src/main/java/mihon/data/dalvik/DelegateLastClassLoaderCompat.kt @@ -13,7 +13,9 @@ fun DelegateLastClassLoaderCompat( librarySearchPath: String?, parent: ClassLoader, ): ClassLoader { - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { + // ART recognizes the built-in loader and maps app images compiled for this app's class loader chain, and before + // Android 17 a damaged one crashes every launch until the app is updated. ART doesn't recognize the backport. + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CINNAMON_BUN) { DelegateLastClassLoader(dexPath, librarySearchPath, parent) } else { DelegateLastPathClassLoader(dexPath, librarySearchPath, parent) @@ -21,7 +23,8 @@ fun DelegateLastClassLoaderCompat( } /** - * Backport of [DelegateLastClassLoader], which was added in API 27. + * A [PathClassLoader] that looks up classes like [DelegateLastClassLoader]: the boot class loader first, then its own + * dex path, then the parent. */ private class DelegateLastPathClassLoader( dexPath: String,