在 Android Studio Arctic Fox Canary 8中,应用级 build.gradle 不会生成“所有项目”部分,当手动添加时会导致错误

当在 Android Studio North Fox Canary 8中创建一个新项目时,这是应用级别 build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.0.0-alpha08"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.30"


// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}


task clean(type: Delete) {
delete rootProject.buildDir
}


在 Android Studio 4.1.2中创建相同的新项目时,app 级 build.gradle 文件如下:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = "1.3.72"
repositories {
google()
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:4.1.2"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"


// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}


allprojects {
repositories {
google()
jcenter()
}
}


task clean(type: Delete) {
delete rootProject.buildDir
}


我正在使用的一个库需要 allprojects

我手动尝试在 Canary 8中添加 allprojects部分,收到这个错误:

 problem occurred evaluating root project 'My Application'.
> Build was configured to prefer settings repositories over project repositories but repository 'Google' was added by build file 'build.gradle'

为什么 Android Studio Canary 8中的 allprojects被删除了? 我怎样才能把它添加回去以便使用这些库?

44891 次浏览

In settings.gradle just comment out the whole block

dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
jcenter() // Warning: this repository is going to shut down soon
}
}

In settings.gradle you can add the repositories you want to add to the project

dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
jcenter()
maven { url "https://maven.xyz.com" }
}
}

just keep this line in settings.gradle

  1. include ':app' (Put in First line)
  2. comment rest of code if any.

Go to setting.gradle and replace the line:

repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)

with:

repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)

That's a gradle setting which allows this to work.

In new release of Android, provide a new way to define your repositories. Before this release we used build.gradle(Project level) file to define repositories. Now you should write then into settings.gradle file. That's why It collides with Gradle plugin and generate this error message:

Build was configured to prefer settings repositories over project repositories but repository 'Google' was added by build file 'build.gradle'

We can solve it in two possible ways.

Solution 1:

Use previous way: Not to use dependencyResolutionManagement for repositories in settings.gradle file

Just keep settings.gradle file like below:

/*dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}*/
rootProject.name = "YourAppName"
include ':app'

Keep build.gradle(Project level) like below;

buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.0.0"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21"
classpath 'com.google.gms:google-services:4.3.10' // If you use
}
}


allprojects {
repositories {
// Check that you have the following line (if not, add it):
google()  // Google's Maven repository
mavenCentral()
}
}


task clean(type: Delete) {
delete rootProject.buildDir
}

Change or add the line at top of the build.gradle(Module level)

plugins {
id 'com.android.application'
id 'kotlin-android'
id 'com.google.gms.google-services' // If you use
}

Solution 2:

Use new way: Use dependencyResolutionManagement for repositories in settings.gradle file

Just keep settings.gradle file like below:

dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "YourAppName"
include ':app'

Keep build.gradle(Project level) like below:

buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.0.0"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21"
classpath 'com.google.gms:google-services:4.3.10' // If you use
}
}


task clean(type: Delete) {
delete rootProject.buildDir
}

Keep build.gradle(Module level) file as previous:

plugins {
id 'com.android.application'
id 'kotlin-android'
id 'com.google.gms.google-services'// If you use
}

Hopefully you overcome your problem.

Google has made some changes in the project label Gradle.

you can fix this by removing all project label configuration to setting.gradle file.

allprojects {
repositories {
// Check that you have the following line (if not, add it):
google()  // Google's Maven repository
mavenCentral()
}
}

Remove this code in the Gradle file and all your plugins code in setting.gradle file. Like below.

    pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
plugins {
id 'com.android.application' version '7.1.0-alpha03'
id 'com.android.library' version '7.1.0-alpha03'
id 'org.jetbrains.kotlin.android' version '1.5.10'
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "MVVMDEMO"
include ':app'

allProjects{} block is removed from the updated version of gradle. So, in settings.gradle you can add the repositories you want to download and add to the project

dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
jcenter() // Warning: this repository is going to shut down soon


maven {
url 'https://your/url/to/download/repository/'
credentials {
username = "your username"
password = "your password"
}
}
}
}
rootProject.name = "My Application"
include ':app'