不同环境下使用不同的Android构建版本

11
我希望能够构建和安装多个版本的应用程序(同时),针对不同的环境,如开发、暂存和生产等。在AndroidManifest.xml中的包名称似乎是最大的障碍,因为它是唯一标识应用程序的东西。我认为可以简单地在com.mydomain.prodcom.mydomain.stagingcom.mydomain.dev之间切换,或者采用类似的约定,但到目前为止,我还没有找到适合这种方法的包结构。我可以采用什么策略来尽可能地减少痛苦呢?

AndroidManifest.xml 中的 package 字段只是 Google Play 使用的唯一标识符,不需要与您的 Java 源代码包结构相同。 - yorkw
这不可能是真的,对吧?如果我改变它,gen文件夹会改变,然后我会得到一堆“R无法解析为变量”的错误。有没有什么方法可以避免这种情况? - E-Madd
文档:包名作为应用程序的唯一标识符。它也是应用程序进程的默认名称(请参见<application>元素的process属性)和活动的默认任务亲和性(请参见<activity>元素的taskAffinity属性)。 - E-Madd
与R无关,唯一需要做的就是在AndroidManifest.xml中定义android组件(如应用程序、活动等)时使用完整的包/类名。请查看此处,了解如何通过android-maven-plugin轻松实现这一点。 - yorkw
1
这对我有用。https://dev59.com/HVTTa4cB1Zd3GeqPwufj#5195633 我的应用程序、活动、服务和接收器清单节点中没有使用完全限定的类路径。 - E-Madd
2个回答

9

使用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/

以下链接可能会有所帮助:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接