项目更新推荐: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。
在 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。