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

wd2eg0qa  于 2023-01-24  发布在  Android
关注(0)|答案(4)|浏览(1084)

在Android Studio中建议将Android Gradle插件从7.0.0升级到7.0.2后,Upgrade Assistant通知无法在构建文件中找到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
}

构建. gradle. kts时的代码

repositories {
    jcenter()
}

plugins {
    `kotlin-dsl`
}
qnakjoqk

qnakjoqk1#

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

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

请参阅gradle发行说明中的升级到版本7.0.2的说明。

vom3gejh

vom3gejh2#

我不知道它是否对您的问题至关重要,但修改它

repositories {
    jcenter()
}

repositories {
    mavenCentral()
}

因为jcenter()已经过时了。

4dc9hkyq

4dc9hkyq3#

在我的例子中,我使用自定义属性来维护插件的版本,所以升级助手抛出了这个错误(Can not find AGP version in build files)。

plugins {
   id 'com.android.application' version versionManagement.android apply false
   id 'com.android.library' version versionManagement.android apply false
   // ...
}

我不得不手动更新versionManagement.android的值
我看到您有(ext)属性来保存插件(classpath)

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

在这种情况下,工具无法更新AGP版本。您应该手动更新Libs.androidGradlePlugin

jei2mxaa

jei2mxaa4#

当我在Android Studio中尝试使用工具〉AGP升级助手时,我遇到了同样的错误。
对于那些不知道的人,Android Gradle Plugin是项目级build. gradle中指定的依赖项com.android.tools.build:gradle:(需要说明的是,不是我的模块级build. gradle)。
在我的案例中,问题在于我的项目级build. gradle文件使用变量而不是硬编码版本来指定Android Gradle插件的版本。
我的项目在www.example.com中包含以下变量,并在我的build. gradle文件中引用了该变量:gradle.properties and referenced it in my build.gradle file:

gradle_version=7.2.2

它在项目级build. gradle文件中引用了它,如下所示:

classpath "com.android.tools.build:gradle:$gradle_version"

为了解决这个问题,我更改了我的项目级build. gradle文件:

classpath "com.android.tools.build:gradle:$gradle_version"

对此:

classpath 'com.android.tools.build:gradle:7.3.1'

更改后,工具〉AGP升级助手不再抱怨"在构建文件中找不到AGP版本"。此外,我能够使用AGP升级助手从www.example.com:gradle:7.2.2升级到com.android.tools.build:gradle:7.3.1。com.android.tools.build:gradle:7.2.2 to com.android.tools.build:gradle:7.3.1.
我的答案与@suryavel-tr中的答案类似,但在我的例子中,版本号由一个gradle变量指定。

相关问题