按产品风格配置applicationId后找不到R类

时间:2018-02-28 15:17:37

标签: android android-productflavors

我的应用程序中有两种风格,我希望每种风格都有不同的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

2 个答案:

答案 0 :(得分:2)

我找到了解决方案here。正如我所说,我使用Android Annotations,所以我需要在apt插件中配置包名:

apt {
    arguments {
        //more things
        resourcePackageName "com.mycompany.app" //add this line
    }
}

一切正常。

答案 1 :(得分:0)

使用文件菜单并执行无效缓存并重新启动。

在那里使用invalidate和restart选项。

它将重建索引并解决您的问题。如果这不起作用,也可以从构建菜单中进行干净的构建,并且工具栏上有一个gradle同步按钮,使用它。大多数情况下,无效和重启应该可以解决您没有任何其他错误的问题