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

时间:2018-02-23 15:19:15

标签: android android-gradle android-build android-build-flavors

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

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

  • 不同的“测试”APK版本不应包含来自其他APK版本的任何代码和资源(因此没有共享字符串和图像)(出于安全/逆向工程的原因导致不同的人可以访问不同的APK版本)< / LI>
  • 在开发过程结束时,应用程序将包含“测试”版本中的所有/大部分功能。
  • 该应用使用多个模块(由不同团队开发)
  • 可能有一些(3到10个)这些版本,都是由同一个存储库中同一个项目中的多个开发人员同时开发的。

目标是使其尽可能易于维护(包括UI /集成测试和CI)。有没有办法实现这个目标?我们用不同的构建变体和风格+无操作模块/方法做了一些实验但看起来有点复杂。任何其他建议都会受到欢迎。

2 个答案:

答案 0 :(得分:2)

你的问题确实过于宽泛,我认为你的问题没有一般的解决方案,因为它太复杂了,如果不了解项目的细节,就更难以解决。实际上,你的问题听起来更像是一个组织问题而不是与编程相关的问题,我看到的唯一“解决方案”就是解决具体问题。

<强> 1。没有VCS,没有派对

  

可能有一些(3到10个)这些版本   由同一项目中的多个开发人员同时开发   相同的存储库。

我首先要定义你的VCS流程,因为没有版本控制系统,我担心你和你的团队不会去任何地方。如果您使用git(不知道如何使用其他VCS),您可以选择以下几种方法:

  1. 每个功能(团队)都有自己的长寿命功能分支。所有团队共享的公共代码保存在开发分支上,每个功能分支定期在其上进行重新分支。您需要设置CI以构建测试apks并为每个分支运行自动化测试。在开发过程结束时,所有内容都会合并为master(或者开发,或者其他)。优点是每个功能(团队)都可以在项目的密封部分工作,并且能够自主处理测试版本和自动化测试。缺点是代码库(develop-branch)的常见部分需要非常小心地处理,否则你可能会遇到冲突 - 地狱。

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

  3. <强> 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就会有所不同。这种方法的唯一问题是合并到主分支中可能会导致冲突。但这可能是解决您问题的方法。