android - 如何有效地编写针对同一私有(private)库的不同版本的具有不同构建风格的 Android 应用程序

标签 android git gradle

我正在编写一个可以构建多种风格的应用程序(今天只有 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:

  • 功能 1 v1.0
  • 功能 2 v1.0
  • 功能 3 v1.0

  • flavor B:
  • 功能 1 v1.0
  • 功能 2 v1.1

  • 我想让事情尽可能简单。我看到的解决方案是在他们的 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/

    相关文章:

    git:如何将 pull 请求 merge 到一个分支中?

    javascript - 从 sdcard 加载 html 到 android 中的 webview 时出现 HTML、css、js 问题?

    克隆后立即在 OSX 上修改 Linux 内核源代码

    java - 获取UI层次结构时出错原因: Error while obtaining UI hierarchy XML file: com. android.ddmlib.SyncException:远程对象不存在

    git - 有没有办法告诉 GIT 不同分支上的两个提交是相关的——我。 e.他们解决了同样的问题?

    java - 在 Eclipse/Java/JDT 中,有没有办法只过滤最新版本的 “Open Type” 中的条目?

    java - 为什么 Gradle 不在本地 maven 存储库中查找插件?

    android - Gradle插件更新推荐

    android - 父 Activity 通常在锁定时停止,但在方向更改后不会

    android - 模拟 Nexus 10