我想知道为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或每个库项目中定义一次(这也意味着在新的插件版本的情况下更新每个库的版本号)。或者它取决于我是否要独立于主应用程序发布库?
答案 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
块将新存储库添加到搜索路径,该怎么办?他们会被接走吗?