具有不同功能的多个 APK 版本
Multiple APK versions with different functionality
我正在开发的应用程序(在开发和测试过程中,但不是在最终版本中)需要在不同的 .apk 发布文件中略有不同的功能。
在这种特殊情况下几乎没有问题:
- 不同的 "testing" APK 版本不应包含来自其他 APK 版本的任何代码和资源(因此没有共享的字符串和图像)(出于 security/reverse 工程原因导致不同的人可以访问到不同的 APK 版本)
- 在开发过程结束时,应用程序将包含来自 "testing" 个版本的 all/most 功能。
- 该应用使用多个模块(由不同团队开发)
- 这些版本中可能有几个(3 到 10 个),所有这些版本都是由多个开发人员在同一存储库的同一项目中同时开发的。
目标是使其尽可能易于维护(包括 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),您将有几个选择:
每个功能(团队)都有自己的,long-living,feature-branch。所有团队共享的公共代码都保存在 develop-branch 上,每个 feature-branch 定期对其进行 rebase。您需要设置 CI 来为每个分支构建测试 apk 和 运行 自动化测试。在开发过程结束时,所有内容都会合并到 master(或开发,或其他)中。优点是每个功能(团队)都将在项目的密封部分工作,并且能够自主处理测试发布和自动化测试。缺点是代码库的公共部分 (develop-branch) 需要非常小心地处理,否则你可能会得到 conflicts-hell.
整个项目都是在一个共同的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 文件,然后保留实际文本字符串仅供内部使用。
我正在开发的应用程序(在开发和测试过程中,但不是在最终版本中)需要在不同的 .apk 发布文件中略有不同的功能。
在这种特殊情况下几乎没有问题:
- 不同的 "testing" APK 版本不应包含来自其他 APK 版本的任何代码和资源(因此没有共享的字符串和图像)(出于 security/reverse 工程原因导致不同的人可以访问到不同的 APK 版本)
- 在开发过程结束时,应用程序将包含来自 "testing" 个版本的 all/most 功能。
- 该应用使用多个模块(由不同团队开发)
- 这些版本中可能有几个(3 到 10 个),所有这些版本都是由多个开发人员在同一存储库的同一项目中同时开发的。
目标是使其尽可能易于维护(包括 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),您将有几个选择:
每个功能(团队)都有自己的,long-living,feature-branch。所有团队共享的公共代码都保存在 develop-branch 上,每个 feature-branch 定期对其进行 rebase。您需要设置 CI 来为每个分支构建测试 apk 和 运行 自动化测试。在开发过程结束时,所有内容都会合并到 master(或开发,或其他)中。优点是每个功能(团队)都将在项目的密封部分工作,并且能够自主处理测试发布和自动化测试。缺点是代码库的公共部分 (develop-branch) 需要非常小心地处理,否则你可能会得到 conflicts-hell.
整个项目都是在一个共同的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 文件,然后保留实际文本字符串仅供内部使用。