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

时间:2015-02-06 17:45:06

标签: android android-gradle build.gradle android-library

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

在野外(如Github)大多数repos在build.gradle中定义以下内容

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

但是如果我在Android Studio中创建一个库项目,那么这个buildcript块就不会被创建了,因为它已经存在于根build.gradle文件中,因此没有必要(我假设)。

那么正确的方法是什么,只在根build.gradle或每个库项目中定义一次(这也意味着在新的插件版本的情况下更新每个库的版本号)。或者它取决于我是否要独立于主应用程序发布库?

1 个答案:

答案 0 :(得分:2)

如果您正在开发一个库,那么实际上并不存在顶级 build.gradle :顶级应用于多模块项目中的所有模块,但是库最好实现为一个独立的单个模块。

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

然而,如果您在具有顶级构建的项目中包含此模块及其自己的buildscript块,那么会产生很大的讽刺意味。使用竞争buildscript块进行gradle ,顶级构建文件将获胜,它将忽略模块中的块。

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

在实践中,如果您依赖于特定于1.0 Grades插件的1.0之后版本的特定功能,这可能只是一个问题,并且它包含在使用1.0的项目中。

这里有一些细微之处,我会提及但不会回答(我为更多问题回答你的问题而道歉) - 如果其他人确切知道,请回答你自己,或编辑我的回答,或提及它在评论中:

  • 如果您的buildscript块将新插件添加到类路径怎么办?他们被添加还是被忽略了?
  • 如果您的buildscript块将新存储库添加到搜索路径,该怎么办?他们会被接走吗?