diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5fbcc01b4..aa147fe7b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,6 +32,10 @@ jobs: working-directory: OneSignalSDK run: | ./gradlew testDebugUnitTest --console=plain --continue + - name: "[Build] Demo app (minified release)" + working-directory: OneSignalSDK + run: | + ./gradlew :app:assembleGmsRelease --console=plain - name: "[Diff Coverage] Check for bypass" id: coverage_bypass run: | diff --git a/OneSignalSDK/onesignal/notifications/consumer-rules.pro b/OneSignalSDK/onesignal/notifications/consumer-rules.pro index 815f507c1..1b0216df3 100644 --- a/OneSignalSDK/onesignal/notifications/consumer-rules.pro +++ b/OneSignalSDK/onesignal/notifications/consumer-rules.pro @@ -59,4 +59,13 @@ # Keep OneSignal WorkManager workers and constructors used for runtime instantiation. -keep class com.onesignal.notifications.internal.** extends androidx.work.ListenableWorker { public (android.content.Context, androidx.work.WorkerParameters); -} \ No newline at end of file +} + +# WorkManager instantiates InputMerger classes via reflection (InputMerger.fromClassName). +# R8 full mode (AGP 8+) strips no-arg constructors, causing: +# java.lang.NoSuchMethodException: androidx.work.OverwritingInputMerger.() +# WM-WorkerWrapper E Could not create Input Merger androidx.work.OverwritingInputMerger +# Keep all InputMerger subclasses (OverwritingInputMerger, ArrayCreatingInputMerger, etc.) +-keep class * extends androidx.work.InputMerger { + public (); +} diff --git a/examples/demo/app/build.gradle.kts b/examples/demo/app/build.gradle.kts index 9dbda6eca..1e2b3c01a 100644 --- a/examples/demo/app/build.gradle.kts +++ b/examples/demo/app/build.gradle.kts @@ -52,7 +52,11 @@ android { buildTypes { release { - isMinifyEnabled = false + // Minify MUST be enabled to exercise R8 and validate WorkManager/ProGuard rules. + // See: SDK-4185, https://github.com/OneSignal/OneSignal-Android-SDK/issues/2582 + isMinifyEnabled = true + isShrinkResources = true + signingConfig = signingConfigs.getByName("debug") proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" @@ -65,7 +69,8 @@ android { initWith(getByName("release")) isDebuggable = false isProfileable = true - isMinifyEnabled = false + isMinifyEnabled = true + isShrinkResources = true signingConfig = signingConfigs.getByName("debug") matchingFallbacks += listOf("release") } diff --git a/examples/demo/app/proguard-rules.pro b/examples/demo/app/proguard-rules.pro index f1b424510..f41ca7c47 100644 --- a/examples/demo/app/proguard-rules.pro +++ b/examples/demo/app/proguard-rules.pro @@ -19,3 +19,8 @@ # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile + +# Demo-only suppression for optional OTel transitive classes. +-dontwarn com.fasterxml.jackson.core.JsonFactory +-dontwarn com.fasterxml.jackson.core.JsonGenerator +-dontwarn com.google.auto.value.AutoValue$CopyAnnotations