gpt4 book ai didi

Android Gradle 为什么我们需要 "allprojects"?

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:13 25 4
gpt4 key购买 nike

我在尝试将 Gson 添加到我现有的 Android gradle 项目时遇到了问题。

异常是这样的

" failed to resolve:com.google.code.gson:gson:2.3.1"

我的build.gradle

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'
}
}


apply plugin: 'android'

dependencies {
compile 'com.google.code.gson:gson:2.3.1'
.
.

经过一些搜索和反复试验,我发现您需要添加以下内容来解决问题:

allprojects {
repositories {
jcenter()
}
}

为什么我们需要引用 jcenter 两次,为什么“allprojects”对于解决这个问题很重要?

最佳答案

After some searching and trail and error i found that you need to add the following to fix the issue

仅当您有一个传统的 Android Studio 项目时,您将应用程序划分为多个模块(例如,app/)。真正需要的是让模块知道从哪里提取依赖项。

Why to do we need to reference the jcenter two times

buildscript 闭包中的 repositories 闭包表示“这些是 Artifact 存储库,可以从中提取 Gradle 插件和其他列出的 dependencies buildscript 闭包本身”。

您在 allprojects 闭包中的 repositories 闭包表示“这些是 Artifact 存储库,您可以从中拉取您自己的应用程序 dependencies”。

在传统的 Android Studio 项目中,allprojects 闭包位于项目根目录中的 build.gradle 文件中。 allprojects 表示“此闭包中的所有内容,请应用于此项目中所有模块的 Gradle 配置,例如那边的 app/ 模块”。

现在,您的问题中的 build.gradle fragment 暗示您可能没有有一个传统的 Android Studio 项目,而是有一个您没有app/ 模块,你只有一个 build.gradle 文件。在这种情况下,allprojects 本身不是必需的(因为没有模块),但您仍然需要指定 repositories 是什么。

例如,这里有一个来自 a module-less projectbuild.gradle 文件:

buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'
}
}

apply plugin: 'com.android.application'

repositories {
mavenCentral()
maven {
url "https://repo.commonsware.com.s3.amazonaws.com"
}
}

dependencies {
compile 'de.greenrobot:eventbus:2.4.0'
compile 'com.android.support:support-v13:21.0.3'
compile 'com.commonsware.cwac:wakeful:1.0.+'
}

android {
compileSdkVersion 19
buildToolsVersion "21.1.2"

defaultConfig {
targetSdkVersion 17
}

sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}

// Move the tests to tests/java, tests/res, etc...
instrumentTest.setRoot('tests')

// Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
}

这里,除了 buildscript 中的 repositories 闭包(用于定义插件的来源)之外,我还有一个顶级 repositories 闭包,定义顶级 dependencies 的来源。

关于Android Gradle 为什么我们需要 "allprojects"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31047958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com