我已经看到了this的问题,但它并没有帮助我。首先,我尝试使用以下方法在我的项目中添加Google Play服务:
dependencies{
compile 'com.google.android.gms:play-services:6.5.87'
}
它向我显示错误:
然后我将我的工作室更新为1.0.1并且gradle为1.0.0。然后我再次用gradle同步项目。它奏效了!尽管上面的截图中显示了两个选项,但它向我展示了另一种选择这是“安装库”(类似的东西)。我点击它然后弹出一个对话框,我安装了库(就像使用SDK管理器的downloadind而不是gradle下载)。
现在,我尝试使用以下方式下载this库
compile('com.fortysevendeg.swipelistview:swipelistview:1.0-SNAPSHOT@aar') {
transitive = true
}
它给了我错误:
我的android存储库已更新:
另外,我的网络连接正常。我试图多次同步项目,但一直都是同样的错误。我没有在离线模式下运行gradle:
如何解决这个问题?什么是永久解决方案?为什么会发生这一切?
答案 0 :(得分:6)
我发现了这个问题:Studio failed to download library from gradle repository描述了完全相同的错误,而且这个问题有一些构建脚本需要添加到具有dependency
语句的构建文件中:
repositories {
maven { url 'http://clinker.47deg.com/nexus/content/groups/public' }
}
当我这样做时,它对我有用。
关于为什么会发生这种情况的一般问题(以及为什么解决方案对于不同的库而言不同的更好的问题):
Gradle是Android Studio使用的构建系统,它能够自动从Internet下载库依赖项。总的来说,这对开发人员来说是一个巨大的好处,因为不必手动下载存档文件,将它们放在项目中的正确位置,将它们检入源代码控制,并重复新版本的过程,现在你只需要添加一行构建脚本,构建系统为您处理内务管理。主要的缺点是互联网连接问题,它们不同程度地影响不同的开发人员,并且一些人在发生错误时更加困惑。
Gradle如何知道下载依赖项的位置?大多数Gradle构建脚本都包含一个如下所示的块:
repositories {
jcenter()
}
或者可能是mavenCentral()
而不是jcenter()
。这告诉构建系统查看JCenter或Maven Central全局存储库(而JCenter以一种简单的方式思考它是MavenCentral的增值镜像);这些包含许多,许多,许多库的许多版本的档案,并且使用起来非常方便。
您也可以指定其他存储库。此 swipelistview 库尚未上传到Maven Central,因此开发人员已通过网址创建了一个存储库:如果您将该网址添加到repositories
块,则会在那里寻找它。
我担心您正在访问该库的SNAPSHOT
版本 - 根据定义,这些版本应该是未发布的。但是在我的测试项目中添加对库的快照版本的依赖对我有用,并且在Web浏览器中查看该URL显示只有" 1.0 - " (包括尾随破折号)版本的库,所以我有一些微妙的缺失;如果您了解更多信息,请编辑我的回答或评论。
无论如何,这个解释有几点需要注意。有些图书馆不在Maven Central或任何可通过互联网访问的存档上(至少它们未经Android正式发布),而是作为Android SDK下载的一部分发布,并通过SDK管理器进行维护。 Android支持库和Google库属于此类别。如果您收到有关未找到的错误,则必须通过SDK管理器进行修复。
构建系统如何知道在SDK中查找这些内容,因为您没有通过repositories
块告诉它?此行为已硬编码到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
内容一起,告诉构建系统在哪里获取项目的库依赖项,如前所述。