Android 库项目build.gradle中buildscript标记的最佳实践

Android 库项目build.gradle中buildscript标记的最佳实践,android,android-gradle-plugin,build.gradle,android-library,Android,Android Gradle Plugin,Build.gradle,Android Library,我想知道为Android库项目定义构建脚本存储库和依赖项的最佳/预期方式是什么 像Github一样,大多数回购协议都在那里定义了以下build.gradle buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.0.0' } } 但是,如果我在Android Studio中创建一个库项目,则不会创建此buildscript块,因为它已

我想知道为Android库项目定义构建脚本存储库和依赖项的最佳/预期方式是什么

像Github一样,大多数回购协议都在那里定义了以下build.gradle

buildscript {
repositories {
    jcenter()
}
dependencies {
    classpath 'com.android.tools.build:gradle:1.0.0'
} }
但是,如果我在Android Studio中创建一个库项目,则不会创建此buildscript块,因为它已经存在于根build.gradle文件中,因此我认为没有必要创建它


那么正确的方法是什么,只在root build.gradle中定义一次,或者为每个库项目定义一次,这也意味着在出现新插件版本时更新每个库的版本号。或者这取决于我是否想独立于我的主应用程序发布库?

如果您正在开发库,实际上没有顶级构建。gradle:顶级构建适用于多模块项目中的所有模块,但库最好作为独立的单个模块实现

最好的做法可能是为您的库模块提供一个build.gradle文件,并在其中包含一个buildscript块以及存储库和Android插件gradle版本。这样,它就更独立了,而且它并不隐式地依赖于处于具有顶级build.gradle文件的项目中

然而,有一个巨大的警告是,哪种方式会导致很多这种模拟,如果您在一个具有顶级build.gradle和竞争性buildscript块的项目中包含此模块及其自己的buildscript块,则顶级构建文件将获胜,并且它将忽略您模块中的块

这可能不是什么大问题,但如果您的模块依赖于特定版本的Android Gradle插件,例如,在一个使用不同版本插件的项目中,那么您的模块将丢失,并可能遇到问题。另一种说法是,在一次构建中,它只能为所有模块使用一个插件版本,我相信第一个指定它的插件会为每个人设置它

在实践中,只有当您依赖于Android Gradle插件1.0版本之后的特定功能,并且它包含在使用1.0的项目中时,这才可能成为一个问题

这里有一些微妙之处,我会提到,但不会回答,我很抱歉用更多的问题回答您的问题-如果其他人确实知道,请回答您自己,或编辑我的答案,或在评论中提及:

如果您的buildscript块向类路径添加了新插件怎么办?它们是被添加还是被忽略? 如果您的buildscript块将新存储库添加到搜索路径,该怎么办?他们会被带走吗?
我翻了一下,让这个答案成为社区维基,所以请随意编辑它。当它问的问题比回答的问题多的时候,它觉得不应该得到投票的分数。尽管你提出了一些其他相当好的问题,但你回答了我的一个。谢谢因此,在我看来,将buildscript块包含到一个不打算独立的库中是没有意义的,因为它的buildscript块无论如何都会被忽略