diff --git a/CHANGELOG.md b/CHANGELOG.md index f827195fa..947617ddf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co - Fix mass migration not using the same search queries as individual migration ([@AntsyLich](https://github.com/AntsyLich)) ([#2736](https://github.com/mihonapp/mihon/pull/2736)) - Fix reader not saving read duration when changing chapter ([@AntsyLich](https://github.com/AntsyLich), [@KotlinHero](https://github.com/KotlinHero)) ([#2784](https://github.com/mihonapp/mihon/pull/2784)) - Fix pre-1970 upload date display in chapter list ([@MajorTanya](https://github.com/MajorTanya)) ([#2779](https://github.com/mihonapp/mihon/pull/2779)) +- Fix crash when trying to install/update extensions while shizuku is not running ([@NGB-Was-Taken](https://github.com/NGB-Was-Taken)) ([#2837](https://github.com/mihonapp/mihon/pull/2837)) ## [v0.19.3] - 2025-11-07 ### Improved diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/installer/ShizukuInstaller.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/installer/ShizukuInstaller.kt index 303a2dad8..834a40d6f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/installer/ShizukuInstaller.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/installer/ShizukuInstaller.kt @@ -109,9 +109,9 @@ class ShizukuInstaller(private val service: Service) : Installer(service) { override fun processEntry(entry: Entry) { super.processEntry(entry) try { - shellInterface?.install( - service.contentResolver.openAssetFileDescriptor(entry.uri, "r"), - ) + service.contentResolver.openAssetFileDescriptor(entry.uri, "r").use { + shellInterface?.install(it) + } } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to install extension ${entry.downloadId} ${entry.uri}" } continueQueue(InstallStep.Error) @@ -124,7 +124,13 @@ class ShizukuInstaller(private val service: Service) : Installer(service) { override fun onDestroy() { Shizuku.removeBinderDeadListener(shizukuDeadListener) Shizuku.removeRequestPermissionResultListener(shizukuPermissionListener) - Shizuku.unbindUserService(shizukuArgs, connection, true) + if (Shizuku.pingBinder()) { + try { + Shizuku.unbindUserService(shizukuArgs, connection, true) + } catch (e: Exception) { + logcat(LogPriority.WARN, e) { "Failed to unbind shizuku service" } + } + } service.unregisterReceiver(receiver) logcat { "ShizukuInstaller destroy" } scope.cancel()