针对不同环境的不同Android版本
问题描述:
我希望能够同时构建和安装我的应用程序的多个版本,针对不同的环境,例如开发,暂存和当然还有生产环境。针对不同环境的不同Android版本
AndroidManifest.xml
中的软件包名称似乎是此处的主要障碍,因为它是唯一标识该应用的唯一标识。我认为可以简单地在com.mydomain.prod
,com.mydomain.staging
和com.mydomain.dev
之间切换或者某种类似的约定,但到目前为止,我还没有想到可以使用适用于此方法的包结构。
我可以用什么策略尽可能地减轻痛苦?
答
我建议您使用'ant'构建工具来指定'regexp'任务,它可以用来替换某些文件中的文本(即根据正确的构建目标替换清单文件中的应用程序包名) 。你也可以为每个构建目标定义不同的属性文件(例如'build_development.properties'来保存所有参数来构建你的产品以进行开发环境。)...希望这有帮助..
答
使用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/
这些链接可能是有用的:
AndroidManif中的包字段est.xml只是Google Play使用的唯一标识符,不需要与您的Java源代码包结构相同。 – yorkw 2013-03-06 03:39:10
这不可能是真的,可以吗?如果我改变它,gen文件夹会发生变化,并且我会得到大量“R无法解析为变量”的错误。有没有办法避免这种情况? – 2013-03-06 03:43:33
文档:软件包名称用作应用程序的唯一标识符。它也是应用程序进程的默认名称(请参阅元素的进程进程属性)和活动的默认任务关系(请参阅元素的taskAffinity属性)。 –
2013-03-06 03:50:09