gpt4 book ai didi

android - Gradle:我如何实际使用自定义依赖项配置或将外部依赖项交换为本地依赖项?

转载 作者:行者123 更新时间:2023-11-29 01:49:16 29 4
gpt4 key购买 nike

问题

在 Gradle 中,给定一个自定义依赖配置,在 Android 中实际使用/编译它的最简单方法是什么?或者,在“本地”和“外部”依赖项之间切换的最佳方式是什么?

问题

为了简化构建并更好地利用多项目构建,我创建了一个其他人可能使用也可能不使用的顶级“聚合器”项目。因此,对子项目的任何修改都必须在聚合器中自包含。

在这个聚合器的构建过程中,我想始终使用子项目的本地版本(即我正在编辑的源代码),而不是我们存储库中的已编译 Artifact 。此外,该聚合器将用于我们的持续集成环境,以便所有子项目的单元测试在每次代码提交时运行。

详情:部分解决方案

给定类似于以下的平面文件夹结构,其中所有项目/模块都是解耦的,因此 child 对 parent 一无所知。

+ Parent Aggregator Project
|---- build.gradle
|---- settings.gradle
| + app
| |---- build.gradle
| + models
| |---- build.gradle
| + networking
| |---- build.gradle
| + utils
| |---- build.gradle

我在最顶层的项目中创建了以下 build.gradle 文件:

allprojects {
configurations {
localProjects {
extendsFrom compile
}
}
}

project(':app') {
dependencies {
localProjects project(':models')
localProjects project(':networking')
}
}

project(':networking') {
dependencies {
localProjects project(':utils')
}
}

localProjects 配置工作正常,并且每个配置都已成功替换现有的依赖项(如“com.mycompany:utils:1.0.0”和“com.mycompany:models:1.0.0”)与本地项目。唯一的问题是我不知道如何让 Android 使用“localProjects”依赖集而不是“编译”依赖集。

在纯 Java 示例中,我看到人们手动替换 s​​ourceSet 中的类路径,但这对于 Android 插件来说并不容易。

总结

如何将 Android 构建指向自定义依赖项配置,以便它使用这些依赖项而不是 compiledebugCompilereleaseCompile 进行构建> 那些?

最终,我只希望增量构建能够工作。例如,如果我编辑“模型”源代码,则:

  • 下次我构建应用程序时,它会重新编译“模型”项目
  • 它不会重新编译“网络”或“实用程序”代码
  • 这些更改会在构建一次后立即显示在应用中(即不再在 3 或 4 个地方构建只是为了生成具有“最新”的 APK)
  • 当我对这些项目中的任何一个进行代码更改时,我所要做的就是从聚合器项目运行构建,然后编译正确的内容,生成的 APK 反射(reflect)了我机器上的最新代码
  • 同样,我可以仅从聚合器运行所有单元测试
  • 最后但同样重要的是,我无法通过编辑现有项目来完成此任务。所有更改都必须独立包含在聚合器中,因为项目中的其他工程师可能不会选择使用它。

这是一个非常常见的用例,Gradle 团队已经提到在未来为此类事情添加更好的支持。同时,我们如何解决这个问题?

最佳答案

你不能真的这样做 - 子项目受到你的“聚合器项目”的影响。相反,您可以做的是使其可配置,无论是内部还是外部解析特定的依赖项(对于子项目构建和整体构建)。参见 https://github.com/pniederw/elastic-deps用于概念验证。

关于android - Gradle:我如何实际使用自定义依赖项配置或将外部依赖项交换为本地依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19325696/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com