软件包R不存在......还是存在?

时间:2018-10-05 17:32:05

标签: android gradle

几天前,我接受了一位老客户的合同,希望在接下来的几周内对其Android应用进行一些更改。从Github获得项目源代码后,我将其导入Android Studio(3.2),并注意到我通常在Gradle同步期间经常看到该错误,但只是一小段时间:error: package R does not exist。自然,我耸了耸肩,先跑了“清洁项目”,然后跑了“制作项目”。

没什么改变

做了一个快速的Google搜索,并尝试了我能找到的每个“解决方案”。我尝试了可以​​想象的“制作项目”,“制作模块”,“清理项目”,“重建项目”,“用Gradle文件同步项目”,“用文件系统同步”,“使缓存无效/重新启动”的所有组合。我重新启动了笔记本电脑,更新了SDK文件,更新了构建工具,逐一列出了Gradle的每个“实现”行,最后最终卸载/重新安装了Android Studio,并删除了所有IDE首选项,以防万一。

什么都没有

接下来,我创建了一个新项目,并注意到生成的setContentView()行在引用生成的布局文件时存在相同的错误。 等等。一个未修改的新项目出现相同的错误?!?我继续按“运行”,然后编译项目,没有任何错误,这与实时检查的说法相反。

切换回原始导入的项目,我尝试运行它,并且编译器给出了相同的R包错误。为什么?!?!没有任何其他错误,Android Lint正常运行,文件中识别了我的Gradle实现,包名称都正确,并且我的AndroidManifest.xml文件非常完美。

如果您需要查看我的build.gradle文件,AndoridManifest或其他内容,请发表评论并告诉我。

有什么想法吗?

编辑

不是重复的,因为正如我提到的,我已经尝试了所有这些解决方案,但没有一个起作用。我解释了我的尝试以及为什么这是一种独特的情况。

比较您要构建的build文件夹的内容,您应该注意到其中的区别: enter image description here

是否注意到上部图像中的R文件夹标记不同?那是工作的。下部图像显示了损坏的项目。这些花了片刻。

enter image description here

2 个答案:

答案 0 :(得分:1)

如果我将AndroidManifest.xml编辑为具有与源结构不同的包名称,则可能导致类似的错误发生:

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.stackoverflow.garbage">

我在com.example.stackoverflow包中的所有代码都给我“包R不存在”错误。这是因为这些文件导入R.java,因为通常生成的R.java文件与这些文件位于同一软件包中。但事实并非如此:它在com.example.stackoverflow.garbage包中。

我可以通过添加导入来解决问题。但我也可以通过将清单的package属性更改回我的期望值来解决该问题。

答案 1 :(得分:1)

因此,事实证明,此痛苦的,特定的,未记录的错误与使用不同的google-services.json文件具有多个构建版本有关。在其中一个中,程序包名称不正确,但是由于它位于不同的源目录中,因此,Android Lint没有任何可用于比较程序包名称的上下文,并且未生成R.java文件,因为存在从技术上讲,Gradle Sync运行时发生错误。

在经过数小时的源文件浏览并在一个空项目中一次重新构建一个文件之后,我发现了这一点。当您终于解决了几天来一直在努力解决的错误时,您不会感到像这样!