From 66478e8bac45e8ac836a71bf0ce56b9fe13f0775 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Thu, 2 Jul 2026 13:55:07 +0200 Subject: [PATCH 1/5] added options --- src/Sentry.Unity.Android/SentryJava.cs | 3 +++ .../Android/AndroidManifestConfiguration.cs | 4 ++++ src/Sentry.Unity/SentryUnityOptions.cs | 17 ++++++++++++++ .../AndroidManifestConfigurationTests.cs | 22 +++++++++++++++++++ 4 files changed, 46 insertions(+) diff --git a/src/Sentry.Unity.Android/SentryJava.cs b/src/Sentry.Unity.Android/SentryJava.cs index 232b465a8..879082272 100644 --- a/src/Sentry.Unity.Android/SentryJava.cs +++ b/src/Sentry.Unity.Android/SentryJava.cs @@ -145,6 +145,9 @@ public void Init(SentryUnityOptions options) androidOptions.Call("setReportHistoricalAnrs", options.AndroidReportHistoricalAnrs); androidOptions.Call("setAttachAnrThreadDump", options.AndroidAttachAnrThreadDump); + androidOptions.Call("setTombstoneEnabled", options.AndroidNativeTombstoneEnabled); + androidOptions.Call("setReportHistoricalTombstones", options.AndroidReportHistoricalTombstones); + using (var logsOptions = androidOptions.Call("getLogs")) { logsOptions.Call("setEnabled", options.EnableLogs); diff --git a/src/Sentry.Unity.Editor/Android/AndroidManifestConfiguration.cs b/src/Sentry.Unity.Editor/Android/AndroidManifestConfiguration.cs index 8ab05ac8c..c5c7d12e4 100644 --- a/src/Sentry.Unity.Editor/Android/AndroidManifestConfiguration.cs +++ b/src/Sentry.Unity.Editor/Android/AndroidManifestConfiguration.cs @@ -221,6 +221,7 @@ internal void ModifyManifest(string basePath) androidManifest.SetAnr(_options.AndroidNativeAnrEnabled); androidManifest.SetPersistentScopeObserver(_options.AndroidNativeAnrEnabled); androidManifest.SetAttachAnrThreadDump(_options.AndroidAttachAnrThreadDump); + androidManifest.SetTombstone(_options.AndroidNativeTombstoneEnabled); // Disable user interaction tracking to prevent conflicts with VR platforms (e.g., Oculus InputHooks) androidManifest.SetEnableUserInteractionBreadcrumbs(false); androidManifest.SetEnableUserInteractionTracing(false); @@ -499,6 +500,9 @@ internal void SetPersistentScopeObserver(bool enableScopePersistence) internal void SetAttachAnrThreadDump(bool attachAnrThreadDump) => SetMetaData($"{SentryPrefix}.anr.attach-thread-dumps", attachAnrThreadDump.ToString()); + internal void SetTombstone(bool enableTombstone) + => SetMetaData($"{SentryPrefix}.tombstone.enable", enableTombstone.ToString()); + internal void SetNdkEnabled(bool enableNdk) => SetMetaData($"{SentryPrefix}.ndk.enable", enableNdk.ToString()); diff --git a/src/Sentry.Unity/SentryUnityOptions.cs b/src/Sentry.Unity/SentryUnityOptions.cs index 50128d4f2..143e7064f 100644 --- a/src/Sentry.Unity/SentryUnityOptions.cs +++ b/src/Sentry.Unity/SentryUnityOptions.cs @@ -257,6 +257,23 @@ public sealed class SentryUnityOptions : SentryOptions /// public bool AndroidAttachAnrThreadDump { get; set; } = false; + /// + /// Enables reporting of native crashes captured by Android's ApplicationExitInfo API as Tombstones + /// (REASON_CRASH_NATIVE) through the native (sentry-java) SDK. + /// + public bool AndroidNativeTombstoneEnabled { get; set; } = false; + + /// + /// When is enabled, controls whether sentry-java reports historical + /// Tombstones recorded by the OS (ApplicationExitInfo) from prior runs. Has no effect when + /// is false. + /// + /// + /// Runtime-only. There is no AndroidManifest meta-data tag for this option, so it is only + /// applied when is . + /// + public bool AndroidReportHistoricalTombstones { get; set; } = false; + /// /// Whether the SDK should add the NDK integration for Android /// diff --git a/test/Sentry.Unity.Editor.Tests/Android/AndroidManifestConfigurationTests.cs b/test/Sentry.Unity.Editor.Tests/Android/AndroidManifestConfigurationTests.cs index 7985af700..c23f9108a 100644 --- a/test/Sentry.Unity.Editor.Tests/Android/AndroidManifestConfigurationTests.cs +++ b/test/Sentry.Unity.Editor.Tests/Android/AndroidManifestConfigurationTests.cs @@ -185,6 +185,28 @@ public void ModifyManifest_AndroidAttachAnrThreadDump_FlowsThroughToManifest() StringAssert.Contains("", manifest); } + [Test] + public void ModifyManifest_AndroidNativeTombstoneEnabled_True_WritesTombstoneMetadataEnabled() + { + _fixture.SentryUnityOptions!.AndroidNativeTombstoneEnabled = true; + var sut = _fixture.GetSut(); + + var manifest = WithAndroidManifest(basePath => sut.ModifyManifest(basePath)); + + StringAssert.Contains("", manifest); + } + + [Test] + public void ModifyManifest_AndroidNativeTombstoneEnabled_False_WritesTombstoneMetadataDisabled() + { + _fixture.SentryUnityOptions!.AndroidNativeTombstoneEnabled = false; + var sut = _fixture.GetSut(); + + var manifest = WithAndroidManifest(basePath => sut.ModifyManifest(basePath)); + + StringAssert.Contains("", manifest); + } + [Test] public void ModifyManifest_ManifestHasDsn() { From 546ed9755ddfe7887e28c139f6b3f71c4e633c71 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Mon, 6 Jul 2026 12:11:04 +0200 Subject: [PATCH 2/5] updated changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 667ad620c..70b730008 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Features + +- Added `options.AndroidNativeTombstoneEnabled` (default `false`) and `options.AndroidReportHistoricalTombstones` (default `false`) to enable reporting of native crashes captured by Android's `ApplicationExitInfo` API as Tombstones through `sentry-java` ([#2742](https://github.com/getsentry/sentry-unity/pull/2742)) + ### Dependencies - Bump CLI from v3.5.1 to v3.6.0 ([#2741](https://github.com/getsentry/sentry-unity/pull/2741)) From 954f168ff2ef3c52f49a94ce0530c802ec763af4 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Thu, 9 Jul 2026 10:17:09 +0200 Subject: [PATCH 3/5] use all the options --- CHANGELOG.md | 2 +- .../Android/AndroidManifestConfiguration.cs | 3 +++ src/Sentry.Unity/SentryUnityOptions.cs | 6 +----- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7acffdef2..221eb2815 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ ### Features -- Added `options.AndroidNativeTombstoneEnabled` (default `false`) and `options.AndroidReportHistoricalTombstones` (default `false`) to enable reporting of native crashes captured by Android's `ApplicationExitInfo` API as Tombstones through `sentry-java` ([#2742](https://github.com/getsentry/sentry-unity/pull/2742)) +- Added `options.AndroidNativeTombstoneEnabled` (default `false`) and `options.AndroidReportHistoricalTombstones` (default `false`) to enable reporting of native crashes captured by Android's `ApplicationExitInfo` API as Tombstones ([#2742](https://github.com/getsentry/sentry-unity/pull/2742)) ### Fixes diff --git a/src/Sentry.Unity.Editor/Android/AndroidManifestConfiguration.cs b/src/Sentry.Unity.Editor/Android/AndroidManifestConfiguration.cs index c5c7d12e4..888eb55e9 100644 --- a/src/Sentry.Unity.Editor/Android/AndroidManifestConfiguration.cs +++ b/src/Sentry.Unity.Editor/Android/AndroidManifestConfiguration.cs @@ -503,6 +503,9 @@ internal void SetAttachAnrThreadDump(bool attachAnrThreadDump) internal void SetTombstone(bool enableTombstone) => SetMetaData($"{SentryPrefix}.tombstone.enable", enableTombstone.ToString()); + internal void SetTombstoneReportHistorical(bool enableTombstoneReportHistorical) + => SetMetaData($"{SentryPrefix}.tombstone.report-historical", enableTombstoneReportHistorical.ToString()); + internal void SetNdkEnabled(bool enableNdk) => SetMetaData($"{SentryPrefix}.ndk.enable", enableNdk.ToString()); diff --git a/src/Sentry.Unity/SentryUnityOptions.cs b/src/Sentry.Unity/SentryUnityOptions.cs index 143e7064f..b1fb5225e 100644 --- a/src/Sentry.Unity/SentryUnityOptions.cs +++ b/src/Sentry.Unity/SentryUnityOptions.cs @@ -259,7 +259,7 @@ public sealed class SentryUnityOptions : SentryOptions /// /// Enables reporting of native crashes captured by Android's ApplicationExitInfo API as Tombstones - /// (REASON_CRASH_NATIVE) through the native (sentry-java) SDK. + /// (REASON_CRASH_NATIVE) through the sentry-java SDK. /// public bool AndroidNativeTombstoneEnabled { get; set; } = false; @@ -268,10 +268,6 @@ public sealed class SentryUnityOptions : SentryOptions /// Tombstones recorded by the OS (ApplicationExitInfo) from prior runs. Has no effect when /// is false. /// - /// - /// Runtime-only. There is no AndroidManifest meta-data tag for this option, so it is only - /// applied when is . - /// public bool AndroidReportHistoricalTombstones { get; set; } = false; /// From f60cea59e27cc6cd5f9ddeeb91bc98bd946cbc05 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Thu, 9 Jul 2026 10:28:31 +0200 Subject: [PATCH 4/5] updated changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 221eb2815..166c5e401 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ ### Features -- Added `options.AndroidNativeTombstoneEnabled` (default `false`) and `options.AndroidReportHistoricalTombstones` (default `false`) to enable reporting of native crashes captured by Android's `ApplicationExitInfo` API as Tombstones ([#2742](https://github.com/getsentry/sentry-unity/pull/2742)) +- Added `options.AndroidNativeTombstoneEnabled` (default `false`) and `options.AndroidReportHistoricalTombstones` (default `false`) to enable reporting of native crashes captured by Android's `ApplicationExitInfo` API as Tombstones ([#2749](https://github.com/getsentry/sentry-unity/pull/2749)) ### Fixes From def093bef23f64fe61e680cf27a60e9d0d2258b4 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Thu, 9 Jul 2026 11:23:45 +0200 Subject: [PATCH 5/5] . --- src/Sentry.Unity.Android/SentryJava.cs | 2 +- .../Android/AndroidManifestConfiguration.cs | 3 +- src/Sentry.Unity/SentryUnityOptions.cs | 6 ++-- .../AndroidManifestConfigurationTests.cs | 30 ++++++++++++++++--- 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/Sentry.Unity.Android/SentryJava.cs b/src/Sentry.Unity.Android/SentryJava.cs index 879082272..2f172083f 100644 --- a/src/Sentry.Unity.Android/SentryJava.cs +++ b/src/Sentry.Unity.Android/SentryJava.cs @@ -145,7 +145,7 @@ public void Init(SentryUnityOptions options) androidOptions.Call("setReportHistoricalAnrs", options.AndroidReportHistoricalAnrs); androidOptions.Call("setAttachAnrThreadDump", options.AndroidAttachAnrThreadDump); - androidOptions.Call("setTombstoneEnabled", options.AndroidNativeTombstoneEnabled); + androidOptions.Call("setTombstoneEnabled", options.AndroidTombstoneEnabled); androidOptions.Call("setReportHistoricalTombstones", options.AndroidReportHistoricalTombstones); using (var logsOptions = androidOptions.Call("getLogs")) diff --git a/src/Sentry.Unity.Editor/Android/AndroidManifestConfiguration.cs b/src/Sentry.Unity.Editor/Android/AndroidManifestConfiguration.cs index 888eb55e9..6ac76943d 100644 --- a/src/Sentry.Unity.Editor/Android/AndroidManifestConfiguration.cs +++ b/src/Sentry.Unity.Editor/Android/AndroidManifestConfiguration.cs @@ -221,7 +221,8 @@ internal void ModifyManifest(string basePath) androidManifest.SetAnr(_options.AndroidNativeAnrEnabled); androidManifest.SetPersistentScopeObserver(_options.AndroidNativeAnrEnabled); androidManifest.SetAttachAnrThreadDump(_options.AndroidAttachAnrThreadDump); - androidManifest.SetTombstone(_options.AndroidNativeTombstoneEnabled); + androidManifest.SetTombstone(_options.AndroidTombstoneEnabled); + androidManifest.SetTombstoneReportHistorical(_options.AndroidReportHistoricalTombstones); // Disable user interaction tracking to prevent conflicts with VR platforms (e.g., Oculus InputHooks) androidManifest.SetEnableUserInteractionBreadcrumbs(false); androidManifest.SetEnableUserInteractionTracing(false); diff --git a/src/Sentry.Unity/SentryUnityOptions.cs b/src/Sentry.Unity/SentryUnityOptions.cs index b1fb5225e..9c7fd9166 100644 --- a/src/Sentry.Unity/SentryUnityOptions.cs +++ b/src/Sentry.Unity/SentryUnityOptions.cs @@ -261,12 +261,12 @@ public sealed class SentryUnityOptions : SentryOptions /// Enables reporting of native crashes captured by Android's ApplicationExitInfo API as Tombstones /// (REASON_CRASH_NATIVE) through the sentry-java SDK. /// - public bool AndroidNativeTombstoneEnabled { get; set; } = false; + public bool AndroidTombstoneEnabled { get; set; } = false; /// - /// When is enabled, controls whether sentry-java reports historical + /// When is enabled, controls whether sentry-java reports historical /// Tombstones recorded by the OS (ApplicationExitInfo) from prior runs. Has no effect when - /// is false. + /// is false. /// public bool AndroidReportHistoricalTombstones { get; set; } = false; diff --git a/test/Sentry.Unity.Editor.Tests/Android/AndroidManifestConfigurationTests.cs b/test/Sentry.Unity.Editor.Tests/Android/AndroidManifestConfigurationTests.cs index c23f9108a..3bc73051e 100644 --- a/test/Sentry.Unity.Editor.Tests/Android/AndroidManifestConfigurationTests.cs +++ b/test/Sentry.Unity.Editor.Tests/Android/AndroidManifestConfigurationTests.cs @@ -186,9 +186,9 @@ public void ModifyManifest_AndroidAttachAnrThreadDump_FlowsThroughToManifest() } [Test] - public void ModifyManifest_AndroidNativeTombstoneEnabled_True_WritesTombstoneMetadataEnabled() + public void ModifyManifest_AndroidTombstoneEnabledTrue_WritesCorrectMetaData() { - _fixture.SentryUnityOptions!.AndroidNativeTombstoneEnabled = true; + _fixture.SentryUnityOptions!.AndroidTombstoneEnabled = true; var sut = _fixture.GetSut(); var manifest = WithAndroidManifest(basePath => sut.ModifyManifest(basePath)); @@ -197,9 +197,9 @@ public void ModifyManifest_AndroidNativeTombstoneEnabled_True_WritesTombstoneMet } [Test] - public void ModifyManifest_AndroidNativeTombstoneEnabled_False_WritesTombstoneMetadataDisabled() + public void ModifyManifest_AndroidTombstoneEnabledFalse_WritesCorrectMetaData() { - _fixture.SentryUnityOptions!.AndroidNativeTombstoneEnabled = false; + _fixture.SentryUnityOptions!.AndroidTombstoneEnabled = false; var sut = _fixture.GetSut(); var manifest = WithAndroidManifest(basePath => sut.ModifyManifest(basePath)); @@ -207,6 +207,28 @@ public void ModifyManifest_AndroidNativeTombstoneEnabled_False_WritesTombstoneMe StringAssert.Contains("", manifest); } + [Test] + public void ModifyManifest_AndroidTombstoneReportHistoricalTrue_WritesCorrectMetaData() + { + _fixture.SentryUnityOptions!.AndroidReportHistoricalTombstones = true; + var sut = _fixture.GetSut(); + + var manifest = WithAndroidManifest(basePath => sut.ModifyManifest(basePath)); + + StringAssert.Contains("", manifest); + } + + [Test] + public void ModifyManifest_AndroidTombstoneReportHistoricalFalse_WritesCorrectMetaData() + { + _fixture.SentryUnityOptions!.AndroidReportHistoricalTombstones = false; + var sut = _fixture.GetSut(); + + var manifest = WithAndroidManifest(basePath => sut.ModifyManifest(basePath)); + + StringAssert.Contains("", manifest); + } + [Test] public void ModifyManifest_ManifestHasDsn() {