Skip to content

Conversation

@markushi
Copy link
Member

📜 Description

Updates targetSdk and compileSdk to API Level 36 to support Android 16.

This PR addresses breaking changes introduced in Android 16:

  • Created ThreadUtil helper class for version-aware thread ID retrieval
  • Migrated from deprecated Thread.getId() to Thread.threadId() with backward compatibility for minSdk 21
  • Updated sample app to use OnBackPressedCallback instead of deprecated onBackPressed() which is no longer called in Android 16
  • Suppressed deprecation warning for onLowMemory() (deprecated in Android 15)

💡 Motivation and Context

Android 16 (API Level 36) deprecates several APIs that the SDK currently uses:

  • Thread.getId() is deprecated in favor of Thread.threadId() (available since API 34)
  • onBackPressed() is no longer called for apps targeting Android 16

The scheduleAtFixedRate behavior change (only executing ONE missed task instead of ALL) is acceptable and even beneficial for our performance collection use case.

💚 How did you test it?

  • Built successfully with ./gradlew spotlessApply apiDump
  • All existing tests pass
  • Verified backward compatibility with version checks

📝 Checklist

  • I added GH Issue ID & Linear ID
  • I added tests to verify the changes.
  • No new PII added or SDK only sends newly added PII if sendDefaultPII is enabled.
  • I updated the docs if needed.
  • I updated the wizard if needed.
  • Review from the native team if needed.
  • No breaking change or entry added to the changelog.
  • No breaking change for hybrid SDKs or communicated to hybrid SDKs.

🔮 Next steps

  • Add to CHANGELOG.md in # Unreleased section
  • Test on Android 16 devices when available

Updates targetSdk and compileSdk to API Level 36 for Android 16 support.

Breaking changes addressed:
- Created ThreadUtil helper for version-aware thread ID retrieval
- Migrated from deprecated Thread.getId() to Thread.threadId() with backward compatibility
- Updated sample app to use OnBackPressedCallback instead of deprecated onBackPressed()

The scheduleAtFixedRate behavior change is acceptable for our performance collection use case.
@linear
Copy link

linear bot commented Jan 12, 2026

@markushi
Copy link
Member Author

@sentry review

@github-actions
Copy link
Contributor

github-actions bot commented Jan 12, 2026

Performance metrics 🚀

  Plain With Sentry Diff
Startup time 325.56 ms 398.69 ms 73.13 ms
Size 1.58 MiB 2.20 MiB 633.90 KiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
abfcc92 337.38 ms 427.39 ms 90.00 ms
d5a29b6 298.62 ms 391.78 ms 93.16 ms
ee747ae 396.82 ms 441.67 ms 44.86 ms
d15471f 294.13 ms 399.49 ms 105.36 ms
91bb874 314.47 ms 440.00 ms 125.53 ms
d15471f 307.28 ms 381.85 ms 74.57 ms
9fbb112 401.87 ms 515.87 ms 114.00 ms
ee747ae 400.46 ms 423.61 ms 23.15 ms
abfcc92 304.04 ms 370.33 ms 66.29 ms
fc5ccaf 256.80 ms 322.36 ms 65.56 ms

App size

Revision Plain With Sentry Diff
abfcc92 1.58 MiB 2.13 MiB 557.31 KiB
d5a29b6 1.58 MiB 2.12 MiB 549.37 KiB
ee747ae 1.58 MiB 2.10 MiB 530.95 KiB
d15471f 1.58 MiB 2.13 MiB 559.54 KiB
91bb874 1.58 MiB 2.13 MiB 559.07 KiB
d15471f 1.58 MiB 2.13 MiB 559.54 KiB
9fbb112 1.58 MiB 2.11 MiB 539.18 KiB
ee747ae 1.58 MiB 2.10 MiB 530.95 KiB
abfcc92 1.58 MiB 2.13 MiB 557.31 KiB
fc5ccaf 1.58 MiB 2.13 MiB 557.54 KiB

Previous results on branch: ref/android-16-target-sdk

Startup times

Revision Plain With Sentry Diff
b51aac3 315.45 ms 345.79 ms 30.34 ms

App size

Revision Plain With Sentry Diff
b51aac3 1.58 MiB 2.20 MiB 633.90 KiB

@markushi
Copy link
Member Author

Retriggered the failed CI checks. The failures appear to be pre-existing flaky tests:

  1. SentryTest > if there is work enqueued, init finalizes previous session after that work is done - Flaky test unrelated to Android 16 changes
  2. corruptEnvelope UI test on API 34/35 - Element not found issue that also occurs on main branch

These failures are not related to the Android 16 targetSdk update changes in this PR.

* @return the thread ID
*/
@SuppressWarnings("deprecation")
public static long getThreadId(final @NotNull Thread thread) {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's move this into AndroidThreadChecker.java

CHANGELOG.md Outdated
Comment on lines 14 to 17
- Update Android targetSdk to API 36 (Android 16) ([#5016](https://github.com/getsentry/sentry-java/pull/5016))
- Migrated from deprecated `Thread.getId()` to `Thread.threadId()` with backward compatibility
- Created `ThreadUtil` helper for version-aware thread ID retrieval
- Updated sample app to use `OnBackPressedCallback` instead of deprecated `onBackPressed()`
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's keep this simple.

Suggested change
- Update Android targetSdk to API 36 (Android 16) ([#5016](https://github.com/getsentry/sentry-java/pull/5016))
- Migrated from deprecated `Thread.getId()` to `Thread.threadId()` with backward compatibility
- Created `ThreadUtil` helper for version-aware thread ID retrieval
- Updated sample app to use `OnBackPressedCallback` instead of deprecated `onBackPressed()`
- Update Android targetSdk to API 36 (Android 16) ([#5016](https://github.com/getsentry/sentry-java/pull/5016))

Move getThreadId helper method from ThreadUtil into AndroidThreadChecker
to consolidate thread-related utilities. Simplify CHANGELOG entry.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
@markushi
Copy link
Member Author

Addressed PR feedback:

  • Moved getThreadId() from ThreadUtil into AndroidThreadChecker
  • Deleted ThreadUtil.java
  • Simplified CHANGELOG entry to single line

All changes have been pushed in commit 4a54919.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants