diff --git a/CHANGELOG.md b/CHANGELOG.md index e318c6b26b..ffc5269c28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ * Corrected the behavior when `Bugsnag.startSession` is called when `config.autoTrackSessions=true`, the first automatic session will now be correctly discarded [#2033](https://github.com/bugsnag/bugsnag-android/pull/2033) +* Avoid a possible crash in the ANR plugin when the native ANR library failed to load. + [#2039](https://github.com/bugsnag/bugsnag-android/pull/2039) ## 6.5.0 (2024-05-15) diff --git a/bugsnag-plugin-android-anr/src/main/java/com/bugsnag/android/AnrPlugin.kt b/bugsnag-plugin-android-anr/src/main/java/com/bugsnag/android/AnrPlugin.kt index f2bcb924c2..5745b3e2fe 100644 --- a/bugsnag-plugin-android-anr/src/main/java/com/bugsnag/android/AnrPlugin.kt +++ b/bugsnag-plugin-android-anr/src/main/java/com/bugsnag/android/AnrPlugin.kt @@ -67,22 +67,25 @@ internal class AnrPlugin : Plugin { } private fun performOneTimeSetup(client: Client) { - libraryLoader.loadLibrary("bugsnag-plugin-android-anr", client) { + val isLoaded = libraryLoader.loadLibrary("bugsnag-plugin-android-anr", client) { val error = it.errors[0] error.errorClass = "AnrLinkError" error.errorMessage = LOAD_ERR_MSG true } - @Suppress("UNCHECKED_CAST") - val clz = loadClass("com.bugsnag.android.NdkPlugin") as Class? - if (clz != null) { - val ndkPlugin = client.getPlugin(clz) - if (ndkPlugin != null) { - val method = ndkPlugin.javaClass.getMethod("getSignalUnwindStackFunction") - - @Suppress("UNCHECKED_CAST") - val function = method.invoke(ndkPlugin) as Long - setUnwindFunction(function) + + if (isLoaded) { + @Suppress("UNCHECKED_CAST") + val clz = loadClass("com.bugsnag.android.NdkPlugin") as Class? + if (clz != null) { + val ndkPlugin = client.getPlugin(clz) + if (ndkPlugin != null) { + val method = ndkPlugin.javaClass.getMethod("getSignalUnwindStackFunction") + + @Suppress("UNCHECKED_CAST") + val function = method.invoke(ndkPlugin) as Long + setUnwindFunction(function) + } } } }