美文网首页Android
Android12新特性——google()maven()等第三

Android12新特性——google()maven()等第三

作者: DunerGee | 来源:发表于2021-10-25 15:05 被阅读0次

Android12中第三方库的添加

添加第三方库错误提示:

Caused by: org.gradle.api.InvalidUserCodeException: Build was configured to prefer settings repositories over project repositories but repository 'Google' was added by build file 'build.gradle'
    at org.gradle.internal.management.DefaultDependencyResolutionManagement.repoMutationDisallowedOnProject(DefaultDependencyResolutionManagement.java:201)
    at org.gradle.internal.ImmutableActionSet$SetWithFewActions.execute(ImmutableActionSet.java:285)
    at org.gradle.api.internal.DefaultDomainObjectCollection.doAdd(DefaultDomainObjectCollection.java:264)
    at org.gradle.api.internal.DefaultNamedDomainObjectCollection.doAdd(DefaultNamedDomainObjectCollection.java:113)
    at org.gradle.api.internal.DefaultDomainObjectCollection.add(DefaultDomainObjectCollection.java:253)
    at org.gradle.api.internal.artifacts.DefaultArtifactRepositoryContainer.access$101(DefaultArtifactRepositoryContainer.java:35)
    at org.gradle.api.internal.artifacts.DefaultArtifactRepositoryContainer.lambda$new$0(DefaultArtifactRepositoryContainer.java:38)
    at org.gradle.api.internal.artifacts.DefaultArtifactRepositoryContainer.addWithUniqueName(DefaultArtifactRepositoryContainer.java:101)
    at org.gradle.api.internal.artifacts.DefaultArtifactRepositoryContainer.addRepository(DefaultArtifactRepositoryContainer.java:89)
    at org.gradle.api.internal.artifacts.DefaultArtifactRepositoryContainer.addRepository(DefaultArtifactRepositoryContainer.java:84)
    at org.gradle.api.internal.artifacts.dsl.DefaultRepositoryHandler.google(DefaultRepositoryHandler.java:151)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.gradle.internal.metaobject.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:484)
    at org.gradle.internal.metaobject.BeanDynamicObject.tryInvokeMethod(BeanDynamicObject.java:196)
    at org.gradle.internal.metaobject.CompositeDynamicObject.tryInvokeMethod(CompositeDynamicObject.java:98)
    at org.gradle.internal.extensibility.MixInClosurePropertiesAsMethodsDynamicObject.tryInvokeMethod(MixInClosurePropertiesAsMethodsDynamicObject.java:34)
    at org.gradle.internal.metaobject.ConfigureDelegate.invokeMethod(ConfigureDelegate.java:56)

如果你遇到这个错误首先检查你的sdk版本是多少
如果是31,这就是问题所在

原因

我看到很多人提问使用Android Studio4.2出现这个问题,其实不然(至少我自己遇到的问题不是如此)。
其实主要问题不是你的AS版本,而是你的sdk版本问题。

方式1

你可以尝试先在AndroidStudio4.2中将你的sdk版本将到30,然后在build.gradle(project)中按照原本的方式(如下)重新添加依赖看是否还会有此问题,这是我老项目的处理方式。

allprojects {
    repositories {
        google()
        mavenCentral()
        jcenter() // Warning: this repository is going to shut down soon
        maven { url "https://jitpack.io" }
    }
}

方式2

这也是google建议的方式
打开你的settings.gradle文件你就会惊喜的发现如下代码:

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

是不是很熟悉,没错其中repositories括号内的就是我们原本应该写在build.gradle(project)文件中的allprojects {}中的引用。
这就是google在此版本建议的引用方式。
所以你只需要将你需要引入的第三方库写在settings.gradle文件中即可。

备注:你会发现jcenter已经画了横线,所以不建议继续使用jcenter的第三方库,如果有使用了jcenter的建议尽早更换库或者根据第三方库的提示进行迁移。

这就是这个错误的解决方式,你可以根据你的项目实际情况进行选择哪个方式

(方式1是我自己根据自己项目情况使用的方式,目前我还没测试这个问题与Android Studio版本有什么关系,如果有人是使用Android Studio4.2或Android Studio Arctic Fox 并且sdk版本是30以下也会有这个问题,请评论一下一起寻找原因)

我自己目前Android Studio版本是
Android Studio Arctic Fox | 2020.3.1(M1mac版)

相关文章

网友评论

    本文标题:Android12新特性——google()maven()等第三

    本文链接:https://www.haomeiwen.com/subject/orojaltx.html