【问题标题】:How to efficiently write an Android app with different build flavours targetting different versions of the same private library如何有效地编写针对同一私有库的不同版本的具有不同构建风格的 Android 应用程序
【发布时间】:2016-11-07 14:41:10
【问题描述】:

我正在编写一个可以构建多种风格的应用程序(今天只有 3 个,从长远来看可能是 20-30 个)。

该应用程序现在是一个简单的 git 存储库中的一个大型 Android 项目。它有几个特性(大部分被隔离在他们自己的 java 包中),今天大约有 4 或 5 个,从长远来看,我认为不会超过十几个。

为简单起见,假设该应用有两种风格,即 Flavor 1 和 Flavor 2,并提供三个功能, 功能 1 功能 2 和功能 3。

现在 Flavor A 使用所有功能,Flavor B 使用 Feature 1&2。此设置由服务器配置在外部控制,但它实际上是一个预先众所周知的业务决策(即在构建时),并且可以从 Flavor B 构建中剥离功能 3 的代码而不会带来太多麻烦:通过在库项目中隔离功能 3,并仅将其包含在应用程序的 build.gradle 中以用于 Flavor A。

要注意的是,除了剥离未使用功能的代码外,我还有以下要求:风味必须能够使用特定版本的功能。例如,Flavor A 将使用 Feature 2 v1.0,Flavor B 将不得不使用 Feature 2 v1.1。我们可以假设这些特征不相互依赖。

味道 A:

  • 功能 1 v1.0
  • 功能 2 v1.0
  • 功能 3 v1.0

风味乙:

  • 功能 1 v1.0
  • 功能 2 v1.1

我想让事情尽可能简单。我看到的解决方案是在他们的 git 存储库中隔离功能,对它们进行版本化并将它们推送到诸如 Nexus 之类的私有存储库中,并在应用程序的 build.gradle 文件中包含每种风格所需的 aar。风味 A 取决于功能 2 v1.0,风味 B 取决于功能 2 v1.1。

我需要实际设置一下,看看这是否可行,但我已经预料到某个功能的开发阶段会很繁琐。当我需要在主应用程序的上下文中测试我当前正在开发的功能并在 Nexus 服务器上引用 aar 时,我应该如何测试它?我是否必须在每次代码更改时推送一个虚拟版本(我最终会得到多少个版本?)我是否应该在开发时注释掉 aar 依赖项并引用本地库文件夹,以便它使用我的本地代码?两个开发人员可以开发同一个功能吗?

更一般地说,这是好方法还是我有更好的选择?

【问题讨论】:

  • 这是一个广泛的问题,只会让您发表意见。 StackOverflow 的题外话。
  • 我应该去哪里问?

标签: android git gradle


【解决方案1】:

我会在分支和功能中组织它。风味应用于不同的构建类型,例如 DEV、QA、PROD 等...这意味着您将拥有例如具有 feature 1 的 branch和 2,您可以在所有构建类型中运行这些功能。
因此,所有分支都可以在所有构建类型中运行,功能结合将在分支中创建。

A 分部:
- F1
- F2

B 分部:
- F1
- F3

等等……

希望对你有帮助。

【讨论】:

  • 我真的不明白为什么我会省略 gradle 的 productFlavors 而使用分支,我正在使用 buildTypes 已经与 productFlavors 结合使用。此外,如果我将分支用于功能,我最终会使用相同的功能进行大量分支和大量维护工作(也称为分支)。它还使我无法轻松激活某种风味的功能
猜你喜欢
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
  • 2018-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
相关资源
最近更新 更多