gpt4 book ai didi

android - 库项目 build.gradle 中 buildscript 标签的最佳实践

转载 作者:行者123 更新时间:2023-12-05 00:17:34 24 4
gpt4 key购买 nike

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

在野外(如 Github),大多数存储库都在 build.gradle 中定义了以下内容

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

但是,如果我在 Android Studio 中创建一个库项目,则不会创建此 buildscript block ,因为它已经在根 build.gradle 文件中,因此没有必要(我认为)。

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

最佳答案

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

最佳实践可能是为您的库模块创建一个 build.gradle 文件,并在其中包含一个 buildscript block 以及存储库和 Android 插件 Gradle版本。这样它就可以更好地独立,并且它不会隐式依赖于具有顶级 build.gradle 文件的项目。

但是,有一个巨大的警告,这会导致很多此类问题 - 如果您在具有顶级的项目中包含此模块及其自己的buildscript block >build.gradle 与竞争的 buildscript block ,顶级构建文件将获胜,并且它将忽略模块中的 block 。

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

实际上,只有当您依赖 Android Gradle 插件 1.0 版本以上特定的某些功能并且该功能包含在使用 1.0 的项目中时,这才可能成为问题。

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

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

关于android - 库项目 build.gradle 中 buildscript 标签的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28371685/

24 4 0