【发布时间】:2023-01-09 18:17:32
【问题描述】:
这个想法是能够在不实际修改代码的情况下将库添加到项目中。这主要是为了能够根据要求生成构建。虽然我可以使用 buildFlavors 实现这一点,但我希望能够灵活地为任意数量的库执行此操作。
基本上是这样的,
- 我有一个基本应用程序
- 一个团队开发了一个库 A
- 我有另一个图书馆B
- 一个客户只需要库 A,另一个需要 A 和 B。其他客户可能需要不同的库。
我需要的是将这些库添加到基础应用程序并根据要求生成构建。
为此,我创建了以下任务。目前我只是尝试使用已经在settings.gradle 文件中注册但未添加到项目中的本地模块
val myArg: String by project
//use task in this way - gradlew addDependencyAndGenerateBuilds -PmyArg dependency name
tasks.register("addDependencyAndGenerateBuilds"){
doLast {
if(project.hasProperty("myArg")){
dependencies.implementation(dependencies.project(":$myArg"))
}
finalizedBy("clean", "build")
}
}
现在,如果我运行此任务 - ./gradlew addDependencyAndGenerateBuilds -PmyArg libraryA,我会收到以下错误消息,
Task 'libraryA' not found in root project
我需要的是将此 libraryA 添加到基本应用程序并相应地生成新版本。
【问题讨论】:
-
“一个客户只需要图书馆 A,另一个需要 A 和 B。其他客户可能需要不同的图书馆。” -- 你说的“客户”是指“客户”之类的东西吗?如果是这样,那么我会使用产品口味,每位顾客使用一种口味。
-
@CommonsWare 是的,“客户”就是我的意思。但我不想为每个新客户创造一种新口味。我希望能够即时执行此操作,而无需对代码进行任何更改。澄清一下,这些库将以这样一种方式开发,即应用程序代码不需要任何更改即可访问库功能。这就是为什么我尝试编写一个 gradle 任务来动态添加库并生成包含这些库的构建。
标签: android build.gradle gradle-kotlin-dsl