我正在开发和应用程序(在开发和测试过程中但不在最终版本中)在不同的.apk发布文件中需要稍微不同的功能。
在这种特殊情况下几乎没有问题:
目标是使其尽可能易于维护(包括UI /集成测试和CI)。有没有办法实现这个目标?我们用不同的构建变体和风格+无操作模块/方法做了一些实验但看起来有点复杂。任何其他建议都会受到欢迎。
答案 0 :(得分:2)
你的问题确实过于宽泛,我认为你的问题没有一般的解决方案,因为它太复杂了,如果不了解项目的细节,就更难以解决。实际上,你的问题听起来更像是一个组织问题而不是与编程相关的问题,我看到的唯一“解决方案”就是解决具体问题。
<强> 1。没有VCS,没有派对
可能有一些(3到10个)这些版本 由同一项目中的多个开发人员同时开发 相同的存储库。
我首先要定义你的VCS流程,因为没有版本控制系统,我担心你和你的团队不会去任何地方。如果您使用git
(不知道如何使用其他VCS),您可以选择以下几种方法:
每个功能(团队)都有自己的长寿命功能分支。所有团队共享的公共代码保存在开发分支上,每个功能分支定期在其上进行重新分支。您需要设置CI以构建测试apks并为每个分支运行自动化测试。在开发过程结束时,所有内容都会合并为master(或者开发,或者其他)。优点是每个功能(团队)都可以在项目的密封部分工作,并且能够自主处理测试版本和自动化测试。缺点是代码库(develop-branch)的常见部分需要非常小心地处理,否则你可能会遇到冲突 - 地狱。
整个项目是在一个共同的开发分支上开发的。每个功能都以小增量开发,每个团队的每个成员从开发分支分支,并在开发分支上每次迭代合并。优点是:不同的功能可能相互依赖,冲突不太可能发生,CI配置更简单。缺点:团队不那么独立,发布不同的apks需要策略。
<强> 2。定义依赖关系
为了选择合适的策略,明确定义功能之间的依赖关系至关重要。是否有可能真正并行开发每个功能?
这完全取决于项目的规格。例如,如果您要开发电子商务应用程序,您最终可能会拥有用户帐户,产品目录,订单处理等功能域...如果所有这些功能都依赖于常见的本地存储层,您将如何进行真正并行开发它们?
一旦定义了依赖关系,您就可以决定在何种程度上可以并行开发这些功能。不同的团队是否需要就通用接口达成一致?即使其他球队仍处于0,也能完成一项功能吗?
第3。构建变体是你的朋友
不同的“测试”APK版本不应包含任何代码和 来自其他APK版本的资源(因此没有共享字符串和图像) (出于安全/逆向工程的原因导致不同的人会 可以访问不同的APK版本)
Flavors旨在完全满足您的需求,即从同一个项目构建不同的apks,但使用不同的代码和/或资源子集。
请记住,您可以拥有多个维度(和构建类型)的风格。例如,你可以有一个称为“网络”的风味维度,有两种风格“mockedNetwork”和“actualNetwork”。然后你可以有另一个维度“功能”,“featureA”,“featureB”,“featureC”。然后,您可以轻松地构建和发布6种类型(如果您还有调试和发布构建类型,则为12种),每种组合一种(mockedNetworkFeatureA,actualNetworkFeatureA,mockedNetworkFeatureB等)。
使用各种口味,您可以轻松替换您不希望测试人员拥有的应用程序块。例如,你可以有一个只有lorem ipsum字符串的strings.xml文件,然后保留实际的文本字符串仅供内部使用。
答案 1 :(得分:0)
我要做的是使用 git 。主分支保持清洁以进行生产,每个团队可以有一个或多个分支进行处理。他们可以更改分支中的包名称,这样您的APK就会有所不同。这种方法的唯一问题是合并到主分支中可能会导致冲突。但这可能是解决您问题的方法。