我正在编写一个可以构建多种风格的应用程序(今天只有 3 个,从长远来看可能是 20-30 个)。
该应用程序现在是一个简单的 git 存储库中的一个大型 Android 项目。它有几个特性(大部分被隔离在他们自己的 java 包中),今天大约有 4 或 5 个,从长远来看,我认为这不会超过十几个。
为简单起见,假设该应用程序有两种口味,口味 1 和口味 2,并提供三个功能,
功能 1 功能 2 和功能 3。
现在 Flavor A 使用所有功能,Flavor B 使用 Feature 1&2。此设置由服务器配置在外部控制,但它实际上是一个预先众所周知的业务决策(即在构建时),并且可以将功能 3 的代码从 Flavor B 构建中剥离出来,而不会有太多麻烦:通过隔离库项目中的功能 3 并仅将其包含在应用程序的 build.gradle 中以用于 Flavor A。
问题是,除了剥离未使用功能的代码外,我还有以下要求: flavor 必须能够使用特定版本的功能。例如,Flavor A 将使用 Feature 2 v1.0,Flavor B 将不得不使用 Feature 2 v1.1。我们可以假设这些特征不相互依赖。
flavor A:
flavor B:
我想让事情尽可能简单。我看到的解决方案是在他们的 git 存储库中隔离功能,对它们进行版本化并将它们推送到诸如 Nexus 之类的私有(private)存储库中,并在应用程序的 build.gradle 文件中包含每种风格所需的 aar。 flavor A 取决于功能 2 v1.0, flavor B 取决于功能 2 v1.1。
我需要实际设置它以查看这是否可行,但我已经预料到一个功能的繁琐开发阶段。当我需要在主应用程序的上下文中测试我目前正在开发的功能并在 Nexus 服务器上引用 aar 时,我应该如何测试它?我是否必须在每次代码更改时推送一个虚拟版本(我最终会得到多少个版本?)我是否应该在开发时注释掉 aar 依赖项并引用本地库文件夹,以便它使用我的本地代码?两个开发人员可以开发同一个功能吗?
更一般地说,这是好方法还是我有更好的选择?
最佳答案
我会在分支和功能中组织它。 flavor 应该用于不同的构建类型,例如 DEV、QA、PROD 等...这意味着您将拥有例如 分公司与 特色 1 和 2,您可以在所有构建类型中运行这些功能。
所以,所有分支机构 可以全部运行构建类型 , 特点 共轭将在 中创建分支机构 .
分支 A:
- F1
- F2
B分公司:
- F1
- F3
等等...
希望能帮助到你。
关于android - 如何有效地编写针对同一私有(private)库的不同版本的具有不同构建风格的 Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40467843/