tag:github.com,2008:https://github.com/getsentry/sentry-java/releasesRelease notes from sentry-java2026-03-12T09:07:04Ztag:github.com,2008:Repository/3368190/8.35.02026-03-12T11:44:37Z8.35.0<h3>Fixes</h3>
<ul>
<li>Android: Remove the dependency on protobuf-lite for tombstones (<a href="https://github.com/getsentry/sentry-java/pull/5157" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5157/hovercard">#5157</a>)</li>
</ul>
<h3>Features</h3>
<ul>
<li>Add new experimental option to capture profiles for ANRs (<a href="https://github.com/getsentry/sentry-java/pull/4899" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4899/hovercard">#4899</a>)
<ul>
<li>This feature will capture a stack profile of the main thread when it gets unresponsive</li>
<li>The profile gets attached to the ANR event on the next app start, providing a flamegraph of the ANR issue on the sentry issue details page</li>
<li>Enable via <code>options.setAnrProfilingSampleRate(<sample-rate>)</code> or AndroidManifest.xml: <code><meta-data android:name="io.sentry.anr.profiling.sample-rate" android:value="[0.0-1.0]" /></code></li>
<li>The sample rate controls the probability of collecting a profile for each detected foreground ANR (0.0 to 1.0, null to disable)</li>
</ul>
</li>
</ul>
<h3>Behavioral Changes</h3>
<ul>
<li>Add <code>enableAnrFingerprinting</code> option which assigns static fingerprints to ANR events with system-only stacktraces
<ul>
<li>When enabled, ANRs whose stacktraces contain only system frames (e.g. <code>java.lang</code> or <code>android.os</code>) are grouped into a single issue instead of creating many separate issues</li>
<li>This will help to reduce overall ANR issue noise in the Sentry dashboard</li>
<li><strong>IMPORTANT:</strong> This option is enabled by default.</li>
<li>Disable via <code>options.setEnableAnrFingerprinting(false)</code> or AndroidManifest.xml: <code><meta-data android:name="io.sentry.anr.enable-fingerprinting" android:value="false" /></code></li>
</ul>
</li>
</ul>sentry-release-bot[bot]tag:github.com,2008:Repository/3368190/8.34.12026-03-05T15:54:49Z8.34.1<h3>Fixes</h3>
<ul>
<li>Common: Finalize previous session even when auto session tracking is disabled (<a href="https://github.com/getsentry/sentry-java/pull/5154" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5154/hovercard">#5154</a>)</li>
<li>Android: Add <code>filterTouchesWhenObscured</code> to prevent Tapjacking on user feedback dialog (<a href="https://github.com/getsentry/sentry-java/pull/5155" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5155/hovercard">#5155</a>)</li>
<li>Android: Add proguard rules to prevent error about missing Replay classes (<a href="https://github.com/getsentry/sentry-java/pull/5153" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5153/hovercard">#5153</a>)</li>
</ul>sentry-release-bot[bot]tag:github.com,2008:Repository/3368190/8.34.02026-03-04T11:56:52Z8.34.0<h3>Features</h3>
<ul>
<li>Add scope-level attributes API (<a href="https://github.com/getsentry/sentry-java/pull/5118" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5118/hovercard">#5118</a>) via (<a href="https://github.com/getsentry/sentry-java/pull/5148" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5148/hovercard">#5148</a>)
<ul>
<li>Automatically include scope attributes in logs and metrics (<a href="https://github.com/getsentry/sentry-java/pull/5120" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5120/hovercard">#5120</a>)</li>
<li>New APIs are <code>Sentry.setAttribute</code>, <code>Sentry.setAttributes</code>, <code>Sentry.removeAttribute</code></li>
</ul>
</li>
<li>Support collections and arrays in attribute type inference (<a href="https://github.com/getsentry/sentry-java/pull/5124" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5124/hovercard">#5124</a>)</li>
<li>Add support for <code>SENTRY_SAMPLE_RATE</code> environment variable / <code>sample-rate</code> property (<a href="https://github.com/getsentry/sentry-java/pull/5112" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5112/hovercard">#5112</a>)</li>
<li>Create <code>sentry-opentelemetry-otlp</code> and <code>sentry-opentelemetry-otlp-spring</code> modules for combining OpenTelemetry SDK OTLP export with Sentry SDK (<a href="https://github.com/getsentry/sentry-java/pull/5100" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5100/hovercard">#5100</a>)
<ul>
<li>OpenTelemetry is configured to send spans to Sentry directly using an OTLP endpoint.</li>
<li>Sentry only uses trace and span ID from OpenTelemetry (via <code>OpenTelemetryOtlpEventProcessor</code>) but will not send spans through OpenTelemetry nor use OpenTelemetry <code>Context</code> for <code>Scopes</code> propagation.</li>
<li>See the OTLP setup docs for <a href="https://docs.sentry.io/platforms/java/opentelemetry/setup/otlp/" rel="nofollow">Java</a> and <a href="https://docs.sentry.io/platforms/java/guides/spring-boot/opentelemetry/setup/otlp/" rel="nofollow">Spring Boot</a> for installation and configuration instructions.</li>
</ul>
</li>
<li>Add screenshot masking support using view hierarchy (<a href="https://github.com/getsentry/sentry-java/pull/5077" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5077/hovercard">#5077</a>)
<ul>
<li>Masks sensitive content (text, images) in error screenshots using the same view hierarchy approach as Session Replay</li>
<li>Requires the <code>sentry-android-replay</code> module to be present at runtime for masking to work</li>
<li>Enable via code:
<div class="highlight highlight-source-kotlin notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="SentryAndroid.init(context) { options ->
options.isAttachScreenshot = true
options.screenshot.setMaskAllText(true)
options.screenshot.setMaskAllImages(true)
// Or mask specific view classes
options.screenshot.addMaskViewClass("com.example.MyCustomView")
}"><pre><span class="pl-en">SentryAndroid</span>.<span class="pl-en">init</span>(context) { options <span class="pl-k">-></span>
options.isAttachScreenshot <span class="pl-k">=</span> <span class="pl-c1">true</span>
options.screenshot.setMaskAllText(<span class="pl-c1">true</span>)
options.screenshot.setMaskAllImages(<span class="pl-c1">true</span>)
<span class="pl-c"><span class="pl-c">//</span> Or mask specific view classes</span>
options.screenshot.addMaskViewClass(<span class="pl-s"><span class="pl-pds">"</span>com.example.MyCustomView<span class="pl-pds">"</span></span>)
}</pre></div>
</li>
<li>Or via <code>AndroidManifest.xml</code>:
<div class="highlight highlight-text-xml notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="<meta-data android:name="io.sentry.attach-screenshot" android:value="true" />
<meta-data android:name="io.sentry.screenshot.mask-all-text" android:value="true" />
<meta-data android:name="io.sentry.screenshot.mask-all-images" android:value="true" />"><pre><<span class="pl-ent">meta-data</span> <span class="pl-e">android</span><span class="pl-e">:</span><span class="pl-e">name</span>=<span class="pl-s"><span class="pl-pds">"</span>io.sentry.attach-screenshot<span class="pl-pds">"</span></span> <span class="pl-e">android</span><span class="pl-e">:</span><span class="pl-e">value</span>=<span class="pl-s"><span class="pl-pds">"</span>true<span class="pl-pds">"</span></span> />
<<span class="pl-ent">meta-data</span> <span class="pl-e">android</span><span class="pl-e">:</span><span class="pl-e">name</span>=<span class="pl-s"><span class="pl-pds">"</span>io.sentry.screenshot.mask-all-text<span class="pl-pds">"</span></span> <span class="pl-e">android</span><span class="pl-e">:</span><span class="pl-e">value</span>=<span class="pl-s"><span class="pl-pds">"</span>true<span class="pl-pds">"</span></span> />
<<span class="pl-ent">meta-data</span> <span class="pl-e">android</span><span class="pl-e">:</span><span class="pl-e">name</span>=<span class="pl-s"><span class="pl-pds">"</span>io.sentry.screenshot.mask-all-images<span class="pl-pds">"</span></span> <span class="pl-e">android</span><span class="pl-e">:</span><span class="pl-e">value</span>=<span class="pl-s"><span class="pl-pds">"</span>true<span class="pl-pds">"</span></span> /></pre></div>
</li>
</ul>
</li>
<li>The <code>ManifestMetaDataReader</code> now read the <code>DIST</code> (<a href="https://github.com/getsentry/sentry-java/pull/5107" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5107/hovercard">#5107</a>)</li>
</ul>
<h3>Fixes</h3>
<ul>
<li>Fix attribute type detection for <code>Long</code>, <code>Short</code>, <code>Byte</code>, <code>BigInteger</code>, <code>AtomicInteger</code>, and <code>AtomicLong</code> being incorrectly inferred as <code>double</code> instead of <code>integer</code> (<a href="https://github.com/getsentry/sentry-java/pull/5122" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5122/hovercard">#5122</a>)</li>
<li>Remove <code>AndroidRuntimeManager</code> StrictMode relaxation to prevent ANRs during SDK init (<a href="https://github.com/getsentry/sentry-java/pull/5127" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5127/hovercard">#5127</a>)
<ul>
<li><strong>IMPORTANT:</strong> StrictMode violations may appear again in debug builds. This is intentional to prevent ANRs in production releases.</li>
</ul>
</li>
<li>Fix crash when unregistering <code>SystemEventsBroadcastReceiver</code> with try-catch block. (<a href="https://github.com/getsentry/sentry-java/pull/5106" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5106/hovercard">#5106</a>)</li>
<li>Use <code>peekDecorView</code> instead of <code>getDecorView</code> in <code>SentryGestureListener</code> to avoid forcing view hierarchy construction (<a href="https://github.com/getsentry/sentry-java/pull/5134" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5134/hovercard">#5134</a>)</li>
<li>Log an actionable error message when Relay returns HTTP 413 (Content Too Large) (<a href="https://github.com/getsentry/sentry-java/pull/5115" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5115/hovercard">#5115</a>)
<ul>
<li>Also switch the client report discard reason for all HTTP 4xx/5xx errors (except 429) from <code>network_error</code> to <code>send_error</code></li>
</ul>
</li>
<li>Trim DSN string before parsing to avoid <code>URISyntaxException</code> caused by trailing whitespace (<a href="https://github.com/getsentry/sentry-java/pull/5113" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5113/hovercard">#5113</a>)</li>
<li>Reduce allocations and bytecode instructions during <code>Sentry.init</code> (<a href="https://github.com/getsentry/sentry-java/pull/5135" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5135/hovercard">#5135</a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>Bump Native SDK from v0.12.7 to v0.13.1 (<a href="https://github.com/getsentry/sentry-java/pull/5104" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5104/hovercard">#5104</a>)
<ul>
<li><a href="https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0131">changelog</a></li>
<li><a href="https://github.com/getsentry/sentry-native/compare/0.12.7...0.13.1">diff</a></li>
</ul>
</li>
</ul>sentry-release-bot[bot]tag:github.com,2008:Repository/3368190/8.33.02026-02-18T13:28:40Z8.33.0<h3>Features</h3>
<ul>
<li>Add <code>installGroupsOverride</code> parameter to Build Distribution SDK for programmatic filtering, with support for configuration via properties file using <code>io.sentry.distribution.install-groups-override</code> (<a href="https://github.com/getsentry/sentry-java/pull/5066" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5066/hovercard">#5066</a>)</li>
</ul>
<h3>Fixes</h3>
<ul>
<li>When merging tombstones with Native SDK, use the tombstone message if the Native SDK didn't explicitly provide one. (<a href="https://github.com/getsentry/sentry-java/pull/5095" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5095/hovercard">#5095</a>)</li>
<li>Fix thread leak caused by eager creation of <code>SentryExecutorService</code> in <code>SentryOptions</code> (<a href="https://github.com/getsentry/sentry-java/pull/5093" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5093/hovercard">#5093</a>)
<ul>
<li>There were cases where we created options that ended up unused but we failed to clean those up.</li>
</ul>
</li>
<li>Attach user attributes to logs and metrics regardless of <code>sendDefaultPii</code> (<a href="https://github.com/getsentry/sentry-java/pull/5099" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5099/hovercard">#5099</a>)</li>
<li>No longer log a warning if a logging integration cannot initialize Sentry due to missing DSN (<a href="https://github.com/getsentry/sentry-java/pull/5075" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5075/hovercard">#5075</a>)
<ul>
<li>While this may have been useful to some, it caused lots of confusion.</li>
</ul>
</li>
<li>Session Replay: Add <code>androidx.camera.view.PreviewView</code> to default <code>maskedViewClasses</code> to mask camera previews by default. (<a href="https://github.com/getsentry/sentry-java/pull/5097" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5097/hovercard">#5097</a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>Bump Native SDK from v0.12.4 to v0.12.7 (<a href="https://github.com/getsentry/sentry-java/pull/5071" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5071/hovercard">#5071</a>, <a href="https://github.com/getsentry/sentry-java/pull/5098" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5098/hovercard">#5098</a>)
<ul>
<li><a href="https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0127">changelog</a></li>
<li><a href="https://github.com/getsentry/sentry-native/compare/0.12.4...0.12.7">diff</a></li>
</ul>
</li>
</ul>
<h3>Internal</h3>
<ul>
<li>Add integration to track session replay custom masking (<a href="https://github.com/getsentry/sentry-java/pull/5070" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5070/hovercard">#5070</a>)</li>
</ul>sentry-release-bot[bot]tag:github.com,2008:Repository/3368190/8.32.02026-02-09T10:10:38Z8.32.0<h3>Features</h3>
<ul>
<li>Add <code>installGroupsOverride</code> parameter and <code>installGroups</code> property to Build Distribution SDK (<a href="https://github.com/getsentry/sentry-java/pull/5062" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5062/hovercard">#5062</a>)</li>
<li>Update Android targetSdk to API 36 (Android 16) (<a href="https://github.com/getsentry/sentry-java/pull/5016" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5016/hovercard">#5016</a>)</li>
<li>Add AndroidManifest support for Spotlight configuration via <code>io.sentry.spotlight.enable</code> and <code>io.sentry.spotlight.url</code> (<a href="https://github.com/getsentry/sentry-java/pull/5064" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5064/hovercard">#5064</a>)</li>
<li>Collect database transaction spans (<code>BEGIN</code>, <code>COMMIT</code>, <code>ROLLBACK</code>) (<a href="https://github.com/getsentry/sentry-java/pull/5072" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5072/hovercard">#5072</a>)
<ul>
<li>To enable creation of these spans, set <code>options.enableDatabaseTransactionTracing</code> to <code>true</code></li>
<li><code>enable-database-transaction-tracing=true</code> when using <code>sentry.properties</code></li>
<li>For Spring Boot, use <code>sentry.enable-database-transaction-tracing=true</code> in <code>application.properties</code> or in <code>application.yml</code>:
<div class="highlight highlight-source-yaml notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="sentry:
enable-database-transaction-tracing: true"><pre><span class="pl-ent">sentry</span>:
<span class="pl-ent">enable-database-transaction-tracing</span>: <span class="pl-c1">true</span></pre></div>
</li>
</ul>
</li>
<li>Add support for collecting native crashes using Tombstones (<a href="https://github.com/getsentry/sentry-java/pull/4933" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4933/hovercard">#4933</a>, <a href="https://github.com/getsentry/sentry-java/pull/5037" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5037/hovercard">#5037</a>)
<ul>
<li>Added Tombstone integration that detects native crashes using <code>ApplicationExitInfo.REASON_CRASH_NATIVE</code> on Android 12+</li>
<li>Crashes enriched with Tombstones contain more crash details and detailed thread info</li>
<li>Tombstone and NDK integrations are now automatically merged into a single crash event, eliminating duplicate reports</li>
<li>To enable it, add the integration in your Sentry initialization:
<div class="highlight highlight-source-kotlin notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="SentryAndroid.init(context, options -> {
options.isTombstoneEnabled = true
})"><pre><span class="pl-en">SentryAndroid</span>.<span class="pl-en">init</span>(context, options <span class="pl-k">-></span> {
options.isTombstoneEnabled <span class="pl-k">=</span> <span class="pl-c1">true</span>
})</pre></div>
or in the <code>AndroidManifest.xml</code> using:
<div class="highlight highlight-text-xml notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="<meta-data android:name="io.sentry.tombstone.enable" android:value="true" />"><pre><<span class="pl-ent">meta-data</span> <span class="pl-e">android</span><span class="pl-e">:</span><span class="pl-e">name</span>=<span class="pl-s"><span class="pl-pds">"</span>io.sentry.tombstone.enable<span class="pl-pds">"</span></span> <span class="pl-e">android</span><span class="pl-e">:</span><span class="pl-e">value</span>=<span class="pl-s"><span class="pl-pds">"</span>true<span class="pl-pds">"</span></span> /></pre></div>
</li>
</ul>
</li>
</ul>
<h3>Fixes</h3>
<ul>
<li>Extract <code>SpotlightIntegration</code> to separate <code>sentry-spotlight</code> module to prevent insecure HTTP URLs from appearing in release APKs (<a href="https://github.com/getsentry/sentry-java/pull/5064" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5064/hovercard">#5064</a>)
<ul>
<li><strong>Breaking:</strong> Users who enable Spotlight must now add the <code>io.sentry:sentry-spotlight</code> dependency:
<div class="highlight highlight-source-kotlin notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dependencies {
debugImplementation("io.sentry:sentry-spotlight:<version>")
}"><pre>dependencies {
debugImplementation(<span class="pl-s"><span class="pl-pds">"</span>io.sentry:sentry-spotlight:<version><span class="pl-pds">"</span></span>)
}</pre></div>
</li>
</ul>
</li>
<li>Fix scroll target detection for Jetpack Compose (<a href="https://github.com/getsentry/sentry-java/pull/5017" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5017/hovercard">#5017</a>)</li>
<li>No longer fork Sentry <code>Scopes</code> for <code>reactor-kafka</code> consumer poll <code>Runnable</code> (<a href="https://github.com/getsentry/sentry-java/pull/5080" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5080/hovercard">#5080</a>)
<ul>
<li>This was causing a memory leak because <code>reactor-kafka</code>'s poll event reschedules itself infinitely, and each invocation of <code>SentryScheduleHook</code> created forked scopes with a parent reference, building an unbounded chain that couldn't be garbage collected.</li>
</ul>
</li>
<li>Fix cold/warm app start type detection for Android devices running API level 34+ (<a href="https://github.com/getsentry/sentry-java/pull/4999" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4999/hovercard">#4999</a>)</li>
</ul>
<h3>Internal</h3>
<ul>
<li>Establish new native exception mechanisms to differentiate events generated by <code>sentry-native</code> from <code>ApplicationExitInfo</code>. (<a href="https://github.com/getsentry/sentry-java/pull/5052" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5052/hovercard">#5052</a>)</li>
<li>Set <code>write</code> permission for <code>statuses</code> in the changelog preview GHA workflow. (<a href="https://github.com/getsentry/sentry-java/pull/5053" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5053/hovercard">#5053</a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>Bump Native SDK from v0.12.3 to v0.12.4 (<a href="https://github.com/getsentry/sentry-java/pull/5061" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5061/hovercard">#5061</a>)
<ul>
<li><a href="https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0124">changelog</a></li>
<li><a href="https://github.com/getsentry/sentry-native/compare/0.12.3...0.12.4">diff</a></li>
</ul>
</li>
</ul>sentry-release-bot[bot]tag:github.com,2008:Repository/3368190/8.31.02026-02-25T13:00:16Z8.31.0 (Stable)<h3>Features</h3>
<ul>
<li>Added <code>io.sentry.ndk.sdk-name</code> Android manifest option to configure the native SDK's name (<a href="https://github.com/getsentry/sentry-java/pull/5027" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5027/hovercard">#5027</a>)</li>
<li>Replace <code>sentry.trace.parent_span_id</code> attribute with <code>spanId</code> property on <code>SentryLogEvent</code> (<a href="https://github.com/getsentry/sentry-java/pull/5040" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5040/hovercard">#5040</a>)</li>
</ul>
<h3>Fixes</h3>
<ul>
<li>Only attach user attributes to logs if <code>sendDefaultPii</code> is enabled (<a href="https://github.com/getsentry/sentry-java/pull/5036" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5036/hovercard">#5036</a>)</li>
<li>Reject new logs if <code>LoggerBatchProcessor</code> is shutting down (<a href="https://github.com/getsentry/sentry-java/pull/5041" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5041/hovercard">#5041</a>)</li>
<li>Downgrade protobuf-javalite dependency from 4.33.1 to 3.25.8 (<a href="https://github.com/getsentry/sentry-java/pull/5044" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5044/hovercard">#5044</a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>Bump Native SDK from v0.12.2 to v0.12.3 (<a href="https://github.com/getsentry/sentry-java/pull/5012" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5012/hovercard">#5012</a>)
<ul>
<li><a href="https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0123">changelog</a></li>
<li><a href="https://github.com/getsentry/sentry-native/compare/0.12.2...0.12.3">diff</a></li>
</ul>
</li>
</ul>sentry-release-bot[bot]tag:github.com,2008:Repository/3368190/8.30.02026-01-15T10:01:08Z8.30.0<h3>Fixes</h3>
<ul>
<li>Fix ANRs when collecting device context (<a href="https://github.com/getsentry/sentry-java/pull/4970" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4970/hovercard">#4970</a>)
<ul>
<li><strong>IMPORTANT:</strong> This disables collecting external storage size (total/free) by default, to enable it back<br>
use <code>options.isCollectExternalStorageContext = true</code> or <code><meta-data android:name="io.sentry.external-storage-context" android:value="true" /></code></li>
</ul>
</li>
<li>Fix <code>NullPointerException</code> when reading ANR marker (<a href="https://github.com/getsentry/sentry-java/pull/4979" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4979/hovercard">#4979</a>)</li>
<li>Report discarded log in batch processor as <code>log_byte</code> (<a href="https://github.com/getsentry/sentry-java/pull/4971" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4971/hovercard">#4971</a>)</li>
</ul>
<h3>Improvements</h3>
<ul>
<li>Expose <code>MAX_EVENT_SIZE_BYTES</code> constant in SentryOptions (<a href="https://github.com/getsentry/sentry-java/pull/4962" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4962/hovercard">#4962</a>)</li>
<li>Discard envelopes on <code>4xx</code> and <code>5xx</code> response (<a href="https://github.com/getsentry/sentry-java/pull/4950" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4950/hovercard">#4950</a>)
<ul>
<li>This aims to not overwhelm Sentry after an outage or load shedding (including HTTP 429) where too many events are sent at once</li>
</ul>
</li>
</ul>
<h3>Feature</h3>
<ul>
<li>Add a Tombstone integration that detects native crashes without relying on the NDK integration, but instead using <code>ApplicationExitInfo.REASON_CRASH_NATIVE</code> on Android 12+. (<a href="https://github.com/getsentry/sentry-java/pull/4933" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4933/hovercard">#4933</a>)
<ul>
<li>Currently exposed via options as an <em>internal</em> API only.</li>
<li>If enabled alongside the NDK integration, crashes will be reported as two separate events. Users should enable only one; deduplication between both integrations will be added in a future release.</li>
</ul>
</li>
<li>Add Sentry Metrics to Java SDK (<a href="https://github.com/getsentry/sentry-java/pull/5026" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/5026/hovercard">#5026</a>)
<ul>
<li>Metrics are enabled by default</li>
<li>APIs are namespaced under <code>Sentry.metrics()</code></li>
<li>We offer the following APIs:
<ul>
<li><code>count</code>: A metric that increments counts</li>
<li><code>gauge</code>: A metric that tracks a value that can go up or down</li>
<li><code>distribution</code>: A metric that tracks the statistical distribution of values</li>
</ul>
</li>
<li>For more details, see the Metrics documentation: <a href="https://docs.sentry.io/product/explore/metrics/getting-started/" rel="nofollow">https://docs.sentry.io/product/explore/metrics/getting-started/</a></li>
</ul>
</li>
</ul>sentry-release-bot[bot]tag:github.com,2008:Repository/3368190/8.29.02026-01-23T14:47:06Z8.29.0 (Stable)<h3>Fixes</h3>
<ul>
<li>Support serialization of primitive arrays (boolean[], byte[], short[], char[], int[], long[], float[], double[]) (<a href="https://github.com/getsentry/sentry-java/pull/4968" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4968/hovercard">#4968</a>)</li>
<li>Session Replay: Improve network body parsing and truncation handling (<a href="https://github.com/getsentry/sentry-java/pull/4958" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4958/hovercard">#4958</a>)</li>
</ul>
<h3>Internal</h3>
<ul>
<li>Support <code>metric</code> envelope item type (<a href="https://github.com/getsentry/sentry-java/pull/4956" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4956/hovercard">#4956</a>)</li>
</ul>sentry-release-bot[bot]tag:github.com,2008:Repository/3368190/8.28.02025-12-04T14:05:09Z8.28.0<h3>Features</h3>
<ul>
<li>Android: Flush logs when app enters background (<a href="https://github.com/getsentry/sentry-java/pull/4951" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4951/hovercard">#4951</a>)</li>
<li>Add option to capture additional OkHttp network request/response details in session replays (<a href="https://github.com/getsentry/sentry-java/pull/4919" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4919/hovercard">#4919</a>)
<ul>
<li>Depends on <code>SentryOkHttpInterceptor</code> to intercept the request and extract request/response bodies</li>
<li>To enable, add url regexes via the <code>io.sentry.session-replay.network-detail-allow-urls</code> metadata tag in AndroidManifest (<a href="https://github.com/getsentry/sentry-java/blob/b03edbb1b0d8b871c62a09bc02cbd8a4e1f6fea1/sentry-samples/sentry-samples-android/src/main/AndroidManifest.xml#L196-L205">code sample</a>)
<ul>
<li>Or you can manually specify SentryReplayOptions via <code>SentryAndroid#init</code>:<br>
<em>(Make sure you disable the auto init via manifest meta-data: io.sentry.auto-init=false)</em></li>
</ul>
</li>
</ul>
</li>
</ul>
<details>
<summary>Kotlin</summary>
<div class="highlight highlight-source-kotlin notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="SentryAndroid.init(
this,
options -> {
// options.dsn = "https://[email protected]/0"
// options.sessionReplay.sessionSampleRate = 1.0
// options.sessionReplay.onErrorSampleRate = 1.0
// ..
options.sessionReplay.networkDetailAllowUrls = listOf(".*")
options.sessionReplay.networkDetailDenyUrls = listOf(".*deny.*")
options.sessionReplay.networkRequestHeaders = listOf("Authorization", "X-Custom-Header", "X-Test-Request")
options.sessionReplay.networkResponseHeaders = listOf("X-Response-Time", "X-Cache-Status", "X-Test-Response")
});"><pre><span class="pl-en">SentryAndroid</span>.<span class="pl-en">init</span>(
<span class="pl-c1">this</span>,
options <span class="pl-k">-></span> {
<span class="pl-c"><span class="pl-c">//</span> options.dsn = "https://[email protected]/0"</span>
<span class="pl-c"><span class="pl-c">//</span> options.sessionReplay.sessionSampleRate = 1.0</span>
<span class="pl-c"><span class="pl-c">//</span> options.sessionReplay.onErrorSampleRate = 1.0</span>
<span class="pl-c"><span class="pl-c">//</span> ..</span>
options.sessionReplay.networkDetailAllowUrls <span class="pl-k">=</span> <span class="pl-c1">listOf</span>(<span class="pl-s"><span class="pl-pds">"</span>.*<span class="pl-pds">"</span></span>)
options.sessionReplay.networkDetailDenyUrls <span class="pl-k">=</span> <span class="pl-c1">listOf</span>(<span class="pl-s"><span class="pl-pds">"</span>.*deny.*<span class="pl-pds">"</span></span>)
options.sessionReplay.networkRequestHeaders <span class="pl-k">=</span> <span class="pl-c1">listOf</span>(<span class="pl-s"><span class="pl-pds">"</span>Authorization<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>X-Custom-Header<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>X-Test-Request<span class="pl-pds">"</span></span>)
options.sessionReplay.networkResponseHeaders <span class="pl-k">=</span> <span class="pl-c1">listOf</span>(<span class="pl-s"><span class="pl-pds">"</span>X-Response-Time<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>X-Cache-Status<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>X-Test-Response<span class="pl-pds">"</span></span>)
});</pre></div>
</details>
<details>
<summary>Java</summary>
<div class="highlight highlight-source-java notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="SentryAndroid.init(
this,
options -> {
options.getSessionReplay().setNetworkDetailAllowUrls(Arrays.asList(".*"));
options.getSessionReplay().setNetworkDetailDenyUrls(Arrays.asList(".*deny.*"));
options.getSessionReplay().setNetworkRequestHeaders(
Arrays.asList("Authorization", "X-Custom-Header", "X-Test-Request"));
options.getSessionReplay().setNetworkResponseHeaders(
Arrays.asList("X-Response-Time", "X-Cache-Status", "X-Test-Response"));
});
"><pre><span class="pl-smi">SentryAndroid</span>.<span class="pl-en">init</span>(
<span class="pl-smi">this</span>,
<span class="pl-s1">options</span> -> {
<span class="pl-s1">options</span>.<span class="pl-en">getSessionReplay</span>().<span class="pl-en">setNetworkDetailAllowUrls</span>(<span class="pl-smi">Arrays</span>.<span class="pl-en">asList</span>(<span class="pl-s">".*"</span>));
<span class="pl-s1">options</span>.<span class="pl-en">getSessionReplay</span>().<span class="pl-en">setNetworkDetailDenyUrls</span>(<span class="pl-smi">Arrays</span>.<span class="pl-en">asList</span>(<span class="pl-s">".*deny.*"</span>));
<span class="pl-s1">options</span>.<span class="pl-en">getSessionReplay</span>().<span class="pl-en">setNetworkRequestHeaders</span>(
<span class="pl-smi">Arrays</span>.<span class="pl-en">asList</span>(<span class="pl-s">"Authorization"</span>, <span class="pl-s">"X-Custom-Header"</span>, <span class="pl-s">"X-Test-Request"</span>));
<span class="pl-s1">options</span>.<span class="pl-en">getSessionReplay</span>().<span class="pl-en">setNetworkResponseHeaders</span>(
<span class="pl-smi">Arrays</span>.<span class="pl-en">asList</span>(<span class="pl-s">"X-Response-Time"</span>, <span class="pl-s">"X-Cache-Status"</span>, <span class="pl-s">"X-Test-Response"</span>));
});</pre></div>
</details>
<h3>Improvements</h3>
<ul>
<li>Avoid forking <code>rootScopes</code> for Reactor if current thread has <code>NoOpScopes</code> (<a href="https://github.com/getsentry/sentry-java/pull/4793" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4793/hovercard">#4793</a>)
<ul>
<li>This reduces the SDKs overhead by avoiding unnecessary scope forks</li>
</ul>
</li>
</ul>
<h3>Fixes</h3>
<ul>
<li>Fix missing thread stacks for ANRv1 events (<a href="https://github.com/getsentry/sentry-java/pull/4918" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4918/hovercard">#4918</a>)</li>
<li>Fix handling of unparseable mime-type on request filter (<a href="https://github.com/getsentry/sentry-java/pull/4939" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4939/hovercard">#4939</a>)</li>
</ul>
<h3>Internal</h3>
<ul>
<li>Support <code>span</code> envelope item type (<a href="https://github.com/getsentry/sentry-java/pull/4935" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4935/hovercard">#4935</a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>Bump Native SDK from v0.12.1 to v0.12.2 (<a href="https://github.com/getsentry/sentry-java/pull/4944" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4944/hovercard">#4944</a>)
<ul>
<li><a href="https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0122">changelog</a></li>
<li><a href="https://github.com/getsentry/sentry-native/compare/0.12.1...0.12.2">diff</a></li>
</ul>
</li>
</ul>sentry-release-bot[bot]tag:github.com,2008:Repository/3368190/8.27.12025-11-24T13:32:48Z8.27.1<h3>Fixes</h3>
<ul>
<li>Do not log if <code>sentry.properties</code> in rundir has not been found (<a href="https://github.com/getsentry/sentry-java/pull/4929" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-java/pull/4929/hovercard">#4929</a>)</li>
</ul>sentry-release-bot[bot]