Bump minimal supported AGP to 4.1.3

^KT-53013 In Progress
This commit is contained in:
Yahor Berdnikau
2022-09-27 17:41:22 +02:00
committed by Space Team
parent b01411544a
commit faf3638c58
21 changed files with 59 additions and 88 deletions
@@ -23,9 +23,9 @@ import kotlin.test.assertNotNull
import kotlin.test.assertNull import kotlin.test.assertNull
import kotlin.test.assertTrue import kotlin.test.assertTrue
open class KotlinAndroid36GradleIT : KotlinAndroid3GradleIT() { open class KotlinAndroid41GradleIT : KotlinAndroid4GradleIT() {
override val androidGradlePluginVersion: AGPVersion override val androidGradlePluginVersion: AGPVersion
get() = AGPVersion.v3_6_0 get() = AGPVersion.v4_1_0
// AGP 3.+ is not working well with Gradle 7+ // AGP 3.+ is not working well with Gradle 7+
override val defaultGradleVersion: GradleVersionRequired override val defaultGradleVersion: GradleVersionRequired
@@ -603,7 +603,7 @@ open class KotlinAndroid36GradleIT : KotlinAndroid3GradleIT() {
} }
} }
open class KotlinAndroid70GradleIT : KotlinAndroid36GradleIT() { open class KotlinAndroid70GradleIT : KotlinAndroid41GradleIT() {
override val androidGradlePluginVersion: AGPVersion override val androidGradlePluginVersion: AGPVersion
get() = AGPVersion.v7_0_0 get() = AGPVersion.v7_0_0
@@ -787,7 +787,7 @@ open class KotlinAndroid71GradleIT : KotlinAndroid70GradleIT() {
} }
} }
abstract class KotlinAndroid3GradleIT : AbstractKotlinAndroidGradleTests() { abstract class KotlinAndroid4GradleIT : AbstractKotlinAndroidGradleTests() {
@Test @Test
fun testAfterEvaluateOrdering() = with(Project("AndroidProject")) { fun testAfterEvaluateOrdering() = with(Project("AndroidProject")) {
setupWorkingDir() setupWorkingDir()
@@ -953,11 +953,7 @@ Finished executing task ':$taskName'|
//The feature of failing the build on deprecation warnings is introduced in gradle 5.6 //The feature of failing the build on deprecation warnings is introduced in gradle 5.6
val supportFailingBuildOnWarning = val supportFailingBuildOnWarning =
GradleVersion.version(chooseWrapperVersionOrFinishTest()) >= GradleVersion.version("5.6") GradleVersion.version(chooseWrapperVersionOrFinishTest()) >= GradleVersion.version("5.6")
// Agp uses Gradle internal API constructor DefaultDomainObjectSet(Class<T>) until Agp 3.6.0 which is deprecated by Gradle, if (supportFailingBuildOnWarning && options.warningMode == WarningMode.Fail) {
// so we don't run with --warning-mode=fail when Agp 3.6 or less is used.
val notUsingAgpWithWarnings =
options.androidGradlePluginVersion == null || options.androidGradlePluginVersion > AGPVersion.v3_6_0
if (supportFailingBuildOnWarning && notUsingAgpWithWarnings && options.warningMode == WarningMode.Fail) {
add("--warning-mode=${WarningMode.Fail.name.lowercase(Locale.getDefault())}") add("--warning-mode=${WarningMode.Fail.name.lowercase(Locale.getDefault())}")
} }
addAll(options.freeCommandLineArgs) addAll(options.freeCommandLineArgs)
@@ -11,9 +11,9 @@ import org.junit.Ignore
import org.junit.Test import org.junit.Test
import java.io.File import java.io.File
open class Kapt3Android36IT : Kapt3AndroidIT() { open class Kapt3Android41IT : Kapt3AndroidIT() {
override val androidGradlePluginVersion: AGPVersion override val androidGradlePluginVersion: AGPVersion
get() = AGPVersion.v3_6_0 get() = AGPVersion.v4_1_0
// AGP 3.+ is not working with Gradle 7+ // AGP 3.+ is not working with Gradle 7+
override val defaultGradleVersion: GradleVersionRequired override val defaultGradleVersion: GradleVersionRequired
@@ -318,10 +318,16 @@ abstract class Kapt3AndroidIT : BaseGradleIT() {
@Test @Test
open fun testDatabinding() { open fun testDatabinding() {
val javaHome = File(System.getProperty("jdk11Home")!!)
Assume.assumeTrue("JDK 11 should be available", javaHome.isDirectory)
val project = Project("android-databinding", directoryPrefix = "kapt2") val project = Project("android-databinding", directoryPrefix = "kapt2")
setupDataBinding(project) setupDataBinding(project)
project.build("assembleDebug", "assembleAndroidTest") { project.build(
"assembleDebug", "assembleAndroidTest",
options = defaultBuildOptions().copy(javaHome = javaHome)
) {
assertSuccessful() assertSuccessful()
assertKaptSuccessful() assertKaptSuccessful()
assertFileExists("app/build/generated/source/kapt/debug/com/example/databinding/BR.java") assertFileExists("app/build/generated/source/kapt/debug/com/example/databinding/BR.java")
@@ -110,7 +110,6 @@ class KotlinSpecificDependenciesIT : KGPBaseTest() {
gradleVersion, gradleVersion,
buildOptions = defaultBuildOptions.copy( buildOptions = defaultBuildOptions.copy(
androidVersion = agpVersion, androidVersion = agpVersion,
warningMode = if (agpVersion == TestVersions.AGP.AGP_36) WarningMode.Summary else defaultBuildOptions.warningMode
), ),
buildJdk = jdkVersion.location buildJdk = jdkVersion.location
) { ) {
@@ -132,7 +131,6 @@ class KotlinSpecificDependenciesIT : KGPBaseTest() {
gradleVersion, gradleVersion,
buildOptions = defaultBuildOptions.copy( buildOptions = defaultBuildOptions.copy(
androidVersion = agpVersion, androidVersion = agpVersion,
warningMode = if (agpVersion == TestVersions.AGP.AGP_36) WarningMode.Summary else defaultBuildOptions.warningMode
), ),
buildJdk = jdkVersion.location buildJdk = jdkVersion.location
) { ) {
@@ -299,7 +297,6 @@ class KotlinSpecificDependenciesIT : KGPBaseTest() {
gradleVersion, gradleVersion,
buildOptions = defaultBuildOptions.copy( buildOptions = defaultBuildOptions.copy(
androidVersion = agpVersion, androidVersion = agpVersion,
warningMode = if (agpVersion == TestVersions.AGP.AGP_36) WarningMode.Summary else defaultBuildOptions.warningMode
), ),
buildJdk = jdkVersion.location buildJdk = jdkVersion.location
) { ) {
@@ -326,7 +323,6 @@ class KotlinSpecificDependenciesIT : KGPBaseTest() {
gradleVersion, gradleVersion,
buildOptions = defaultBuildOptions.copy( buildOptions = defaultBuildOptions.copy(
androidVersion = agpVersion, androidVersion = agpVersion,
warningMode = if (agpVersion == TestVersions.AGP.AGP_36) WarningMode.Summary else defaultBuildOptions.warningMode
), ),
buildJdk = jdkVersion.location buildJdk = jdkVersion.location
) { ) {
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.gradle.model package org.jetbrains.kotlin.gradle.model
import org.gradle.api.logging.configuration.WarningMode
import org.gradle.util.GradleVersion import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.gradle.testbase.* import org.jetbrains.kotlin.gradle.testbase.*
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
@@ -17,9 +16,6 @@ import kotlin.test.assertTrue
@DisplayName("Kotlin plugin model") @DisplayName("Kotlin plugin model")
@OtherGradlePluginTests @OtherGradlePluginTests
class KotlinProjectIT : KGPBaseTest() { class KotlinProjectIT : KGPBaseTest() {
override val defaultBuildOptions = super.defaultBuildOptions.copy(
androidVersion = TestVersions.AGP.AGP_36,
)
@DisplayName("Valid model is available in Kotlin only project") @DisplayName("Valid model is available in Kotlin only project")
@GradleTest @GradleTest
@@ -27,7 +27,7 @@ class AppleFrameworkIT : BaseGradleIT() {
override val defaultGradleVersion = GradleVersionRequired.FOR_MPP_SUPPORT override val defaultGradleVersion = GradleVersionRequired.FOR_MPP_SUPPORT
override fun defaultBuildOptions() = super.defaultBuildOptions().copy( override fun defaultBuildOptions() = super.defaultBuildOptions().copy(
androidHome = KtTestUtil.findAndroidSdk(), androidHome = KtTestUtil.findAndroidSdk(),
androidGradlePluginVersion = AGPVersion.v3_6_0 androidGradlePluginVersion = AGPVersion.v4_1_0
) )
@Test @Test
@@ -27,7 +27,7 @@ class XCFrameworkIT : BaseGradleIT() {
override val defaultGradleVersion = GradleVersionRequired.FOR_MPP_SUPPORT override val defaultGradleVersion = GradleVersionRequired.FOR_MPP_SUPPORT
override fun defaultBuildOptions() = super.defaultBuildOptions().copy( override fun defaultBuildOptions() = super.defaultBuildOptions().copy(
androidHome = KtTestUtil.findAndroidSdk(), androidHome = KtTestUtil.findAndroidSdk(),
androidGradlePluginVersion = AGPVersion.v3_6_0 androidGradlePluginVersion = AGPVersion.v4_1_0
) )
@Test @Test
@@ -33,8 +33,6 @@ interface TestVersions {
} }
object AGP { object AGP {
const val AGP_36 = "3.6.4"
const val AGP_40 = "4.0.2"
const val AGP_41 = "4.1.3" const val AGP_41 = "4.1.3"
const val AGP_42 = "4.2.2" const val AGP_42 = "4.2.2"
const val AGP_70 = "7.0.4" const val AGP_70 = "7.0.4"
@@ -42,7 +40,7 @@ interface TestVersions {
const val AGP_72 = "7.2.1" const val AGP_72 = "7.2.1"
const val AGP_73 = "7.3.0" const val AGP_73 = "7.3.0"
const val MIN_SUPPORTED = AGP_36 // KotlinAndroidPlugin.MINIMAL_SUPPORTED_AGP_VERSION const val MIN_SUPPORTED = AGP_41 // KotlinAndroidPlugin.MINIMAL_SUPPORTED_AGP_VERSION
const val MAX_SUPPORTED = AGP_70 // Update once Gradle MAX_SUPPORTED version will be bumped to 7.2+ const val MAX_SUPPORTED = AGP_70 // Update once Gradle MAX_SUPPORTED version will be bumped to 7.2+
} }
@@ -52,8 +50,6 @@ interface TestVersions {
val maxSupportedGradleVersion: GradleVersion, val maxSupportedGradleVersion: GradleVersion,
val requiredJdkVersion: JavaVersion val requiredJdkVersion: JavaVersion
) { ) {
AGP_36(AGP.AGP_36, GradleVersion.version(Gradle.MIN_SUPPORTED), GradleVersion.version(Gradle.G_6_9), JavaVersion.VERSION_1_8),
AGP_40(AGP.AGP_40, GradleVersion.version(Gradle.MIN_SUPPORTED), GradleVersion.version(Gradle.G_6_9), JavaVersion.VERSION_1_8),
AGP_41(AGP.AGP_41, GradleVersion.version(Gradle.MIN_SUPPORTED), GradleVersion.version(Gradle.G_6_9), JavaVersion.VERSION_1_8), AGP_41(AGP.AGP_41, GradleVersion.version(Gradle.MIN_SUPPORTED), GradleVersion.version(Gradle.G_6_9), JavaVersion.VERSION_1_8),
AGP_42(AGP.AGP_42, GradleVersion.version(Gradle.MIN_SUPPORTED), GradleVersion.version(Gradle.G_6_9), JavaVersion.VERSION_1_8), AGP_42(AGP.AGP_42, GradleVersion.version(Gradle.MIN_SUPPORTED), GradleVersion.version(Gradle.G_6_9), JavaVersion.VERSION_1_8),
AGP_70(AGP.AGP_70, GradleVersion.version(Gradle.G_7_0), GradleVersion.version(Gradle.G_7_4), JavaVersion.VERSION_11), AGP_70(AGP.AGP_70, GradleVersion.version(Gradle.G_7_0), GradleVersion.version(Gradle.G_7_4), JavaVersion.VERSION_11),
@@ -18,7 +18,6 @@ class AGPVersion private constructor(private val versionNumber: VersionNumber) {
fun fromString(versionString: String): AGPVersion = fun fromString(versionString: String): AGPVersion =
AGPVersion(VersionNumber.parse(versionString)) AGPVersion(VersionNumber.parse(versionString))
val v3_6_0 = fromString("3.6.4")
val v4_1_0 = fromString("4.1.3") val v4_1_0 = fromString("4.1.3")
val v4_2_0 = fromString("4.2.2") val v4_2_0 = fromString("4.2.2")
val v7_0_0 = fromString("7.0.4") val v7_0_0 = fromString("7.0.4")
@@ -26,6 +25,6 @@ class AGPVersion private constructor(private val versionNumber: VersionNumber) {
val v7_2_2 = fromString("7.2.2") val v7_2_2 = fromString("7.2.2")
val v7_3_0 = fromString("7.3.0") val v7_3_0 = fromString("7.3.0")
val testedVersions = listOf(v3_6_0, v4_1_0, v4_2_0, v7_0_0, v7_1_0, v7_2_2, v7_3_0) val testedVersions = listOf(v4_1_0, v4_2_0, v7_0_0, v7_1_0, v7_2_2, v7_3_0)
} }
} }
@@ -3,16 +3,21 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-kapt'
android { android {
compileSdkVersion 24 compileSdkVersion 32
buildToolsVersion "25.0.2"
defaultConfig { defaultConfig {
applicationId "com.example.databinding" applicationId "com.example.databinding"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 24 targetSdkVersion 32
versionCode 1 versionCode 1
versionName "1.0" versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }
buildFeatures {
dataBinding true
}
buildTypes { buildTypes {
release { release {
minifyEnabled false minifyEnabled false
@@ -24,17 +29,10 @@ android {
sourceCompatibility 1.8 sourceCompatibility 1.8
targetCompatibility 1.8 targetCompatibility 1.8
} }
dataBinding {
enabled = true
}
} }
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
kapt "com.android.databinding:compiler:$android_tools_version"
kaptAndroidTest "junit:junit:4.13.2" kaptAndroidTest "junit:junit:4.13.2"
implementation 'com.android.support.constraint:constraint-layout:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation'junit:junit:4.13.2' testImplementation'junit:junit:4.13.2'
} }
@@ -2,9 +2,9 @@ package com.example.databinding
import android.content.Context import android.content.Context
import android.content.res.Resources import android.content.res.Resources
import android.databinding.* import androidx.databinding.*
import android.databinding.adapters.AdapterViewBindingAdapter import androidx.databinding.adapters.AdapterViewBindingAdapter
import android.support.annotation.IntegerRes import androidx.annotation.IntegerRes
import android.util.Log import android.util.Log
import android.view.* import android.view.*
import android.widget.* import android.widget.*
@@ -1,7 +1,7 @@
package com.example.databinding package com.example.databinding
import android.app.Activity import android.app.Activity
import android.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import android.os.Bundle import android.os.Bundle
import android.view.MotionEvent import android.view.MotionEvent
import android.widget.Toast import android.widget.Toast
@@ -1,7 +1,7 @@
package com.example.databinding package com.example.databinding
import android.content.res.Resources import android.content.res.Resources
import android.databinding.BaseObservable import androidx.databinding.BaseObservable
class UserProfile : BaseObservable() { class UserProfile : BaseObservable() {
open var gender: Gender = Gender.Female open var gender: Gender = Gender.Female
@@ -1,13 +1,10 @@
import org.gradle.util.VersionNumber
// Top-level build file where you can add configuration options common to all sub-projects/modules. // Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript { buildscript {
repositories { repositories {
mavenLocal() mavenLocal()
maven { url 'https://maven.google.com' } google()
mavenCentral() mavenCentral()
maven { url = uri("https://jcenter.bintray.com/") }
} }
dependencies { dependencies {
classpath "com.android.tools.build:gradle:$android_tools_version" classpath "com.android.tools.build:gradle:$android_tools_version"
@@ -21,22 +18,7 @@ buildscript {
allprojects { allprojects {
repositories { repositories {
mavenLocal() mavenLocal()
maven { url 'https://maven.google.com' } google()
mavenCentral() mavenCentral()
maven { url = uri("https://jcenter.bintray.com/") }
} }
}
if (VersionNumber.parse(android_tools_version) >= VersionNumber.parse("3.3.0")) {
// Workaround: the AGP 3.3.2 databinding library depends on these exact versions, and the espresso test library
// transitively brings newer incompatible ones. Force these versions:
configurations.all {
resolutionStrategy {
force 'com.android.support:support-annotations:26.1.0'
force 'com.android.support:support-core-utils:26.1.0'
force 'com.android.support:support-compat:26.1.0'
force 'android.arch.lifecycle:common:1.0.3'
force 'android.arch.core:common:1.0.0'
}
}
}
}
@@ -3,15 +3,18 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-kapt'
android { android {
compileSdkVersion 27 compileSdkVersion 32
buildToolsVersion "27.0.3"
defaultConfig { defaultConfig {
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 27 targetSdkVersion 32
versionCode 1 versionCode 1
versionName "1.0" versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildFeatures {
dataBinding true
} }
buildTypes { buildTypes {
@@ -25,17 +28,15 @@ android {
targetCompatibility 1.8 targetCompatibility 1.8
} }
dataBinding { enabled = true }
} }
dependencies { dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" api "androidx.annotation:annotation:1.5.0"
testImplementation 'junit:junit:4.13.2' testImplementation 'junit:junit:4.13.2'
kapt "com.android.databinding:compiler:$android_tools_version" androidTestImplementation 'androidx.appcompat:appcompat:1.5.1'
androidTestImplementation 'androidx.test:runner:1.4.0'
androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'androidx.test:rules:1.4.0'
androidTestImplementation "com.android.support.test:rules:1.0.2" androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-contrib:3.0.2'
} }
@@ -1,6 +1,6 @@
package org.maw.library package org.maw.library
import android.support.v7.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
class BlankActivity : AppCompatActivity() { class BlankActivity : AppCompatActivity() {
} }
@@ -1,8 +1,8 @@
package org.maw.library package org.maw.library
import android.support.test.annotation.UiThreadTest import androidx.test.annotation.UiThreadTest
import android.support.test.rule.ActivityTestRule import androidx.test.rule.ActivityTestRule
import android.support.test.runner.AndroidJUnit4 import androidx.test.runner.AndroidJUnit4
import android.view.ViewGroup import android.view.ViewGroup
import org.junit.Rule import org.junit.Rule
import org.junit.Test import org.junit.Test
@@ -1,9 +1,9 @@
package org.maw.library package org.maw.library
import android.content.Context import android.content.Context
import android.databinding.BindingAdapter import androidx.databinding.BindingAdapter
import android.databinding.DataBindingComponent import androidx.databinding.DataBindingComponent
import android.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import android.util.AttributeSet import android.util.AttributeSet
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.FrameLayout import android.widget.FrameLayout
@@ -17,7 +17,7 @@ import java.util.concurrent.atomic.AtomicBoolean
internal object KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheck { internal object KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheck {
val compatibleAndroidGradlePluginVersionRange = AndroidGradlePluginVersionRange( val compatibleAndroidGradlePluginVersionRange = AndroidGradlePluginVersionRange(
minSupportedVersion = AndroidGradlePluginVersionRange.Version(4, 0), minSupportedVersion = AndroidGradlePluginVersionRange.Version(4, 1),
maxSupportedVersion = AndroidGradlePluginVersionRange.Version(7, 3) maxSupportedVersion = AndroidGradlePluginVersionRange.Version(7, 3)
) )
@@ -734,7 +734,7 @@ internal open class KotlinAndroidPlugin(
} }
companion object { companion object {
private val minimalSupportedAgpVersion = AndroidGradlePluginVersion(3, 6, 4) private val minimalSupportedAgpVersion = AndroidGradlePluginVersion(4, 1, 3)
fun androidTargetHandler(): AndroidProjectHandler { fun androidTargetHandler(): AndroidProjectHandler {
val tasksProvider = KotlinTasksProvider() val tasksProvider = KotlinTasksProvider()
val androidGradlePluginVersion = AndroidGradlePluginVersion.currentOrNull val androidGradlePluginVersion = AndroidGradlePluginVersion.currentOrNull