【问题标题】:Gradle Android plugin generate R files for different product flavors?Gradle Android 插件为不同的产品风格生成 R 文件?
【发布时间】:2013-11-13 05:04:49
【问题描述】:

我正在尝试合并我的免费应用和付费应用。 Android 新构建系统的 productFlavors 似乎非常适合我的问题。

我的 freeApp 风格运行良好,但是当我构建paidApp 风格时,正在生成的 R 文件位于 freeApp 中定义的包结构中。

这是来自 gradle.build 文件的 sn-p:

productFlavors {
freeApp {
    versionCode 201308020
    versionName "2.0.13_free"
    packageName "com.flyingspheres.android"
}
paidApp {
    versionCode 201305110
    versionName "2.0.10_paid"
    packageName "com.flyingspheres.android.inventory"
}

我一直认为 R 文件的位置是由清单中的包名定义的。我验证清单文件生成正确。

问题在于两种风格的 R 文件位于同一位置。 Gradle 要求清单存在于主源代码树中,因此无论我放在主源代码树中的清单版本如何,都会生成 R.java 文件。

假设我让 R 文件在每个风味的正确位置生成;应该如何管理 R 文件的导入语句,以便每种风格都引用正确的 R 文件?

这是我的项目结构的屏幕截图:

每个 AndroidManifest.xml 文件都是完整且完整的清单 - 根据文档,主树中的清单应完全覆盖产品风味版本。虽然,这显然不会发生,因为应该启动的活动和内容提供者没有被覆盖。

对于我做错了什么的任何见解将不胜感激。这必须是任何覆盖 packageName 的人都会遇到的非常常见的情况。我已经尝试了大约一周的时间,但我似乎无法自己解决。

谢谢,

-亚伦

【问题讨论】:

    标签: android gradle


    【解决方案1】:

    在 android 的 gradle 插件 0.7.3 下,生成的 R.java 文件src/main 的包名制作.它包含不同风格的所有资源,它只是将它们放入一个生成的R.java 文件中。我是从an IO talk 那里听到的。

    src/main/AndroidManifest.xml 中的包名称是什么?我猜是com.flyingspheres.android

    尝试在您的类中导入R,这需要使用您的src/main 的包名以编程方式访问资源。

    例如

    import com.flyingspheres.android.R;
    

    【讨论】:

      猜你喜欢
      • 2020-03-02
      • 2016-07-11
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      • 2022-08-09
      • 2014-09-02
      相关资源
      最近更新 更多