sentry-android-gradle-plugin: Auto-Installation version mismatch causes runtime crash
Integration
sentry-android
Build System
Gradle
AGP Version
7.2.1
Proguard
Enabled
Version
6.0.0, plugin=3.1.0
Steps to Reproduce
Build an obfuscated release build and call:
fun initSentry(application: Application) {
val options = Sentry.OptionsConfiguration<SentryAndroidOptions> { options ->
options.apply {
isEnableNdk = false // <- this fixes the crash
...
}
}
SentryAndroid.init(application, NoOpLogger.getInstance(), options)
}
Expected Result
It doesn’t crash
Actual Result
Follow up of the discussion in https://github.com/getsentry/sentry-java/pull/2031
Calling options.isEnableNdk = false causes the crash to not appear.
Stacktrace
signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
Abort message: 'Throwing new exception 'no non-static method "Lio/sentry/android/core/SentryAndroidOptions;.getDsn()Ljava/lang/String;"' with unexpected pending exception: java.lang.NoSuchMethodError: no non-static method "Lio/sentry/android/core/SentryAndroidOptions;.getOutboxPath()Ljava/lang/String;"
at void io.sentry.android.ndk.SentryNdk.initSentryNative(io.sentry.android.core.SentryAndroidOptions) (SourceFile:-2)
at void io.sentry.android.ndk.SentryNdk.init(io.sentry.android.core.SentryAndroidOptions) (SourceFile:7)
at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
at void io.sentry.android.core.l0.register(kp.r, io.sentry.SentryOptions) (SourceFile:106)
at void io.sentry.u.l(io.sentry.SentryOptions, boolean) (SourceFile:98)
at void io.sentry.u.m(kp.r0, io.sentry.u$a, boolean) (SourceFile:9)
at void io.sentry.android.core.s0.e(android.content.Context, kp.s, io.sentry.u$a) (SourceFile:26)
at void rv.c.c(android.app.Application) (SourceFile:26)
at void yazio.App.onCreate() (SourceFile:9)
at void android.app.Instrumentation.callApplicationOnCreate(android.app.Application) (Instrumentation.java:1223)
at void android.app.ActivityThread.handleBindApplication(android.app.ActivityThread$AppBindData) (ActivityThread.java:6734)
at void android.app.ActivityThread.access$1500(android.app.ActivityThread, android.app.ActivityThread$AppBindData) (ActivityThread.java:256)
at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:2090)
at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
at boolean android.os.Looper.loopOnce(android.os.Looper, long, int) (Looper.java:201)
at void android.os.Looper.loop() (Looper.java:288)
at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:7842)
at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:548)
at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1003)
About this issue
- Original URL
- State: open
- Created 2 years ago
- Comments: 15 (11 by maintainers)
It’s kind of possible through
autoInstallation.sentryVersionconfig, but it will set a single version for all integrations. The only problem I see with this, is if they want to keep an older version of, say,-timber, while updating-coreto 6.0.0. But this still would be possible to enforce via gradle’s dependency resolution.Having an option for that is also possible, yep.
In general, the approach to let users overwrite versions is good.
But in the case that you use auto-install, it is error prone and leads to inconsistent versions (which has caused the crash I’m reporting). And you can explicitly set the version in the auto install extension already so I expect this to solve more issues than it causes.