bug(okhttp): Fatal SIGSEGV on Android 14+ JIT due to R8 optimization mismatch with OkHttp bytecode manipulation
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 48/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Área
- build-system, mobile
Línea de trabajo
Start by reviewing sentry-android-core/proguard-rules.pro around lines 46-47 and the ASM logic in ResponseWithInterceptorChainMethodVisitor.kt, then reproduce the release build with R8 Full Mode on Android 14+. Trace whether the obsolete package rules leave io.sentry.okhttp and the manipulated RealCall path unprotected; done means the crash no longer occurs while HTTP instrumentation still works.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Integration
sentry-okhttp
Build System
Gradle
AGP Version
8.x
Proguard
Enabled
Other Error Monitoring Solution
No
Version
8.53.0
Steps to Reproduce
- Enable Sentry HTTP Auto-Instrumentation in an Android project using the Sentry Android Gradle Plugin:
sentry { tracingInstrumentation { enabled = true features = [sentryOkHttpFeature] as Set } } - Compile the application in Release mode with R8 Full Mode enabled:
android.enableR8.fullMode=true - Run the compiled APK on any Android device running Android 14, 15, or 16 (equipped with updated Google Play Mainline ART modules).
- Trigger rapid concurrent network requests (e.g., loading a feed) to quickly increase the execution count of OkHttp's internal execution path, forcing the ART runtime to promote the method to a "hot method" and trigger JIT compilation.
Expected Result
The network calls complete smoothly and Sentry captures HTTP spans and breadcrumbs correctly without any native stability issues.
Actual Result
The background JIT compilation thread of ART (Android Runtime) crashes with a fatal native SIGSEGV (11) segmentation fault while compiling okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain(), causing the application process to die immediately.
Obfuscated Native Tombstone Stacktrace:
at __start_thread (<unknown>)
at __pthread_start (<unknown>)
...
at okhttp3.internal.connection.RealCall.G0 (<unknown>) # R8 optimized getResponseWithInterceptorChain
at io.sentry.okhttp.b.f (<unknown>) # Obfuscated SentryOkHttpEventListener
Detailed Technical Analysis
- ASM Bytecode Injection: The
sentry-android-gradle-pluginuses ASM bytecode manipulation (defined inResponseWithInterceptorChainMethodVisitor.kt) to inject a complexwhileloop that allocates registers/variables on the fly to detect and addSentryOkHttpInterceptorinside OkHttp'sokhttp3.internal.connection.RealCall.getResponseWithInterceptorChain(). - Missing / Obsolete Consumer Proguard Rules:
- The
sentry-okhttpmodule is packaged as a pure Java.jarlibrary, meaning it cannot ship native Android.aarconsumer proguard files. - The main
sentry-android-coremodule ships Proguard rules, but they are obsolete: they reference the old package nameio.sentry.android.okhttp.SentryOkHttpInterceptorinstead of the modernio.sentry.okhttp.SentryOkHttpInterceptor(refactored in v8.x). See line 46-47 in sentry-android-core/proguard-rules.pro. - Therefore, there are no Proguard keep rules anywhere in Sentry's libraries protecting the
io.sentry.okhttp.**package from optimization.
- The
- R8 Optimization Conflict: Since Sentry OkHttp classes are completely unprotected, R8 (under Full Mode) aggressively optimizes, obfuscates, and inlines them (e.g., companion objects and helpers) on top of the raw bytecode manually woven by the Sentry ASM visitor. This generates inconsistent local variables allocation and corrupt
StackMapTableframes in the final.dexfile. - JIT Compiler Crash: When ART's background JIT compiler thread (which is shared across Android 14+ via mainline system updates) attempts to compile this corrupt method into native ARM64 instructions, the strict verificator in ART fails to resolve the incorrect stack maps, resulting in a fatal native memory pointer disintegration (
SIGSEGV).
Temporary Workaround
Adding these rules to the application's proguard-rules.pro file completely resolves the issue, since it prevents R8 from inlining/optimizing the woven bridge:
# Prevent R8 from optimizing/inlining the unprotected Sentry OkHttp classes
-keep class io.sentry.okhttp.** { *; }
-dontwarn io.sentry.okhttp.**
# Protect internal RealCall bytecode manipulated by the plugin
-keep class okhttp3.internal.connection.RealCall { *; }
- Lenguaje dominante
- Kotlin
- Estrellas
- 1.4k
- Forks
- 478
- Merge medio
- 2 d 20 h
- PR fusionados (30 d)
- 71
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de getsentry/sentry-java
-
Improvement Java Platform: Android Platform: Java
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
getsentry/sentry-java#6145 · 1 comentario · 1 asignado ·
-
Bug Java Platform: Android Platform: Java
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
getsentry/sentry-java#6138 · 1 comentario ·
-
Feature Java Platform: Java Spans
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
getsentry/sentry-java#5984 · 1 comentario ·
-
Android Task Traces
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
getsentry/sentry-java#5376 · 1 comentario ·
-
Android Docs Errors
Dificultad 2/5 1-3 horas Aptitud para principiantes 64/100
getsentry/sentry-java#5375 · 1 comentario ·
Todos los issues de getsentry/sentry-java
Issues similares
-
[Bug] 统计页面无法重置token和汇率 Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
AAswordman/Operit#1265 · 3 comentarios ·
-
The extension stopped working. AbiertoSource is down
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
keiyoushi/extensions-source#19317 ·
-
Tambahkan bahasa Indonesia Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
acristescu/OnlineGo#216 ·
-
Remove custom segment colors Abiertoenhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
libre-tube/LibreTube#8803 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100