【问题标题】:How to create two or more APK packages from a single source tree, preferably in a single build如何从单个源代码树创建两个或多个 APK 包,最好在单个构建中
【发布时间】:2014-06-14 14:15:28
【问题描述】:

问题是如何从一个源代码树构建多个具有不同包名的 APK,以便并行安装。每个安装可能是与生产版本一起的内部测试版,或者可能是具有不同选项的同一应用程序的不同版本,或者可能用于 A-B 测试目的。为构建选择不同的源代码选项很容易,但输出不同的包名称并不容易。

包名在 AndroidManifest.xml 中指定,然后出现在 R.java 中并作为 XML 中的命名空间。根据一些搜索,它也可能是动态加载资源,意图命名等的一个因素。要找到所有需要重命名的地方并不容易。

似乎 AAPT 命令有一个 --rename-manifest-package` 开关可以完成这项工作。 SO上有各种较旧的问题,但这是最近的选择。这个link 展示了如何用Ant 来做这件事,但是我们使用Eclipse 和make,所以帮助不大。而this 最近的问题仅限于 Ant。

所以问题是:(a) 这是一个可行的解决方案 (b) 是否可以通过 Eclipse 构建来完成 (c) 它会遗漏什么,需要在运行的应用程序中意识到这一点?

【问题讨论】:

    标签: android eclipse apk


    【解决方案1】:

    为构建选择不同的源代码选项很容易,但输出不同的包名并不容易。

    如果您开始使用 Gradle for Android 进行构建。

    每次安装都可能是与生产版本一起的内部测试版

    这映射到 Gradle for Android 的“构建类型”概念。

    或者它可能是具有不同选项的同一应用的不同版本

    这映射到 Gradle for Android 的“产品风味”概念。

    或者它可能用于 A-B 测试目的

    我认为这里的常规方法不是拥有单独的 APK,而是一个单独的 APK,根据其他标准确定它是 A 还是 B,并做出相应的行为。

    包名在 AndroidManifest.xml 中指定,然后出现在 R.java 中并作为 XML 中的命名空间。根据一些搜索,它也可能是资源动态加载,意图命名等的一个因素。要找到所有需要重命名的地方并不容易。

    Gradle for Android 帮助将包名的角色拆分为:

    • 应用ID,用于判断是否可以在同一台设备上同时安装该应用和其他应用

    • 用于R.java 生成的包名

    构建类型允许您为包名称添加后缀,以用于应用程序 ID 角色。产品风格允许您出于应用程序 ID 角色的目的替换包名称。两者都不会影响用于您的资源的包名称。

    (a) 这是一个可行的解决方案吗

    如果我不得不猜测,这个开关就是 Gradle for Android 用于上述应用程序 ID 更改的开关,因此它应该可以在其他地方使用。

    (b) 是否可以通过 Eclipse 构建来完成

    我不知道您可以在 Eclipse 中更改这些类型的开关。 Gradle for Android 也不会在 Eclipse 内部运行,至少目前不会。但是,无论如何,恕我直言,您正在寻找的东西对于 IDE 没有多大意义。直接使用 Ant,直接使用 Gradle for Android,或者使用 Ant 或 Gradle for Android 的持续集成服务器。

    (c) 它会遗漏什么,需要在运行的应用程序中意识到这一点?

    如果您所说的“它”是指重命名的应用程序 ID,它应该对您的大部分代码没有影响。不过,getPackageName() 应该返回应用程序 ID,因此依赖它的事物(例如 Maps V2 API 密钥)需要考虑各种可能的值。

    【讨论】:

    • android studio 看起来很棒我最好从 eclipse 切换
    • @IllegalArgument:请注意,虽然 Android Studio 默认使用 Gradle for Android,但您不需要 Android Studio 即可使用 Gradle for Android。例如,我现在在 Eclipse 中进行大部分 Android 开发,但我也使用 Gradle for Android 从我的 CWAC 库中准备 AAR 文件,以使 Gradle for Android/Android Studio 开发人员更容易使用这些库。我还有我的 Gradle 构建脚本,为那些可以以这种方式打包的库创建我的 JAR。
    • 感谢您的冗长回答。但是 (a) 切换构建平台是一项重大投资 (b) 我们确实需要它来与 Eclipse 很好地配合 (c) 我更愿意单独解决这个特定问题,并选择一个构建平台(或不同的 IDE)其他理由。
    • 这很好,但实际上并没有回答问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    相关资源
    最近更新 更多