具有不同功能的多个 APK 版本

Multiple APK versions with different functionality

我正在开发的应用程序(在开发和测试过程中,但不是在最终版本中)需要在不同的 .apk 发布文件中略有不同的功能。

在这种特殊情况下几乎没有问题:

目标是使其尽可能易于维护(包括 UI/integration 测试和 CI)。有什么办法可以做到这一点?我们用不同的构建变体和风格做了一些实验 + 无操作 modules/methods 但它看起来有点复杂。欢迎任何替代建议。

我会做的是使用git。 master 分支在生产中保持干净,每个团队可以有一个或多个分支来工作。他们可以在他们的分支中更改包名称,这样您的 APK 就会完全不同。这种方法的唯一问题是合并到可能导致冲突的 master 分支。但这可能是您问题的解决方案。

你的问题确实太笼统了,我认为你的问题没有通用的解决方案,因为它太复杂了,在不了解项目细节的情况下更难解决。实际上,您的问题听起来更像是一个组织问题,而不是 programming-related 问题,我看到的唯一 "solution" 是解决特定问题。

1.没有 VCS,没有聚会

there might be a few (between 3 and 10) of those versions, all developed concurrently by multiple developers in the same project on the same repository.

我将从定义您的 VCS 流程开始,因为如果没有版本控制系统,恐怕您和您的团队将无处可去。如果您要使用 git(不知道如何使用其他 VCS),您将有几个选择:

  1. 每个功能(团队)都有自己的,long-living,feature-branch。所有团队共享的公共代码都保存在 develop-branch 上,每个 feature-branch 定期对其进行 rebase。您需要设置 CI 来为每个分支构建测试 apk 和 运行 自动化测试。在开发过程结束时,所有内容都会合并到 master(或开发,或其他)中。优点是每个功能(团队)都将在项目的密封部分工作,并且能够自主处理测试发布和自动化测试。缺点是代码库的公共部分 (develop-branch) 需要非常小心地处理,否则你可能会得到 conflicts-hell.

  2. 整个项目都是在一个共同的develop-branch上开发的。每个功能都以小增量开发,每个团队的每个成员都从 develop-branch 分支出来,并在 develop-branch 上合并每个迭代。优点是:不同的功能可能相互依赖,不太可能发生冲突,CI 具有更简单的配置。缺点:团队独立性较差,发布不同的apk需要策略。

2。定义依赖项

为了选择合适的策略,明确定义特征之间的依赖关系至关重要。是否可以真正并行开发每个功能?

这完全取决于项目的规范。例如,如果您要开发一个 e-commerce 应用程序,您最终可能会拥有用户帐户、产品目录、订单处理等功能域...如果所有这些功能都依赖于公共本地存储层,您如何要真正并行开发它们吗?

定义依赖关系后,您将能够决定可以在多大程度上并行开发这些功能。不同的团队是否需要就通用接口达成一致?即使其他团队仍为 0,是否可以完成一个功能?

3。构建变体是您的朋友

different "testing" APK versions shouldn't contain ANY of the code and resources (so no shared strings and images) from other APK versions (for security/reverse engineering reasons cause different people will have access to different APK versions)

Flavors 旨在完全满足您的需求,即从同一项目构建不同的 apk,但使用不同的代码子集 and/or 资源。

请记住,您可以拥有多个维度(和构建类型)的风格。例如,您可以有一个名为 "network" 的风味维度,以及 2 种风味 "mockedNetwork" 和 "actualNetwork"。然后你可以有另一个维度 "feature","featureA","featureB","featureC"。然后,您可以轻松构建和发布 6 种类型(如果您还调试和发布构建类型,则为 12 种)的 apk,每个组合一个(mockedNetworkFeatureA、actualNetworkFeatureA、mockedNetworkFeatureB 等)。

使用风格,您可以轻松替换您不希望测试人员拥有的应用程序块。例如,您可以拥有一个仅包含 lorem ipsum 字符串的 strings.xml 文件,然后保留实际文本字符串仅供内部使用。