From 1d2797eb2ab98db0a65a6aaaa738e9667c469869 Mon Sep 17 00:00:00 2001 From: Josh Kasten Date: Mon, 22 Nov 2021 15:04:03 -0800 Subject: [PATCH 1/5] tests that recreates the work-runtime:2.7.0 issue These two new tests fail on this commit and were added to show the issue We will make them pass in the next commit in this PR. --- .../com/onesignal/androidsdk/MainTest.groovy | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/test/groovy/com/onesignal/androidsdk/MainTest.groovy b/src/test/groovy/com/onesignal/androidsdk/MainTest.groovy index 63ec148..1c0d4f4 100644 --- a/src/test/groovy/com/onesignal/androidsdk/MainTest.groovy +++ b/src/test/groovy/com/onesignal/androidsdk/MainTest.groovy @@ -1274,4 +1274,35 @@ class MainTest extends Specification { then: assert results // Asserting existence and contains 1+ entries } + + // AGP task checkDebugAarMetadata has a build rule that checks for compileSdkVersion 31 + // via a minCompileSdk property defined in the aar-metadata.properties in the work-runtime-2.7.0.aar + def runGradleProjectForCompileSdkVersion30WithWorkRuntime2_7_0() { + runGradleProject([ + 'android.useAndroidX': true, + compileSdkVersion: 30, + compileLines : "implementation 'androidx.work:work-runtime:[2.0.0, 2.7.0]'", + skipGradleVersion : GRADLE_OLDEST_VERSION, + ]) + } + + def 'compileSdkVersion 30 with work-runtime:2.7.0, passes checkDebugAarMetadata'() { + GradleTestTemplate.buildArgumentSets[GRADLE_LATEST_VERSION] = [['checkDebugAarMetadata']] + + when: + def results = runGradleProjectForCompileSdkVersion30WithWorkRuntime2_7_0() + + then: + assert results // Asserting existence and contains 1+ entries + } + + def 'compileSdkVersion 30 with work-runtime:2.7.0, downgrades to 2.6.0'() { + when: + def results = runGradleProjectForCompileSdkVersion30WithWorkRuntime2_7_0() + + then: + assertResults(results) { + assert it.value.contains('androidx.work:work-runtime:[2.0.0, 2.7.0] -> 2.6.0') + } + } } From 6f69eb999354bdcc53c4513cacfba013e78babdd Mon Sep 17 00:00:00 2001 From: Josh Kasten Date: Mon, 22 Nov 2021 15:05:30 -0800 Subject: [PATCH 2/5] create getCompileSdkVersion helper method Moving into helper method as we will utilize this in the next commit --- .../com/onesignal/androidsdk/GradleProjectPlugin.groovy | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/groovy/com/onesignal/androidsdk/GradleProjectPlugin.groovy b/src/main/groovy/com/onesignal/androidsdk/GradleProjectPlugin.groovy index ab7543c..c15ef90 100644 --- a/src/main/groovy/com/onesignal/androidsdk/GradleProjectPlugin.groovy +++ b/src/main/groovy/com/onesignal/androidsdk/GradleProjectPlugin.groovy @@ -615,8 +615,12 @@ class GradleProjectPlugin implements Plugin { versionOverride['version'] = newMaxVersion } + static int getCompileSdkVersion() { + (project.android.compileSdkVersion as String).split('-')[1].toInteger() + } + static String maxAndroidSupportVersion(Map maxSupportVersionObj) { - def compileSdkVersion = (project.android.compileSdkVersion as String).split('-')[1].toInteger() + def compileSdkVersion = getCompileSdkVersion() if (compileSdkVersion <= LAST_MAJOR_ANDROID_SUPPORT_VERSION) { String maxSupportVersion = maxSupportVersionObj[compileSdkVersion] if (maxSupportVersion) From bb67462ce39ee82911f70a079a1ffbad164f7f08 Mon Sep 17 00:00:00 2001 From: Josh Kasten Date: Mon, 22 Nov 2021 15:09:35 -0800 Subject: [PATCH 3/5] rule downgrading work-runtime based on compile ver Downgrade `work-runtime` to 2.6.0 if the app's `compileSdkVersion` is 30 or lower. This prevents build errors when AGP runs the task `checkDebugAarMetadata` --- .../androidsdk/GradleProjectPlugin.groovy | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/groovy/com/onesignal/androidsdk/GradleProjectPlugin.groovy b/src/main/groovy/com/onesignal/androidsdk/GradleProjectPlugin.groovy index c15ef90..e8824bc 100644 --- a/src/main/groovy/com/onesignal/androidsdk/GradleProjectPlugin.groovy +++ b/src/main/groovy/com/onesignal/androidsdk/GradleProjectPlugin.groovy @@ -53,6 +53,7 @@ class GradleProjectPlugin implements Plugin { static final String GROUP_GMS = 'com.google.android.gms' static final String GROUP_ANDROID_SUPPORT = 'com.android.support' + static final String GROUP_ANDROIDX = 'androidx.work' static final String GROUP_FIREBASE = 'com.google.firebase' static final String GROUP_ONESIGNAL = 'com.onesignal' @@ -101,7 +102,19 @@ class GradleProjectPlugin implements Plugin { // Exists only for UPDATE_PARENT_ON_DEPENDENCY_UPGRADE (GROUP_ONESIGNAL): [ version: NO_REF_VERSION - ] + ], + + // Exists only for MODULE_DEPENDENCY_MAX_ANDROID_COMPILE_SDK + (GROUP_ANDROIDX): [ + version: NO_REF_VERSION + ], + ] + + // Sets an upper limit for specific modules based on the compileSdkVersion + static final Map> MODULE_DEPENDENCY_MAX_ANDROID_COMPILE_SDK = [ + 'androidx.work:work-runtime': [ + 30: '2.6.+', + ], ] @@ -941,10 +954,21 @@ class GradleProjectPlugin implements Plugin { } } + updateVersionModuleAlignsForCompileSdkVersion(inputModule) + if (group == GROUP_GMS && module == 'play-services') hasFullPlayServices = true } + static void updateVersionModuleAlignsForCompileSdkVersion(String module) { + def compileVersion = getCompileSdkVersion() + MODULE_DEPENDENCY_MAX_ANDROID_COMPILE_SDK[module].each {maxSdkVersion , versionMax -> + if (compileVersion <= maxSdkVersion) { + versionModuleAligns[module] = [version: versionMax] + } + } + } + static void updateVersionModuleAlignsKey(String groupAndModule, String version) { versionModuleAligns[groupAndModule] = [version: version] From 687cbead8d9fadb51aaeac71a98189814253c610 Mon Sep 17 00:00:00 2001 From: Josh Kasten Date: Mon, 22 Nov 2021 17:38:35 -0800 Subject: [PATCH 4/5] bump `compileSdkVersion` to 31 in tests This is required due the test 'Find min-support for Firebase and GMS - build' being fragile and failing due to a new Google library being available. Its pulling in `worker-runtime:2.7.0` from `play-services-ads:+` -> `play-services-ads-lite:20.5.0`. --- .../groovy/com/onesignal/androidsdk/GradleTestTemplate.groovy | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/groovy/com/onesignal/androidsdk/GradleTestTemplate.groovy b/src/test/groovy/com/onesignal/androidsdk/GradleTestTemplate.groovy index c514788..d1b0317 100644 --- a/src/test/groovy/com/onesignal/androidsdk/GradleTestTemplate.groovy +++ b/src/test/groovy/com/onesignal/androidsdk/GradleTestTemplate.groovy @@ -13,7 +13,7 @@ class GradleTestTemplate { static def buildArgumentSets = [:] static def defaultBuildParams = [ - compileSdkVersion: 30, + compileSdkVersion: 31, targetSdkVersion: 30, minSdkVersion: 16 ] @@ -162,6 +162,7 @@ class GradleTestTemplate { buildscript { repositories { maven { url 'https://maven.google.com' } + mavenCentral() jcenter() } dependencies { @@ -184,6 +185,7 @@ class GradleTestTemplate { maven { url 'https://maven.google.com' } // Local maven repo to test local libaries; such as firebase-app-unity maven { url(uri('m2repository')) } + mavenCentral() jcenter() } } From 80bb513c64793a0ce94628547a00da2c99699bb2 Mon Sep 17 00:00:00 2001 From: Josh Kasten Date: Mon, 22 Nov 2021 17:53:24 -0800 Subject: [PATCH 5/5] ensure new work-runtime rule doesn't force update Set a version range for the `work-runtime` rule so it doesn't cause it to be unintentionally upgraded. Added tests to ensure the senario is covered. --- .../androidsdk/GradleProjectPlugin.groovy | 2 +- .../com/onesignal/androidsdk/MainTest.groovy | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/main/groovy/com/onesignal/androidsdk/GradleProjectPlugin.groovy b/src/main/groovy/com/onesignal/androidsdk/GradleProjectPlugin.groovy index e8824bc..4470ba1 100644 --- a/src/main/groovy/com/onesignal/androidsdk/GradleProjectPlugin.groovy +++ b/src/main/groovy/com/onesignal/androidsdk/GradleProjectPlugin.groovy @@ -113,7 +113,7 @@ class GradleProjectPlugin implements Plugin { // Sets an upper limit for specific modules based on the compileSdkVersion static final Map> MODULE_DEPENDENCY_MAX_ANDROID_COMPILE_SDK = [ 'androidx.work:work-runtime': [ - 30: '2.6.+', + 30: '[2.0.0, 2.6.99]', ], ] diff --git a/src/test/groovy/com/onesignal/androidsdk/MainTest.groovy b/src/test/groovy/com/onesignal/androidsdk/MainTest.groovy index 1c0d4f4..a2f27bf 100644 --- a/src/test/groovy/com/onesignal/androidsdk/MainTest.groovy +++ b/src/test/groovy/com/onesignal/androidsdk/MainTest.groovy @@ -1305,4 +1305,37 @@ class MainTest extends Specification { assert it.value.contains('androidx.work:work-runtime:[2.0.0, 2.7.0] -> 2.6.0') } } + + def 'compileSdkVersion 30 with onesignal:4.6.2, passes checkDebugAarMetadata'() { + GradleTestTemplate.buildArgumentSets[GRADLE_LATEST_VERSION] = [['checkDebugAarMetadata']] + + when: + def results = runGradleProject([ + 'android.useAndroidX': true, + compileSdkVersion: 30, + compileLines : "implementation 'com.onesignal:OneSignal:4.6.2'", + skipGradleVersion : GRADLE_OLDEST_VERSION, + ]) + + then: + assert results // Asserting existence and contains 1+ entries + } + + def 'compileSdkVersion 30 with onesignal:4.6.2 & work-runtime:2.4.0 '() { + when: + def results = runGradleProject([ + 'android.useAndroidX': true, + compileSdkVersion: 30, + compileLines : ''' + implementation 'com.onesignal:OneSignal:4.6.2' + implementation 'androidx.work:work-runtime:2.4.0' + ''', + skipGradleVersion : GRADLE_OLDEST_VERSION, + ]) + + then: + assertResults(results) { + assert it.value.contains('androidx.work:work-runtime:[2.1.0, 2.7.99] -> 2.4.0') + } + } }