为什么在buildcript中没有存储库的情况下可以构建Android应用程序?

时间:2018-01-30 15:30:08

标签: android-gradle

我试图了解存储库中的存储库。我已经阅读了很多解释它的帖子,但我仍然觉得我没有理解这个概念。这是项目build.gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
//    repositories {
//        jcenter()
//        maven {
//            url 'https://maven.google.com/'
//            name 'Google'
//        }
//    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
    }
 }


allprojects {
    repositories {
        jcenter()
        maven {
            url "https://jitpack.io"
        }
        google()
    }
}

您可以看到我在buildscript中注释了存储库。该应用程序构建完美,发布没有任何问题。谁能对此有所了解?也许需要在buildscript中显示存储库的示例将帮助我最终理解它。

1 个答案:

答案 0 :(得分:1)

经过反复试验,即使repositories块被注释掉,Android Studio也会在编译和构建时提供插件或至少插件源。这很可能是因为它与Gradle的高度集成。但是,当使用gradlew assembleDebug或类似的东西从命令行构建时,Gradle包装器将抛出以下错误:

  

“无法解决外部依赖关系   com.android.tools.build:gradle:3.0.1因为没有存储库   定义的“。

为了清楚地进一步解释这些概念,repositories下的buildscript定义了下载编译Gradle项目时使用的插件的来源。例如,通过定义包含它的repo(在本例中为Google maven)并为buildscript添加依赖项com.android.tools.build:gradle:3.0.1来下载Android Gradle插件。因此,通过这样做,您将能够在app模块apply plugin: 'com.android.application'文件中添加build.gradle插件。这还与您的代码库无关,这只是与构建系统有关,以便使用具有工具和额外任务的插件来编译项目Projects,以便正确编译它们。

如果您在buildscript块下方实现,则会有allprojects块,其中指出了用于处理项目依赖性的存储库。这意味着您在应用程序中使用的库(也在app dependencies文件中的build.gradle块内)将从那里检索,在这种情况下,它们来自JCenter,JitPack.io和Google Maven