[mpp] Migrate AGP Compatbility checks to the new infra

This commit is contained in:
Dmitry Savvinov
2023-03-15 16:57:54 +01:00
committed by Space Team
parent bb3dc145e5
commit 6452c22430
12 changed files with 158 additions and 126 deletions
@@ -7,7 +7,10 @@ package org.jetbrains.kotlin.gradle.plugin
import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_ANDROID_GRADLE_PLUGIN_COMPATIBILITY_NO_WARN
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics.FailedToGetAgpVersionWarning
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics.IncompatibleAgpVersionTooHighWarning
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics.IncompatibleAgpVersionTooLowWarning
import org.jetbrains.kotlin.gradle.plugin.diagnostics.kotlinToolingDiagnosticsCollector
import org.jetbrains.kotlin.gradle.utils.androidPluginIds
import org.jetbrains.kotlin.gradle.utils.findAppliedAndroidPluginIdOrNull
import org.jetbrains.kotlin.gradle.utils.getOrPutRootProjectProperty
@@ -21,11 +24,6 @@ internal object KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheck {
maxSupportedVersion = AndroidGradlePluginVersionRange.Version(8, 0)
)
/**
* Used to store previously emitted messages in the build
*/
private const val PROPERTY_KEY_EMITTED_MESSAGES = "KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheck.emittedMessages"
/**
* Used to store project paths that executed this health check
*/
@@ -70,31 +68,19 @@ internal object KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheck {
}
fun Project.runMultiplatformAndroidGradlePluginCompatibilityHealthCheckWhenAndroidIsApplied(
warningLogger: (warningMessage: String) -> Unit = project.logger::warn,
androidGradlePluginVersionProvider: AndroidGradlePluginVersionProvider = AndroidGradlePluginVersionProvider.Default
) {
val emittedMessages = project.getOrPutRootProjectProperty(PROPERTY_KEY_EMITTED_MESSAGES) { mutableSetOf<String>() }
val deduplicateWarningMessageLogger = { message: String ->
if (emittedMessages.add(message)) {
warningLogger(message)
}
}
val executed = AtomicBoolean(false)
androidPluginIds.forEach { id ->
plugins.withId(id) {
if (!executed.getAndSet(true)) {
runMultiplatformAndroidGradlePluginCompatibilityHealthCheck(
deduplicateWarningMessageLogger, androidGradlePluginVersionProvider
)
runMultiplatformAndroidGradlePluginCompatibilityHealthCheck(androidGradlePluginVersionProvider)
}
}
}
}
fun Project.runMultiplatformAndroidGradlePluginCompatibilityHealthCheck(
warningLogger: (warningMessage: String) -> Unit = project.logger::warn,
androidGradlePluginVersionProvider: AndroidGradlePluginVersionProvider = AndroidGradlePluginVersionProvider.Default,
compatibleAndroidGradlePluginVersionRange: AndroidGradlePluginVersionRange =
KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheck.compatibleAndroidGradlePluginVersionRange
@@ -105,46 +91,38 @@ internal object KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheck {
/* Return when no android plugin is applied */
findAppliedAndroidPluginIdOrNull() ?: return@check
val collector = project.kotlinToolingDiagnosticsCollector
val androidGradlePluginVersion = androidGradlePluginVersionProvider.getAndroidGradlePluginVersion()
?: return warningLogger(Messages.failedGettingAndroidGradlePluginVersion())
if (androidGradlePluginVersion == null) {
collector.reportOncePerGradleBuild(project, FailedToGetAgpVersionWarning())
return@check
}
val minSupportedRendered = compatibleAndroidGradlePluginVersionRange.minSupportedVersion.major.toString() +
"." + compatibleAndroidGradlePluginVersionRange.minSupportedVersion.minor
val maxTestedRendered = compatibleAndroidGradlePluginVersionRange.maxSupportedVersion.major.toString() +
"." + compatibleAndroidGradlePluginVersionRange.maxSupportedVersion.minor
if (compatibleAndroidGradlePluginVersionRange.isTooLow(androidGradlePluginVersion)) {
warningLogger(Messages.androidGradlePluginVersionTooLow(androidGradlePluginVersion.toString()))
collector.reportOncePerGradleBuild(
project,
IncompatibleAgpVersionTooLowWarning(
androidGradlePluginVersion.toString(),
minSupportedRendered,
maxTestedRendered
)
)
}
if (compatibleAndroidGradlePluginVersionRange.isTooHigh(androidGradlePluginVersion)) {
warningLogger(Messages.androidGradlePluginVersionTooHigh(androidGradlePluginVersion.toString()))
}
}
object Messages {
fun failedGettingAndroidGradlePluginVersion() =
"w: Failed to get AndroidGradlePluginVersion"
fun androidGradlePluginVersionTooLow(androidGradlePluginVersionString: String) = createCompatibilityWarningMessage(
"The applied Android Gradle Plugin version ($androidGradlePluginVersionString) is lower than the minimum supported"
)
fun androidGradlePluginVersionTooHigh(androidGradlePluginVersionString: String) = createCompatibilityWarningMessage(
"The applied Android Gradle Plugin version ($androidGradlePluginVersionString) " +
"is higher than the maximum known to the Kotlin Gradle Plugin. " +
"Tooling stability in such configuration isn't tested, please report encountered issues to https://kotl.in/issue"
)
private fun createCompatibilityWarningMessage(warning: String) = buildString {
appendLine("w: Kotlin Multiplatform <-> Android Gradle Plugin compatibility issue: $warning")
appendLine(
"Minimum supported Android Gradle Plugin version: " +
"${compatibleAndroidGradlePluginVersionRange.minSupportedVersion.major}." +
"${compatibleAndroidGradlePluginVersionRange.minSupportedVersion.minor}"
collector.reportOncePerGradleBuild(
project,
IncompatibleAgpVersionTooHighWarning(
androidGradlePluginVersion.toString(),
minSupportedRendered,
maxTestedRendered
)
)
appendLine(
"Maximum tested Android Gradle Plugin version: " +
"${compatibleAndroidGradlePluginVersionRange.maxSupportedVersion.major}." +
"${compatibleAndroidGradlePluginVersionRange.maxSupportedVersion.minor}"
)
appendLine("To suppress this message add '$KOTLIN_MPP_ANDROID_GRADLE_PLUGIN_COMPATIBILITY_NO_WARN=true' to your gradle.properties")
}
}
}
@@ -127,4 +127,38 @@ object KotlinToolingDiagnostics {
""".trimIndent()
)
}
object IncompatibleAgpVersionTooHighWarning : ToolingDiagnosticFactory(WARNING) {
operator fun invoke(androidGradlePluginVersionString: String, minSupported: String, maxTested: String) = build(
"""
Kotlin Multiplatform <-> Android Gradle Plugin compatibility issue:
The applied Android Gradle Plugin version ($androidGradlePluginVersionString) is higher
than the maximum known to the Kotlin Gradle Plugin.
Tooling stability in such configuration isn't tested, please report encountered issues to https://kotl.in/issue"
Minimum supported Android Gradle Plugin version: $minSupported
Maximum tested Android Gradle Plugin version: $maxTested
To suppress this message add '${PropertiesProvider.PropertyNames.KOTLIN_MPP_ANDROID_GRADLE_PLUGIN_COMPATIBILITY_NO_WARN}=true' to your gradle.properties
""".trimIndent()
)
}
object IncompatibleAgpVersionTooLowWarning : ToolingDiagnosticFactory(WARNING) {
operator fun invoke(androidGradlePluginVersionString: String, minSupported: String, maxTested: String) = build(
"""
Kotlin Multiplatform <-> Android Gradle Plugin compatibility issue:
The applied Android Gradle Plugin version ($androidGradlePluginVersionString) is lower than the minimum supported
Minimum supported Android Gradle Plugin version: $minSupported
Maximum tested Android Gradle Plugin version: $maxTested
To suppress this message add '${PropertiesProvider.PropertyNames.KOTLIN_MPP_ANDROID_GRADLE_PLUGIN_COMPATIBILITY_NO_WARN}=true' to your gradle.properties
""".trimIndent()
)
}
object FailedToGetAgpVersionWarning : ToolingDiagnosticFactory(WARNING) {
operator fun invoke() = build("Failed to get AndroidGradlePluginVersion")
}
}
@@ -8,16 +8,17 @@
package org.jetbrains.kotlin.gradle.unitTests
import com.android.build.gradle.LibraryPlugin
import org.gradle.api.Project
import org.gradle.testfixtures.ProjectBuilder
import org.jetbrains.kotlin.gradle.plugin.AndroidGradlePluginVersion
import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheck.AndroidGradlePluginVersionProvider
import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheck.AndroidGradlePluginVersionRange
import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheck.Messages
import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheck.PROPERTY_KEY_EXECUTED_PROJECT_PATHS
import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheck.compatibleAndroidGradlePluginVersionRange
import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheck.runMultiplatformAndroidGradlePluginCompatibilityHealthCheck
import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheck.runMultiplatformAndroidGradlePluginCompatibilityHealthCheckWhenAndroidIsApplied
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.diagnostics.kotlinToolingDiagnosticsCollector
import org.jetbrains.kotlin.gradle.util.*
import org.jetbrains.kotlin.gradle.utils.getOrPutRootProjectProperty
import org.junit.Test
@@ -30,18 +31,12 @@ class KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheckTest {
val project by lazy {
buildProjectWithMPP {
setMultiplatformAndroidSourceSetLayoutVersion(2) // To not provoke warnings
plugins.apply(LibraryPlugin::class.java)
kotlin { androidTarget() }
}
}
private val testLogger = object : (String) -> Unit {
val messages = mutableListOf<String>()
override fun invoke(message: String) {
messages.add(message)
}
}
internal class FixedAndroidGradlePluginVersionProvider(private val version: String?) : AndroidGradlePluginVersionProvider {
override fun getAndroidGradlePluginVersion(): AndroidGradlePluginVersion? {
if (version == null) return null
@@ -49,82 +44,75 @@ class KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheckTest {
}
}
// Hardcode it so that testdata doesn't change when the version range is bumped
private val AGP_COMPATIBILITY_RANGE_FOR_TESTS = AndroidGradlePluginVersionRange(
minSupportedVersion = AndroidGradlePluginVersionRange.Version(4, 2),
maxSupportedVersion = AndroidGradlePluginVersionRange.Version(8, 0)
)
private fun runAgpCompatiblityCheck(agpVersion: AndroidGradlePluginVersion) {
project.runMultiplatformAndroidGradlePluginCompatibilityHealthCheck(
FixedAndroidGradlePluginVersionProvider(agpVersion.toString()),
AGP_COMPATIBILITY_RANGE_FOR_TESTS
)
}
@Test
fun `test - version too low - major`() {
val androidGradlePluginVersion = AndroidGradlePluginVersion(
major = compatibleAndroidGradlePluginVersionRange.minSupportedVersion.major - 1,
minor = compatibleAndroidGradlePluginVersionRange.minSupportedVersion.minor
major = AGP_COMPATIBILITY_RANGE_FOR_TESTS.minSupportedVersion.major - 1,
minor = AGP_COMPATIBILITY_RANGE_FOR_TESTS.minSupportedVersion.minor
)
project.runMultiplatformAndroidGradlePluginCompatibilityHealthCheck(
testLogger, FixedAndroidGradlePluginVersionProvider(androidGradlePluginVersion.toString())
)
runAgpCompatiblityCheck(androidGradlePluginVersion)
assertEquals(Messages.androidGradlePluginVersionTooLow(androidGradlePluginVersion.toString()), assertSingleWarningMessage())
project.checkDiagnostics("agpCompatibility/versionTooLowMajor")
}
@Test
fun `test - version too low - minor`() {
val androidGradlePluginVersion = AndroidGradlePluginVersion(1, 1)
val compatibleAndroidGradlePluginVersionRange = AndroidGradlePluginVersionRange(
minSupportedVersionMajor = 1, minSupportedVersionMinor = 2,
maxSupportedVersionMajor = 2
val androidGradlePluginVersion = AndroidGradlePluginVersion(
major = AGP_COMPATIBILITY_RANGE_FOR_TESTS.minSupportedVersion.major,
minor = AGP_COMPATIBILITY_RANGE_FOR_TESTS.minSupportedVersion.minor - 1
)
project.runMultiplatformAndroidGradlePluginCompatibilityHealthCheck(
testLogger, FixedAndroidGradlePluginVersionProvider(androidGradlePluginVersion.toString()),
compatibleAndroidGradlePluginVersionRange = compatibleAndroidGradlePluginVersionRange
)
runAgpCompatiblityCheck(androidGradlePluginVersion)
assertEquals(Messages.androidGradlePluginVersionTooLow(androidGradlePluginVersion.toString()), assertSingleWarningMessage())
project.checkDiagnostics("agpCompatibility/versionTooLowMinor")
}
@Test
fun `test - version too high - major`() {
val androidGradlePluginVersion = AndroidGradlePluginVersion(
major = compatibleAndroidGradlePluginVersionRange.maxSupportedVersion.major + 1,
minor = compatibleAndroidGradlePluginVersionRange.maxSupportedVersion.minor
major = AGP_COMPATIBILITY_RANGE_FOR_TESTS.maxSupportedVersion.major + 1,
minor = AGP_COMPATIBILITY_RANGE_FOR_TESTS.maxSupportedVersion.minor
)
project.runMultiplatformAndroidGradlePluginCompatibilityHealthCheck(
testLogger, FixedAndroidGradlePluginVersionProvider(androidGradlePluginVersion.toString())
)
runAgpCompatiblityCheck(androidGradlePluginVersion)
assertEquals(
Messages.androidGradlePluginVersionTooHigh(androidGradlePluginVersion.toString()), assertSingleWarningMessage()
)
project.checkDiagnostics("agpCompatibility/versionTooHighMajor")
}
@Test
fun `test - version too high - minor`() {
val androidGradlePluginVersion = AndroidGradlePluginVersion(2, 1)
val compatibleAndroidGradlePluginVersionRange = AndroidGradlePluginVersionRange(
minSupportedVersion = AndroidGradlePluginVersionRange.Version(1, 0),
maxSupportedVersion = AndroidGradlePluginVersionRange.Version(2, 0)
val androidGradlePluginVersion = AndroidGradlePluginVersion(
major = AGP_COMPATIBILITY_RANGE_FOR_TESTS.maxSupportedVersion.major,
minor = AGP_COMPATIBILITY_RANGE_FOR_TESTS.maxSupportedVersion.minor + 1
)
project.runMultiplatformAndroidGradlePluginCompatibilityHealthCheck(
testLogger, FixedAndroidGradlePluginVersionProvider(androidGradlePluginVersion.toString()),
compatibleAndroidGradlePluginVersionRange = compatibleAndroidGradlePluginVersionRange
)
runAgpCompatiblityCheck(androidGradlePluginVersion)
assertEquals(
Messages.androidGradlePluginVersionTooHigh(androidGradlePluginVersion.toString()), assertSingleWarningMessage()
)
project.checkDiagnostics("agpCompatibility/versionTooHighMinor")
}
@Test
fun `test - missing Android Gradle Plugin version string`() {
project.runMultiplatformAndroidGradlePluginCompatibilityHealthCheck(
testLogger, FixedAndroidGradlePluginVersionProvider(null)
FixedAndroidGradlePluginVersionProvider(null)
)
assertEquals(
Messages.failedGettingAndroidGradlePluginVersion(), assertSingleWarningMessage()
)
project.checkDiagnostics("agpCompatibility/missingAgpVersion")
}
@Test
@@ -132,35 +120,34 @@ class KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheckTest {
project.propertiesExtension.set(PropertiesProvider.PropertyNames.KOTLIN_MPP_ANDROID_GRADLE_PLUGIN_COMPATIBILITY_NO_WARN, "true")
/* Test with missing AGP version */
project.runMultiplatformAndroidGradlePluginCompatibilityHealthCheck(testLogger, FixedAndroidGradlePluginVersionProvider(null))
assertNoWarningMessage()
project.runMultiplatformAndroidGradlePluginCompatibilityHealthCheck(FixedAndroidGradlePluginVersionProvider(null))
project.assertNoDiagnostics()
/* Test with too low AGP version */
project.runMultiplatformAndroidGradlePluginCompatibilityHealthCheck(
testLogger, FixedAndroidGradlePluginVersionProvider("${compatibleAndroidGradlePluginVersionRange.minSupportedVersion}")
FixedAndroidGradlePluginVersionProvider("${AGP_COMPATIBILITY_RANGE_FOR_TESTS.minSupportedVersion}")
)
assertNoWarningMessage()
project.assertNoDiagnostics()
/* Test with too high AGP version */
project.runMultiplatformAndroidGradlePluginCompatibilityHealthCheck(
testLogger,
FixedAndroidGradlePluginVersionProvider("${compatibleAndroidGradlePluginVersionRange.maxSupportedVersion.major + 1}.0")
FixedAndroidGradlePluginVersionProvider("${AGP_COMPATIBILITY_RANGE_FOR_TESTS.maxSupportedVersion.major + 1}.0")
)
assertNoWarningMessage()
project.assertNoDiagnostics()
/* Re-enable the check and test with missing AGP version */
project.propertiesExtension.set(PropertiesProvider.PropertyNames.KOTLIN_MPP_ANDROID_GRADLE_PLUGIN_COMPATIBILITY_NO_WARN, "false")
project.runMultiplatformAndroidGradlePluginCompatibilityHealthCheck(testLogger, FixedAndroidGradlePluginVersionProvider(null))
assertEquals(Messages.failedGettingAndroidGradlePluginVersion(), assertSingleWarningMessage())
project.runMultiplatformAndroidGradlePluginCompatibilityHealthCheck(FixedAndroidGradlePluginVersionProvider(null))
project.checkDiagnostics("agpCompatibility/noWarnProperty")
}
@Test
fun `test - compatible versions`() {
fun assertNoWarnings(androidGradlePluginVersion: String) {
project.runMultiplatformAndroidGradlePluginCompatibilityHealthCheck(
testLogger, FixedAndroidGradlePluginVersionProvider(androidGradlePluginVersion)
FixedAndroidGradlePluginVersionProvider(androidGradlePluginVersion)
)
assertNoWarningMessage()
project.assertNoWarningMessage()
}
val minSupportedVersion = compatibleAndroidGradlePluginVersionRange.minSupportedVersion.run {
@@ -199,15 +186,15 @@ class KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheckTest {
project.gradle.registerConfigurationTimePropertiesAccessorForTests()
project.runMultiplatformAndroidGradlePluginCompatibilityHealthCheckWhenAndroidIsApplied(
testLogger, FixedAndroidGradlePluginVersionProvider(null)
FixedAndroidGradlePluginVersionProvider(null)
)
/* Not yet, executed, because Android is not applied yet */
assertNoWarningMessage()
project.assertNoWarningMessage()
addBuildEventsListenerRegistryMock(project)
project.plugins.apply(LibraryPlugin::class.java)
assertEquals(Messages.failedGettingAndroidGradlePluginVersion(), assertSingleWarningMessage())
project.checkDiagnostics("agpCompatibility/androidIsAppliedAfterCheckerCall")
}
@Test
@@ -218,10 +205,10 @@ class KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheckTest {
project.plugins.apply(LibraryPlugin::class.java)
project.runMultiplatformAndroidGradlePluginCompatibilityHealthCheckWhenAndroidIsApplied(
testLogger, FixedAndroidGradlePluginVersionProvider(null)
FixedAndroidGradlePluginVersionProvider(null)
)
assertEquals(Messages.failedGettingAndroidGradlePluginVersion(), assertSingleWarningMessage())
project.checkDiagnostics("agpCompatibility/androidIsAppliedBeforeCheckerCall")
}
@Test
@@ -233,11 +220,11 @@ class KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheckTest {
repeat(10) {
project.runMultiplatformAndroidGradlePluginCompatibilityHealthCheckWhenAndroidIsApplied(
testLogger, FixedAndroidGradlePluginVersionProvider(null)
FixedAndroidGradlePluginVersionProvider(null)
)
}
assertEquals(Messages.failedGettingAndroidGradlePluginVersion(), assertSingleWarningMessage())
project.checkDiagnostics("agpCompatibility/checkerCalledMultipleTimes")
}
@Test
@@ -328,14 +315,10 @@ class KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheckTest {
}
}
private fun assertSingleWarningMessage(): String {
if (testLogger.messages.size != 1) fail("Expected exactly one warning message logged. Found: ${testLogger.messages}")
return testLogger.messages.single()
}
private fun assertNoWarningMessage() {
if (testLogger.messages.isNotEmpty()) {
fail("Expected no warning messages to be emitted. Found: ${testLogger.messages}")
private fun Project.assertNoWarningMessage() {
val diagnostics = kotlinToolingDiagnosticsCollector.getAllDiagnostics()
if (diagnostics.isNotEmpty()) {
fail("Expected no warning messages to be emitted. Found: $diagnostics")
}
}
}
@@ -0,0 +1 @@
[FailedToGetAgpVersionWarning | WARNING] Failed to get AndroidGradlePluginVersion
@@ -0,0 +1 @@
[FailedToGetAgpVersionWarning | WARNING] Failed to get AndroidGradlePluginVersion
@@ -0,0 +1 @@
[FailedToGetAgpVersionWarning | WARNING] Failed to get AndroidGradlePluginVersion
@@ -0,0 +1 @@
[FailedToGetAgpVersionWarning | WARNING] Failed to get AndroidGradlePluginVersion
@@ -0,0 +1 @@
[FailedToGetAgpVersionWarning | WARNING] Failed to get AndroidGradlePluginVersion
@@ -0,0 +1,9 @@
[IncompatibleAgpVersionTooHighWarning | WARNING] Kotlin Multiplatform <-> Android Gradle Plugin compatibility issue:
The applied Android Gradle Plugin version (9.0.0) is higher
than the maximum known to the Kotlin Gradle Plugin.
Tooling stability in such configuration isn't tested, please report encountered issues to https://kotl.in/issue"
Minimum supported Android Gradle Plugin version: 4.2
Maximum tested Android Gradle Plugin version: 8.0
To suppress this message add 'kotlin.mpp.androidGradlePluginCompatibility.nowarn=true' to your gradle.properties
@@ -0,0 +1,9 @@
[IncompatibleAgpVersionTooHighWarning | WARNING] Kotlin Multiplatform <-> Android Gradle Plugin compatibility issue:
The applied Android Gradle Plugin version (8.1.0) is higher
than the maximum known to the Kotlin Gradle Plugin.
Tooling stability in such configuration isn't tested, please report encountered issues to https://kotl.in/issue"
Minimum supported Android Gradle Plugin version: 4.2
Maximum tested Android Gradle Plugin version: 8.0
To suppress this message add 'kotlin.mpp.androidGradlePluginCompatibility.nowarn=true' to your gradle.properties
@@ -0,0 +1,7 @@
[IncompatibleAgpVersionTooLowWarning | WARNING] Kotlin Multiplatform <-> Android Gradle Plugin compatibility issue:
The applied Android Gradle Plugin version (3.2.0) is lower than the minimum supported
Minimum supported Android Gradle Plugin version: 4.2
Maximum tested Android Gradle Plugin version: 8.0
To suppress this message add 'kotlin.mpp.androidGradlePluginCompatibility.nowarn=true' to your gradle.properties
@@ -0,0 +1,7 @@
[IncompatibleAgpVersionTooLowWarning | WARNING] Kotlin Multiplatform <-> Android Gradle Plugin compatibility issue:
The applied Android Gradle Plugin version (4.1.0) is lower than the minimum supported
Minimum supported Android Gradle Plugin version: 4.2
Maximum tested Android Gradle Plugin version: 8.0
To suppress this message add 'kotlin.mpp.androidGradlePluginCompatibility.nowarn=true' to your gradle.properties