我正在尝试合并我的免费应用程序和付费应用程序。Android 新构建系统的 productFlavors 似乎非常适合我的问题。
我的 freeApp 风格运行良好,但是当我构建paidApp 风格时,正在生成的 R 文件位于 freeApp 中定义的包结构中。
这是 gradle.build 文件的片段:
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 的人都会遇到的非常常见的情况。我一直在努力弄清楚大约一个星期,但我自己似乎无法到达那里。
谢谢,
-亚伦