From b2be6b70adad173c62c0769128c15fe91777dde8 Mon Sep 17 00:00:00 2001 From: AR Abdul Azeez Date: Tue, 30 Jun 2026 15:55:19 +0530 Subject: [PATCH 1/4] fix: [SDK-4820] ship consumer dontwarn rule for OpenTelemetry to prevent R8 missing-class build failures A third-party SDK in the host app (e.g. Embrace bumping opentelemetry-bom to 1.62.0) upgrades OneSignal's transitive OpenTelemetry artifacts to a version where io.opentelemetry.api.internal.ApiUsageLogger no longer exists. The transitively-pulled opentelemetry-api-incubator alpha (via ExtendedDefaultTracer) still references that class, so the cross-version skew surfaces as fatal R8 "Missing class" errors in consuming apps even though the code path never runs. Shipping the -dontwarn io.opentelemetry.** rule in the otel module's consumer-rules.pro bundles it into the published AAR, so clients don't have to add their own keep/dontwarn rules to build. Co-authored-by: Cursor --- OneSignalSDK/onesignal/otel/consumer-rules.pro | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/OneSignalSDK/onesignal/otel/consumer-rules.pro b/OneSignalSDK/onesignal/otel/consumer-rules.pro index c5647af5b..63ef0390c 100644 --- a/OneSignalSDK/onesignal/otel/consumer-rules.pro +++ b/OneSignalSDK/onesignal/otel/consumer-rules.pro @@ -5,3 +5,12 @@ # OTel (e.g. sdk-logs AutoValue-generated types) references Google Auto Value annotations that are # not on the app classpath. Wildcard covers inner types and extensions (e.g. Memoized). -dontwarn com.google.auto.value.** + +# Another SDK in the app (e.g. one pulling a newer opentelemetry-bom) can upgrade OneSignal's +# transitive OTel artifacts to a version where internal classes have moved or been removed, while +# the transitively-pulled -alpha "incubator" artifact still references the old internals (e.g. +# io.opentelemetry.api.internal.ApiUsageLogger, referenced by ExtendedDefaultTracer in +# opentelemetry-api-incubator). That cross-version skew surfaces as fatal R8 "Missing class" errors +# in the consuming app even though the code path is never executed. Suppress those missing-class +# warnings so a third-party OTel bump can't break the host app's build. +-dontwarn io.opentelemetry.** From 1d4bab208234c83a62aee5616a57e7b896361c70 Mon Sep 17 00:00:00 2001 From: abdulraqeeb33 Date: Thu, 2 Jul 2026 20:06:31 +0530 Subject: [PATCH 2/4] fix: [SDK-4820] narrow OTel -dontwarn to incubator artifact Scope the consumer -dontwarn from io.opentelemetry.** to io.opentelemetry.api.incubator.** so R8 still surfaces missing-class warnings for OneSignal's own actively-used OTel classes (api.logs, sdk, exporter) while still suppressing the dangling ApiUsageLogger reference from the unused opentelemetry-api-incubator alpha artifact. --- OneSignalSDK/onesignal/otel/consumer-rules.pro | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/OneSignalSDK/onesignal/otel/consumer-rules.pro b/OneSignalSDK/onesignal/otel/consumer-rules.pro index 63ef0390c..38ea3159d 100644 --- a/OneSignalSDK/onesignal/otel/consumer-rules.pro +++ b/OneSignalSDK/onesignal/otel/consumer-rules.pro @@ -11,6 +11,7 @@ # the transitively-pulled -alpha "incubator" artifact still references the old internals (e.g. # io.opentelemetry.api.internal.ApiUsageLogger, referenced by ExtendedDefaultTracer in # opentelemetry-api-incubator). That cross-version skew surfaces as fatal R8 "Missing class" errors -# in the consuming app even though the code path is never executed. Suppress those missing-class -# warnings so a third-party OTel bump can't break the host app's build. --dontwarn io.opentelemetry.** +# in the consuming app even though the code path is never executed. Scope the suppression to the +# unused incubator artifact (the source of the dangling reference) so R8 still warns about +# OneSignal's own actively-used OTel classes (api.logs, sdk, exporter) if a bump breaks them. +-dontwarn io.opentelemetry.api.incubator.** From 55e6ecb4f788d6bbe98a4468c20e0ff22bd19ba8 Mon Sep 17 00:00:00 2001 From: AR Abdul Azeez Date: Thu, 2 Jul 2026 20:30:17 +0530 Subject: [PATCH 3/4] fix: [SDK-4820] match OTel missing internal classes in consumer -dontwarn so R8 skew errors are suppressed referrer-independently Co-authored-by: Cursor --- OneSignalSDK/onesignal/otel/consumer-rules.pro | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/OneSignalSDK/onesignal/otel/consumer-rules.pro b/OneSignalSDK/onesignal/otel/consumer-rules.pro index 38ea3159d..5277f1619 100644 --- a/OneSignalSDK/onesignal/otel/consumer-rules.pro +++ b/OneSignalSDK/onesignal/otel/consumer-rules.pro @@ -6,12 +6,11 @@ # not on the app classpath. Wildcard covers inner types and extensions (e.g. Memoized). -dontwarn com.google.auto.value.** -# Another SDK in the app (e.g. one pulling a newer opentelemetry-bom) can upgrade OneSignal's -# transitive OTel artifacts to a version where internal classes have moved or been removed, while -# the transitively-pulled -alpha "incubator" artifact still references the old internals (e.g. -# io.opentelemetry.api.internal.ApiUsageLogger, referenced by ExtendedDefaultTracer in -# opentelemetry-api-incubator). That cross-version skew surfaces as fatal R8 "Missing class" errors -# in the consuming app even though the code path is never executed. Scope the suppression to the -# unused incubator artifact (the source of the dangling reference) so R8 still warns about -# OneSignal's own actively-used OTel classes (api.logs, sdk, exporter) if a bump breaks them. +# Suppress R8 missing-class errors from OpenTelemetry version skew. When a host app bumps the +# transitive opentelemetry-bom, removed internal classes (e.g. io.opentelemetry.api.internal.ApiUsageLogger) +# leave dangling references from the unused opentelemetry-api-incubator alpha (ExtendedDefaultTracer). +# R8 suppresses a "Missing class" diagnostic when the MISSING class matches -dontwarn, so match the +# internal packages directly (referrer-independent). Keep the incubator rule too so warnings for +# OneSignal's actively-used OTel classes (api.logs, sdk, exporter) still surface. -dontwarn io.opentelemetry.api.incubator.** +-dontwarn io.opentelemetry.**.internal.** From 94d100b36944c6c8f48430c24a763d9922ea52b3 Mon Sep 17 00:00:00 2001 From: AR Abdul Azeez Date: Tue, 7 Jul 2026 11:49:24 +0530 Subject: [PATCH 4/4] fix: [SDK-4820] scope OTel consumer -dontwarn to api.internal package Address review feedback: the io.opentelemetry.**.internal.** wildcard would also suppress genuine missing-class errors in the OTel sdk/exporter internals that OneSignal actively uses. Narrow to io.opentelemetry.api.internal.** so it still covers the dangling ApiUsageLogger reference (referrer-independent) without masking real breakage elsewhere. Co-authored-by: Cursor --- OneSignalSDK/onesignal/otel/consumer-rules.pro | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/OneSignalSDK/onesignal/otel/consumer-rules.pro b/OneSignalSDK/onesignal/otel/consumer-rules.pro index 5277f1619..76b04edac 100644 --- a/OneSignalSDK/onesignal/otel/consumer-rules.pro +++ b/OneSignalSDK/onesignal/otel/consumer-rules.pro @@ -10,7 +10,8 @@ # transitive opentelemetry-bom, removed internal classes (e.g. io.opentelemetry.api.internal.ApiUsageLogger) # leave dangling references from the unused opentelemetry-api-incubator alpha (ExtendedDefaultTracer). # R8 suppresses a "Missing class" diagnostic when the MISSING class matches -dontwarn, so match the -# internal packages directly (referrer-independent). Keep the incubator rule too so warnings for -# OneSignal's actively-used OTel classes (api.logs, sdk, exporter) still surface. +# io.opentelemetry.api.internal package directly (referrer-independent). Scoped to api.internal (not a +# broad **.internal.** wildcard) so genuine missing-class errors in the sdk/exporter internals that +# OneSignal actively uses still surface. The incubator rule covers the unused ExtendedDefaultTracer path. -dontwarn io.opentelemetry.api.incubator.** --dontwarn io.opentelemetry.**.internal.** +-dontwarn io.opentelemetry.api.internal.**