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 321.00 ms 366.07 ms 45.07 ms
Size 1.58 MiB 2.20 MiB 635.37 KiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
b77456b 393.26 ms 441.10 ms 47.84 ms
d217708 409.83 ms 474.72 ms 64.89 ms
abf451a 332.82 ms 403.67 ms 70.85 ms
d15471f 286.65 ms 314.68 ms 28.03 ms
ee747ae 382.73 ms 435.41 ms 52.68 ms
fc5ccaf 279.11 ms 353.34 ms 74.23 ms
d5a29b6 298.62 ms 391.78 ms 93.16 ms
1edbdfa 364.77 ms 450.29 ms 85.52 ms
d15471f 294.13 ms 399.49 ms 105.36 ms
27d7cf8 306.76 ms 366.66 ms 59.90 ms

App size

Revision Plain With Sentry Diff
b77456b 1.58 MiB 2.12 MiB 548.11 KiB
d217708 1.58 MiB 2.10 MiB 532.97 KiB
abf451a 1.58 MiB 2.20 MiB 635.29 KiB
d15471f 1.58 MiB 2.13 MiB 559.54 KiB
ee747ae 1.58 MiB 2.10 MiB 530.95 KiB
fc5ccaf 1.58 MiB 2.13 MiB 557.54 KiB
d5a29b6 1.58 MiB 2.12 MiB 549.37 KiB
1edbdfa 1.58 MiB 2.20 MiB 635.34 KiB
d15471f 1.58 MiB 2.13 MiB 559.54 KiB
27d7cf8 1.58 MiB 2.12 MiB 549.42 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.

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.

@romtsn
Copy link
Member

romtsn commented Jan 19, 2026

the build's still failing, let me know when it's green I can check again!

@github-actions
Copy link
Contributor

github-actions bot commented Jan 19, 2026

Semver Impact of This PR

🟢 Patch (bug fixes)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

  • Allow setting native SDK name in manifest by bitsandfoxes in #5027

Build / dependencies / internal 🔧

Deps

  • Bump JamesIves/github-pages-deploy-action from 4.7.6 to 4.8.0 by dependabot in #5015
  • Update Native SDK to v0.12.3 by github-actions in #5012
  • Bump github/codeql-action from 4.31.8 to 4.31.10 by dependabot in #5032

Other

  • (android) Update targetSdk to API 36 (Android 16) by markushi in #5016
  • (release) Switch from action-prepare-release to Craft by BYK in #5014

🤖 This preview updates automatically when you update the PR.

@markushi markushi marked this pull request as ready for review January 19, 2026 14:36
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.

3 participants