项目更新推荐:Android Gradle 插件可以升级。错误消息:在构建文件中找不到 AGP 版本

Project update recommended: Android Gradle Plugin can be upgraded. Error message: Can not find AGP version in build files

在 Android Studio 中建议将 Android Gradle 插件从 7.0.0 升级到 7.0.2 后,升级助手通知 找不到 AGP 版本在构建文件中,因此我无法进行升级。

我该怎么办?

谢谢

build.gradle 中的代码(项目)

buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath Libs.androidGradlePlugin
        classpath Libs.Kotlin.gradlePlugin
        classpath Libs.Hilt.gradlePlugin
    }
}

plugins {
    id 'com.diffplug.spotless' version '5.12.4'
}

subprojects {
    repositories {
        google()
        mavenCentral()

        if (!Libs.AndroidX.Compose.snapshot.isEmpty()) {
            maven { url Urls.composeSnapshotRepo }
        }

        if (Libs.Accompanist.version.endsWith('SNAPSHOT')) {
            maven { url Urls.mavenCentralSnapshotRepo }
        }
    }

    apply plugin: 'com.diffplug.spotless'
    spotless {
        kotlin {
            target '**/*.kt'
            targetExclude("$buildDir/**/*.kt")
            targetExclude('bin/**/*.kt')
            ktlint(Versions.ktLint)
            licenseHeaderFile rootProject.file('spotless/copyright.kt')
        }
    }

    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
        kotlinOptions {
            jvmTarget = "1.8"

            // Use experimental APIs
            freeCompilerArgs += '-Xopt-in=kotlin.RequiresOptIn'
        }
    }
    // androidx.test and hilt are forcing JUnit, 4.12. This forces them to use 4.13
    configurations.configureEach {
        resolutionStrategy {
            force Libs.JUnit.junit
        }
    }
}

build.gradle 处的代码(模块)

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'
    id 'dagger.hilt.android.plugin'
}

// Reads the Google maps key that is used in the AndroidManifest
Properties properties = new Properties()
if (rootProject.file("local.properties").exists()) {
    properties.load(rootProject.file("local.properties").newDataInputStream())
}

android {
    compileSdkVersion 31
    defaultConfig {
        applicationId "androidx.compose.samples.crane"
        minSdkVersion 21
        targetSdkVersion 31
        versionCode 1
        versionName "1.0"
        vectorDrawables.useSupportLibrary = true
        testInstrumentationRunner "androidx.compose.samples.crane.CustomTestRunner"

        manifestPlaceholders = [ googleMapsKey : properties.getProperty("google.maps.key", "") ]
    }

    signingConfigs {
        // We use a bundled debug keystore, to allow debug builds from CI to be upgradable
        // Cert fingerprint = 
        debug {
            storeFile rootProject.file('debug.keystore')
            storePassword 'xxxxxxxxxx'
            keyAlias 'xxxxxxxxxxx'
            keyPassword 'xxxxxxxxxx'
        }
    }

    buildTypes {
        debug {
            signingConfig signingConfigs.debug
        }

        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }

    buildFeatures {
         compose true

        // Disable unused AGP features
        buildConfig false
        aidl false
        renderScript false
        resValues false
        shaders false
    }

    composeOptions {
        kotlinCompilerExtensionVersion Libs.AndroidX.Compose.version
    }

    packagingOptions {
        // Multiple dependency bring these files in. Exclude them to enable
        // our test APK to build (has no effect on our AARs)
        excludes += "/META-INF/AL2.0"
        excludes += "/META-INF/LGPL2.1"
    }
}

dependencies {
    implementation Libs.Kotlin.stdlib
    implementation Libs.Kotlin.Coroutines.android
    implementation Libs.GoogleMaps.maps
    implementation Libs.GoogleMaps.mapsKtx
    constraints {
        // Volley is a transitive dependency of maps
        implementation(Libs.Volley.volley) {
            because("Only volley 1.2.0 or newer are available on maven.google.com")
        }
    }

    implementation Libs.Accompanist.insets
    implementation Libs.AndroidX.Activity.activityCompose
    implementation Libs.AndroidX.appcompat
    implementation Libs.AndroidX.Compose.runtime
    implementation Libs.AndroidX.Compose.foundation
    implementation Libs.AndroidX.Compose.material
    implementation Libs.AndroidX.Compose.layout
    implementation Libs.AndroidX.Compose.animation
    implementation Libs.AndroidX.Compose.tooling
    implementation Libs.AndroidX.Lifecycle.viewModelCompose
    implementation Libs.AndroidX.Lifecycle.viewModelKtx
    implementation Libs.Coil.compose
    implementation Libs.Hilt.android
    kapt Libs.Hilt.compiler

    androidTestImplementation Libs.JUnit.junit
    androidTestImplementation Libs.AndroidX.Test.runner
    androidTestImplementation Libs.AndroidX.Test.espressoCore
    androidTestImplementation Libs.AndroidX.Test.rules
    androidTestImplementation Libs.AndroidX.Test.Ext.junit
    androidTestImplementation Libs.Kotlin.Coroutines.test
    androidTestImplementation Libs.AndroidX.Compose.uiTest
    androidTestImplementation Libs.Hilt.android
    androidTestImplementation Libs.Hilt.testing
    kaptAndroidTest Libs.Hilt.compiler
}

代码位于 build.gradle.kts

repositories {
    jcenter()
}

plugins {
    `kotlin-dsl`
}

我不知道它是否对你的问题很重要,但修改这个

repositories {
    jcenter()
}

repositories {
    mavenCentral()
}

应该需要。因为 jcenter() 已过时。

在我的例子中,以下步骤解决了这个问题:

cd to project directory
bash ./gradlew help --scan
bash ./gradlew wrapper --gradle-version 7.0.2

请参阅 gradle 发行说明中的​​ upgrade instructions to version 7.0.2