我有一个由10多个库模块组成的android项目。这些模块中的每一个都包含许多所有模块通用的渐变代码。例如,我在所有的build.gradle文件中都使用了这个答案中的Javadoc生成任务。
我该如何将任务创建逻辑提取到一个单独的渐变文件中的函数中,每个模块都可以"包含"该函数?我的所有模块的代码都是相同的,但显然取决于变体和项目。是否可以提取一个以项目为参数并返回该项目的任务的函数?
我可能会向后看,因为我在Gradle方面真的很糟糕,但任何能让我避免在10个不同文件(lib1/build.Gradle、lib2/build.grade…(中有相同的60行Gradle代码的指针都会很有帮助!
事实上,更进一步说,基本上,除了依赖项部分,我的整个build.gradle对于所有项目都是相同的——有一个带有buildTypes
、compileOptions
等的android
块,应用了一些插件(apply plugin: 'com.android.library'
等(,并设置了一些工件参数。事实上,只有我的依赖关系完全不同。所以我想知道是否有可能完全提取一个公共文件,比如这样(显然是伪代码(:
<include common.gradle> // includes android block, common tasks, artifact setup etc.
dependencies {
api 'androidx.appcompat:appcompat:1.1.0'
api 'com.google.code.gson:gson:2.8.5'
...
}
您可以将常用设置提取到渐变文件中(比如common.gradle
,然后将其用作
apply from: '../path/to/common.gradle'
参考:https://docs.gradle.org/current/userguide/plugins.html#sec:script_plugins
建议提取通用构建逻辑的方法是利用buildSrc
并创建插件,然后将其应用于您的项目。
如文档所示,这具有应用脚本的许多好处。
此外,我建议通过插件应用程序进行显式处理。虽然你可以开发一个单独的插件来配置你的所有项目,例如基于项目名称的一些逻辑,但通常最好有不同的插件来匹配不同的项目类型。这样,当打开一个构建文件时,你会立即看到它是什么样的项目
当然,您可以在buildSrc
中为公共部件提供公共代码。
另一个好处是,从buildSrc
插件转移到已发布的插件要容易得多。。。以防您的配置模式开始出现在不同的项目中。