【问题标题】:How do you inject build-specific configuration into an APK?如何将特定于构建的配置注入 APK?
【发布时间】:2011-03-17 05:07:25
【问题描述】:

我有一个 Android 应用程序,我将它分发给几个不同的市场提供商;每个应用程序的功能都相同,但需要某些不同的配置参数。理想情况下,我想在一个构建步骤中生成所有单独的 APK。有没有“官方”的方式来实现这一点?

我正在考虑一种方法,其中我在项目结构中有一个模板文件,并在构建时使用 ant 将值插入到输出文件中,例如 res/xml/config.xml。

提前致谢!

【问题讨论】:

    标签: android configuration build


    【解决方案1】:

    有几种方法可以解决这个问题:

    1) 设置 Android 库应用程序 (专为 Eclipse 设计)

    这是 Android 文档中建议的方法。使用此方法,您可以将应用程序设置为"Library Project"

    然后,对于您想要生成的每个特定构建,您将设置一个新的 Android 项目,references 之前创建的库项目。这个项目需要有自己的 AndroidManifest,它声明了库应用程序中使用的组件。由于每个应用程序都有自己的清单,因此几乎可以通过更换组件或更改信息来进行任何类型的定制。然而,虽然允许复杂的差异,但如果差异很少,这确实会在维护中产生一些冗余。

    2) 构建一个 ANT 脚本或其他构建脚本来操作配置

    ANT 脚本可以在构建时操纵源文件或 XML 文件以允许自定义配置。最简单的方法是使用 unix sed 或 python/ruby 脚本进行自定义。在自定义仅限于小的更改和/或仅文本替换的情况下,这是理想的选择。在大多数情况下,这是我选择的路线。

    我建议在进行操作之前将源代码树复制到一个临时目录,以便可以在“ant clean”上清除它并且不会影响源代码的工作副本。

    对此的一个警告是,我将设计修改,以便在不运行脚本的情况下仍然构建源代码(即,您可以在 eclipse 或任何其他环境中开发时进行标准构建,而无需运行特殊脚本)。

    【讨论】:

      【解决方案2】:

      我使用一个包含所有代码的库项目和两个(或更多)引用该库的项目。

      库项目的 res 文件夹中有一个名为 config.xml 的资源文件,该文件在其他项目中被覆盖。 这样我就可以拥有不同的应用程序设置,并且每个构建都有自己的 manifest.xml,因此您可以真正为每种构建类型配置不同的东西。

      这还允许您拥有特定的代码/权限/...只有特定构建才需要,并使构建过程非常容易。

      【讨论】:

        【解决方案3】:

        您可以为您的 apk 设置一个基于 Maven Android 插件的构建,该构建使用资源过滤和配置文件来满足您的不同配置。查看官方示例项目的 morseflash 示例,详细了解它是如何完成的。

        设置好配置文件后,您可以使用 maven 调用程序插件一次性运行所有配置文件。如果您想让它自动化,只需将构建放在 Hudson 上即可。

        http://code.google.com/p/maven-android-plugin/

        http://code.google.com/p/maven-android-plugin/wiki/Samples

        http://www.simpligility.com/2010/11/release-version-management-for-your-android-application/

        【讨论】:

          【解决方案4】:

          我使用一个 ant 脚本,它读取一些构建时参数并为我生成适当的 APK(appname-1.1_ggl、appname-1.1_amz.apk 分别包含指向 Google Market 或 Amazon Market 的链接)。手动运行两次没什么大不了的。

          这可能不现实,这取决于你有多少排列(你没有提到),但你可以使用subant。为您需要调用的每个排列使用不同的 buildpath 和后续的 build.properties

          【讨论】:

            猜你喜欢
            • 2015-11-17
            • 2014-01-01
            • 2010-10-14
            • 2011-11-28
            • 1970-01-01
            • 2022-01-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多