gpt4 book ai didi

android - Studio无法从Gradle存储库下载库

转载 作者:行者123 更新时间:2023-11-29 14:48:20 30 4
gpt4 key购买 nike

我已经看到了this问题,但并没有帮助我。首先,我尝试使用以下方法在我的项目中添加Google Play服务:

dependencies{
compile 'com.google.android.gms:play-services:6.5.87'
}

它向我显示错误:

然后,我将Studio更新为1.0.1,并将gradle升级为1.0.0。然后我再次用gradle同步了该项目。而且有效!尽管上面的屏幕截图显示了两个选项,但它显示了另一个选项。那是“安装库”(类似的东西)。我单击它,然后弹出一个对话框,然后安装了库(就像使用SDK Manager的downloadind一样,而不是gradle下载)。

现在,我尝试使用以下方法下载 this库:
compile('com.fortysevendeg.swipelistview:swipelistview:1.0-SNAPSHOT@aar') {
transitive = true
}

它给了我错误:

我的Android储存库已更新:

另外,我的互联网连接正常。我尝试了多次同步项目,但是始终都出现相同的错误。我不在离线模式下运行gradle:

如何解决这个问题?永久解决方案是什么?为什么会发生所有这一切?

最佳答案

我发现了一个问题:Studio failed to download library from gradle repository,它描述了完全相同的错误,并且这个问题包含您需要添加到具有相关dependency语句的构建文件中的以下构建脚本:

repositories {
maven { url 'http://clinker.47deg.com/nexus/content/groups/public' }
}

当我这样做时,它对我有用。

关于为什么发生这种情况的一般问题(以及更好的问题,即对于不同的库,解决方案为何不同):

Android Studio使用的构建系统Gradle能够自动从Internet下载库依赖项。总的来说,这对开发人员来说是一个很大的福音,因为不必手动下载存档文件,而是将其放在项目中的正确位置,将其检查到源代码管理中,然后为新版本重复该过程,现在您只需添加一行构建脚本,构建系统将为您完成内务处理。主要缺点是Internet连接问题,这在不同程度上影响了不同的开发人员,并且在出现错误时对其含义也增加了一些困惑。

Gradle如何知道在哪里下载依赖项?大多数Gradle构建脚本都包含一个如下所示的块:
repositories {
jcenter()
}

或者它可以是 mavenCentral()而不是 jcenter()。这告诉构建系统在JCenter或Maven Central全局存储库中查找(而JCenter以一种简单的方式将其视为MavenCentral的增值镜像);这些文件包含许多版本的文件,其中包含许多很多很多的库,并且使用起来非常方便。

您也可以指定其他存储库。此 swipelistview 库尚未上载到Maven Central,因此开发人员已通过URL提供了它的存储库:如果将该URL添加到 repositories块中,它将在此处查找。

我担心您正在访问库的 SNAPSHOT版本的事实-根据定义,这些版本应该未发布。但是,在我的测试项目中添加对库快照版本的依赖关系对我来说很奏效,并且在Web浏览器中查看该URL会发现该库只有一个“1.0-”(包括尾划线)版本,因此有一些巧妙地我在那里失踪了;如果您了解更多,请编辑我的答案或评论。

无论如何,这种解释有两个警告。有些库不在Maven Central或任何可从Internet访问的文件上(至少它们不是由Android正式发布的),而是作为Android SDK下载的一部分发布,并通过SDK管理器进行维护。 Android支持库和Google库属于此类别。如果遇到未找到的错误,则必须通过SDK管理器对其进行修复。

因为您没有通过 repositories块告诉构建系统,构建系统如何知道在SDK中查找这些数据?此行为被硬编码到Android Gradle插件中。

另一个警告是,有一个细节吸引了很多人,这实际上是您有两个 repositories块,尽管使用通常的Android Studio设置它们通常位于不同的文件中。其中一个位于 buildscript块中,通常位于顶层 build.gradle 文件中,如下所示:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'

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

另一个通常也位于顶层 build.gradle 中,但是您可以在模块的 build.gradle 文件中添加另一个块来扩展它。顶级的看起来像这样:
allprojects {
repositories {
jcenter()
}
}

模块级别的示例看起来像此答案中的先前示例之一。这些都是什么意思?
buildscript块告诉Gradle在哪里可以找到构建系统插件。这些是可增强构建系统本身功能的插件,但对于您的实际项目没有任何说明。在Android项目中,Android Gradle插件在此类别中,与Android / Google库不同,此 确实将放在Maven Central中。 repositories中的 dependencies块(与 buildscript块(它是 而不是与项目的依赖项块相同,请继续阅读)配合使用)告诉构建系统在哪里寻找这些插件。

顶级构建文件中的 allprojects块告诉构建系统将包含的脚本位应用到项目中的所有构建文件。在此示例中,它告诉它向所有子项目添加一个指向JCenter的 repositories块。这是一个方便,因此您不必将其复制/粘贴到模块中的多个构建文件中。

在模块中,您还具有一个 repositories块,该块与 allprojects一起,告诉构建系统在何处获取项目的库依赖项,如前所述。

关于android - Studio无法从Gradle存储库下载库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27553820/

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