如何有效地编写具有不同构建风格的Android应用程序,目标是同一个私有库的不同版本

时间:2016-11-07 14:41:10

标签: android git gradle

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

该应用程序是一个简单的git仓库中的一个大型Android项目。它有几个功能(大多数都是在自己的java包中隔离的),今天大约有4或5个功能,我认为长期来看这种功能不会超过十几个。

为了简单起见,我们假设该应用程序有两种口味,Flavor 1和Flavor 2,并提供三种功能, 功能1功能2和功能3.

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

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

风味A:

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

风味B:

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

分支A:
  - F1
  - F2

分支B:
- F1
- F3

依旧......

希望它有所帮助。