【问题标题】:Different Android Builds For Different Environments针对不同环境的不同 Android 构建
【发布时间】:2013-03-06 03:26:07
【问题描述】:

我希望能够(同时)构建和安装我的应用的多个版本,针对不同的环境,例如开发、暂存,当然还有生产。

AndroidManifest.xml 中的包名称似乎是这里的主要障碍,因为它是应用程序的唯一标识。我认为可以简单地在com.mydomain.prodcom.mydomain.stagingcom.mydomain.dev 或某种类似的约定之间切换,但到目前为止,我还没有找到适用于这种方法的包结构。

我可以采用什么策略来尽可能减少痛苦?

【问题讨论】:

  • AndroidManifest.xml中的package字段只是Google Play使用的唯一标识,不需要和你的java源码包结构一样。
  • 这不可能是真的,不是吗?如果我更改它,gen 文件夹会更改,并且我会收到大量“R 无法解析为变量”错误。有没有办法避免这种情况?
  • Docs:包名作为应用程序的唯一标识符。它也是应用程序进程的默认名称(参见 元素的 process 进程属性)和活动的默认任务亲和性(参见 元素的 taskAffinity 属性)。
  • 与 R 无关,您只需在 AndroidManifest.xml 中定义应用程序、活动等 android 组件时使用完整的包/类名称。查看here 了解通过 android-maven-plugin 可以轻松实现这一点。
  • 这对我有用。 stackoverflow.com/a/5195633/182544我没有在我的应用程序、活动、服务和接收器清单节点中使用完全限定的类路径。

标签: android android-manifest android-build


【解决方案1】:

使用 Gradle,您可以指定应用程序的不同“风格”。这是在您的build.gradle 中完成的:

android {
    // …

    defaultConfig {
        // …
    }

    productFlavors {
        prod
            applicationId "com.mydomain.prod"
        }

        staging {
            applicationId "com.mydomain.staging"
        }

        dev {
            applicationId "com.mydomain.dev"
            versionCode 2
        }
    }
}

每个风味属性都继承自 defaultConfig

现在,在您的应用程序的 src 目录中,您可以在其中创建包含特定风格代码/资源的目录:

app/
|-- src/
    |-- main/
    |-- prod/
    |-- staging/
    |-- dev/

这些链接可能有用:

【讨论】:

    【解决方案2】:

    我建议您使用“ant”构建工具,特别是“regexp”任务,该任务可用于替换某些文件中的文本(即根据正确的构建目标替换清单文件中的应用程序包名称)。您还可以为每个构建目标定义不同的属性文件(例如,'build_development.properties' 来保存与构建开发环境的产品相关的所有参数。)...希望这会有所帮助..

    【讨论】:

      猜你喜欢
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 2021-03-19
      • 2018-10-26
      • 2020-05-22
      • 2021-03-19
      • 1970-01-01
      相关资源
      最近更新 更多