我的应用程序中有两种风格,我希望每种风格都有不同的applicationId
。这就是我所拥有的:
defaultConfig {
applicationId "com.mycompany.app"
//more stuff
}
...
productFlavors {
firstflavor {
applicationIdSuffix '.first'
//more stuff
}
secondflavor {
applicationIdSuffix '.second'
//more stuff
}
}
在AndroidManifest.xml
中,我有package="com.mycompany.app"
,所有代码都在该软件包下。
当我用它组合时,比如说firstflavor
,我收到了这个错误:
错误:生成的com.mycompany.app.first.R类不能 结果
不应在R.class
而不是com.company.app
下生成com.company.app.first
吗?
它是如何与应用程序ID相关的包?
如果我删除了应用程序ID风格配置(applicationIdSuffix
),一切正常。
修改
我已阅读此here:
如果BuildConfig.java和R.java文件设置为applicationId 而不是包名称,然后是引用这些的代码 需要针对不同的构建变体进行不同的导入 - 在 换句话说,你需要有单独的源集(有巨大的 你的不同构建口味的重复数量) 访问这些。这将有一些非常深刻的影响 我们代码的可维护性。
但是,错误表示无法找到com.mycompany.app.first.R
。但是,com.mycompany.app.first
是应用程序ID,而不是包名称!那是为什么?
我正在使用Android Annotations 3.3.2
答案 0 :(得分:2)
我找到了解决方案here。正如我所说,我使用Android Annotations,所以我需要在apt插件中配置包名:
apt {
arguments {
//more things
resourcePackageName "com.mycompany.app" //add this line
}
}
一切正常。
答案 1 :(得分:0)
使用文件菜单并执行无效缓存并重新启动。
在那里使用invalidate和restart选项。
它将重建索引并解决您的问题。如果这不起作用,也可以从构建菜单中进行干净的构建,并且工具栏上有一个gradle同步按钮,使用它。大多数情况下,无效和重启应该可以解决您没有任何其他错误的问题