Skip to content

build: Add Java 8 API compatibility checks#5745

Draft
adinauer wants to merge 1 commit into
mainfrom
ci/java8-api-compatibility
Draft

build: Add Java 8 API compatibility checks#5745
adinauer wants to merge 1 commit into
mainfrom
ci/java8-api-compatibility

Conversation

@adinauer

@adinauer adinauer commented Jul 8, 2026

Copy link
Copy Markdown
Member

📜 Description

Add Java 8 runtime API compatibility coverage to JVM SDK modules using Animal Sniffer and the Codehaus Java 8 signature.

This applies ru.vyarus.animalsniffer to Java 8 java-library SDK modules that were missing it and adds:

org.codehaus.mojo.signature:java18:1.0@signature

to those modules, with the signature version defined in gradle/libs.versions.toml as java18Signature. Modules that already used Animal Sniffer keep their existing gummy-bears signature and also get the Codehaus Java 8 signature. The plugin checks signatures independently, so the Java 8 check still catches plain JVM incompatibilities while the existing Android/desugaring coverage remains intact.

💡 Motivation and Context

We recently hit a Java 8 runtime incompatibility from a method reference that compiled on a newer JDK but is unavailable on Java 8. Targeting Java 8 bytecode is not sufficient to catch this class of issue, so published JVM SDK modules should also be checked against the Java 8 runtime API surface.

This now runs through the existing check lifecycle and therefore through the existing Build workflow on PRs and main.

Refs GH-5741

💚 How did you test it?

./gradlew spotlessApply apiDump
BUILD SUCCESSFUL
./gradlew check --no-configuration-cache -Dorg.gradle.configureondemand=false
BUILD SUCCESSFUL

The check run includes Android modules and passed, confirming the duplicated JVM Animal Sniffer configuration does not break Android builds.

A stacked validation PR intentionally introduces newer JDK API references in multiple JVM modules to confirm the new checks fail where expected.

📝 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.
  • Public API changes reviewed by another Mobile SDK team member or implemented according to the develop docs spec.

#skip-changelog

@sentry

sentry Bot commented Jul 8, 2026

Copy link
Copy Markdown

📲 Install Builds

Android

🔗 App Name App ID Version Configuration
SDK Size io.sentry.tests.size 8.48.0 (1) release

⚙️ sentry-android Build Distribution Settings

@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Performance metrics 🚀

  Plain With Sentry Diff
Startup time 315.04 ms 360.96 ms 45.92 ms
Size 0 B 0 B 0 B

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
4c04bb8 350.71 ms 413.63 ms 62.92 ms
bb0ff41 315.84 ms 350.76 ms 34.92 ms
7c1a728 289.46 ms 368.15 ms 78.69 ms
ff8eea4 313.42 ms 337.08 ms 23.66 ms
bbc35bb 298.53 ms 372.17 ms 73.64 ms
91bb874 311.00 ms 363.47 ms 52.47 ms
abfcc92 337.38 ms 427.39 ms 90.00 ms
ae7fed0 293.84 ms 380.22 ms 86.38 ms
3998a95 415.94 ms 478.54 ms 62.60 ms
d15471f 307.28 ms 381.85 ms 74.57 ms

App size

Revision Plain With Sentry Diff
4c04bb8 0 B 0 B 0 B
bb0ff41 0 B 0 B 0 B
7c1a728 0 B 0 B 0 B
ff8eea4 1.58 MiB 2.28 MiB 718.64 KiB
bbc35bb 1.58 MiB 2.12 MiB 553.01 KiB
91bb874 1.58 MiB 2.13 MiB 559.07 KiB
abfcc92 1.58 MiB 2.13 MiB 557.31 KiB
ae7fed0 1.58 MiB 2.12 MiB 551.77 KiB
3998a95 1.58 MiB 2.10 MiB 532.96 KiB
d15471f 1.58 MiB 2.13 MiB 559.54 KiB

Previous results on branch: ci/java8-api-compatibility

Startup times

Revision Plain With Sentry Diff
29117d4 315.09 ms 353.43 ms 38.34 ms
e122d12 360.71 ms 433.96 ms 73.25 ms

App size

Revision Plain With Sentry Diff
29117d4 0 B 0 B 0 B
e122d12 0 B 0 B 0 B

@adinauer

adinauer commented Jul 8, 2026

Copy link
Copy Markdown
Member Author

Tested this using #5746 and it failed for both Math.floorDiv and Objects.requireNonNullElse in different modules.

@adinauer adinauer force-pushed the ci/java8-api-compatibility branch from 3611c33 to 0229500 Compare July 8, 2026 14:09
@adinauer adinauer changed the title ci: Add Java 8 API compatibility check build: Add Java 8 API compatibility checks Jul 8, 2026
Apply Animal Sniffer to Java 8 JVM SDK modules and check them against the Codehaus Java 8 runtime signature. This catches references to newer JDK APIs while keeping the existing Android signature checks in place where they already apply.

Refs GH-5741
@adinauer adinauer force-pushed the ci/java8-api-compatibility branch from 0229500 to 305dafe Compare July 8, 2026 14:23
errorprone(libs.nopen.checker)
errorprone(libs.nullaway)

signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

why not use the version catalog for the dependency as well (instead of just the version) ?

testImplementation(libs.mockito.kotlin)
}

tasks { check { dependsOn(animalsnifferMain) } }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Check the build scan to make sure this doesn't eagerly resolve the task.

This would definitely not eagerly resolve the task:

Suggested change
tasks { check { dependsOn(animalsnifferMain) } }
tasks.check.configureEach { dependsOn(animalsnifferMain) }

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