如何高效地编写一个具有不同版本风格的Android应用程序,针对同一个私人图书馆的不同版本

问题描述:

我正在编写一个可以以几种风格(今天只有3个,可能长期20-30个)构建的应用程序。如何高效地编写一个具有不同版本风格的Android应用程序,针对同一个私人图书馆的不同版本

该应用程序现在是一个简单的git仓库中的一个大型Android项目。它有几个特性(大部分都是在他们自己的java包中独立出来的),现在大约有4或5个特性,我认为长远来看,这种特性会增长十几倍。

为了简单起见,假设应用程序有两种版本,香料1和风味2,并提供三种功能, 特征1个特征2和特征3

眼下味道使用所有的功能和风味B使用特征1 & 2.该设置由服务器配置在外部控制,但它确实是事先已知的业务决策(即在构建时),并且特征3的代码可以被剥离Flavor B的构建没有太多的麻烦:通过孤立库项目中的特征3,并仅在应用程序的build.gradle中包含Flavor A。

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

味:

  • 特征1个1.0
  • 特征2 1.0
  • 特点3 1.0

香精B:

  • 特征1 v1.0
  • 特征2 v1.1

我想尽量保持简单。我看到的解决方案是隔离其git存储库中的功能,对它们进行版本化并将它们推送到专用存储库(如Nexus),并在应用程序的build.gradle文件中包含我需要的每种类型的aar。风味A将取决于特征2 v1.0和风味B在特征2 v1.1上。

我需要真正设置这个来看看这是否可行,但我已经预测了一个功能的乏味发展阶段。我应该如何测试我目前正在开发的功能,当我需要在主应用程序的环境中进行测试时,并参考Nexus服务器上的aar?我是否必须在每次代码更改时推送一个虚拟版本(我将结束多少个版本?)我应该在开发和引用本地库文件夹时注释掉aar依赖项,以便它使用我的本地代码?两个开发人员可以使用相同的功能吗?

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

+0

这是一个广泛的问题,只是为了让你的意见。关于*的主题。 –

+0

我应该问哪里? – Nodjo

我会组织它的分支机构和功能。 Flavors应该用于不同的构建类型,例如DEV,QA,PROD等......这意味着您将拥有分支功能 1和2,并且您可以在所有功能中运行这些功能构建类型。
因此,所有分支机构可以在所有构建类型运行时,功能缀合将在分支创建。

科答:
- F1
- F2

科B:
- F1
- F3

等等...

希望它能帮助。

+0

我真的不明白为什么我会忽略gradle的productFlavors并使用分支,我正在使用buildTypes与productFlavors结合使用。此外,如果我使用分支机构的功能,我会得到很多分支机构和大量的使用相同功能的口味(又名分支机构)的维护工作。它也阻止了我轻松激活一个功能的风味 – Nodjo