【问题标题】:Android compile with different resources (white label)Android 编译不同资源(白标)
【发布时间】:2023-12-15 14:42:01
【问题描述】:

我们有一个 Android 项目,我们为不同的客户维护一个代码库,每次为不同的客户编译的最快/最有效的方法是什么?我发现的几个选项和我的问题:

  1. 编写脚本:替换资源文件夹并编辑应用名称、版本等

  2. 使用 Android 库项目 将当前项目作为库项目分开是非常不切实际的,我在想是否可以将一些设置和资源文件保存为库项目和只是导入不同的库项目进行不同的编译?

  3. 在远程服务器上存储设置和资源 是否可以在远程服务器上存储资源文件和一些应用程序设置(xml、常量等),然后下载并替换到用户首次启动 apk 时的应用程序?这些文件将存储在哪里?

您还有其他建议吗?

【问题讨论】:

    标签: android compilation continuous-integration apk android-resources


    【解决方案1】:

    Android Studio 提供了一个名为“flavors”的功能,可让您从单个代码库中快速定义不同的配置。这两天我才知道这件事,所以我知道的不多。

    【讨论】:

    • 谢谢。我快速浏览了 studio 的 gradle 构建,发现这篇文章 (blog.robustastudio.com/mobile-development/android/…) 非常有帮助.. 将项目从 ADT 导出到 Android Studio 是否很麻烦?
    • @thinzar00 我有 7 个不同的 Eclipse 项目,用于我的应用程序的两个不同版本(付费和免费)、一个用于共享代码的库、三个测试项目以及一个模拟应用程序项目。我花了大部分时间将这些组合成一个 gradle 项目。 YMMV
    【解决方案2】:

    我发现最好的方法是构建后脚本步骤。为您的主要构建使用一组默认的资源/资产。这是您的默认 apk,将其用于默认测试。保存此构建的未签名 apk。然后对于客户特定的 APK,打开未签名的 apk(它只是一个 zip 文件),覆盖所有被覆盖的文件,然后签署新版本。

    只要您不需要为不同的客户更改代码,就可以正常工作。它也不会在任何构建中放置任何不需要的资产/资源,因此您不会通过包含其他客户的文件将有关其他客户的信息泄露给一个客户。

    如果您确实需要更改代码,最好的方法是对设置文件中的变量进行运行时检查。并以与其他所有操作相同的方式覆盖设置文件。

    作为额外的好处,如果您需要,您可以编写一个非常精美的系统,允许客户上传他自己的文件以覆盖您的默认设置(包括允许他们覆盖您的一些设置),这样您就不必需要处理十几个变更请求。不过,这需要更多的工作。

    【讨论】:

    • 对设置文件中的变量进行运行时检查我们如何做到这一点?我想将设置文件保存在远程服务器上。检索设置并保存到 sqlite 的方法是否正确?
    • 或保存到文件,具体取决于数据的类型和数量。
    • 谢谢。介意分享一下您通常如何执行“构建后脚本步骤”吗?