From 66478e8bac45e8ac836a71bf0ce56b9fe13f0775 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Thu, 2 Jul 2026 13:55:07 +0200 Subject: [PATCH] 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() {