Android Studio中的“无法解析符号R”


715

在我所引用的所有类的所有实例中R.id.somethingR都是红色,并显示“无法解析符号R”。同样,每次都有R.layout.something红色下划线表示“无法解析方法setContentView(?)”。该项目始终可以正常运行。一直看到这很烦人。我在这里阅读了许多其他问题,这些问题与相似但最涉及从Eclipse导入项目有关。我使用的是我认为是Android Studio的最新版本,并且该项目是使用Android Studio创建的,并且可以正常工作而没有任何“无法解决R”问题。如果有人知道,我想知道是什么原因造成的。


在过去,我遇到了xml错误,例如:无法将progressbar强制转换为android.widget.textview,我只是通过更改textview的名称来解决了这一问题。我仍然真的不知道是什么导致错误开始的。
ez4nick

如果您更改了名称,也许您现在正在尝试使用res / strings.xml中不存在的字符串引用?
眼球

2
在问这个问题之前,我搜索了很多次,发现了很多类似的问题,包括您提到的问题。我确实读过该问题的建议,并且在我的任何Java文件中都没有导入Android.R。
ez4nick

2
嘿,自从很久以前问这个问题以来,我就忘记了问这个问题。我应该在一年前接受我自己的回答,现在是上面的评论。问题只在于android studio当时还处于早期阶段,作为一个新开发人员,我永远都不会使用它。放心,现在一切都正常。如果可能的话,请取消删除我的原始答案,以便我接受。
ez4nick

3
找不到R不是您的错误,它是由构建错误引起的错误。修复其他错误,您应该会很好。
Just_someone

Answers:


720

我也有这个问题。一个简单的“ gradlew clean”和“ gradlew build”就可以解决问题。


点击Build- > Clean Project,这将执行gradle clean


56
有时您还需要重新启动android studio。或至少对我来说。
Foo Bar用户

24
对于那些使用命令行进行抽搐的用户,请单击Build-> Clean Project,这将执行“ gradlew clean”。;)
Concolato先生2014年

22
没运气...清洁重建无法正常工作
CandleCoder

7
如果清理,重建,使缓存无效-重新启动不能解决问题,请执行以下操作:import package.R;
Sudip Bhandari

2
对我来说,这是造成问题的原因:gradle中的ApplicationId与清单中的包名称不匹配(尽管自动导入为R文件添加了错误的地址)。我推荐这篇小文章来澄清两者之间的区别。blog.stylingandroid.com/package-name-vs-application-id
Tina,

227

在最新版本的Android Studio中,至少对我而言,以下工作有效:

“工具”->“ Android”->“使用Gradle文件同步项目”

在最新的Android Studio 3.1.3(2018年7月)中,主菜单栏中提供了“使用Gradle文件同步项目”。

在此处输入图片说明


您当时使用的Android Studio版本是什么?
乔尔·汉德威尔

不适用于我(Android Studio 0.8.14)。但是,“构建”>“清理”项目效果很好。
Phat H. VU 2014年

仍可在Android 1.2.1中使用。如果第一次不能使用,请记住要多次进行。
2015年

这是唯一对我有用的东西。我首先尝试了所有其他解决方案。
Mac

1
在Android Studio 3.1.1中,此选项位于“文件”->“与Gradle文件同步项目”中
Hrishikesh Kadam '18

155

我正在使用gradle 3.3.0。这是主要的罪魁祸首。从我的生命中浪费了6.50个小时。Gradle 3.2.1消除了该错误。

classpath 'com.android.tools.build:gradle:3.2.1'

更改gradle版本后问题已解决。详细历史记录可以在这里找到。


9
Android Studio开发人员的又一壮举。回到3.2.1原来实际上是对我
有用

1
令人惊讶的是两个月后仍然是一个问题。最新版本(3.3.2)未修复,而3.2.1已修复。
JakeSteam

3.2.1您也可以将Android Studio升级到版本,而不用回到gradle 3.3在这里
arne.z

它通过将3.3.0更改为3.2.1起作用,但是我的问题在3.3.0上可以正常工作,我刚刚重构并更新了清单xml文件和gradle文件,并且已经同步了gradle。可我知道可能是什么原因
insoftservice

25小时的上网时间,看来这是唯一可行的解​​决方案。感谢android studio:(....
Nahabwe Edwin

108

我有一个类似的问题,这是我所做的:

清理项目并使用Gradle同步项目,

在此处输入图片说明

检查我的SDK中的buildTools版本 在此处输入图片说明

从构建包(模块)将minSdkVersion从8更改为9

defaultConfig {
        applicationId "PackageName"
        minSdkVersion 9
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }

但是所有这些都无济于事。

最终,我找到了答案(在我的情况下有效)

从build.gradle(module:app)更改

android {
    compileSdkVersion 21
    buildToolsVersion '21.0.1'
......
....
}

要么

选择文件| 项目结构将构建工具版本更改为21.1.1

在此处输入图片说明


这对我也起作用,更改了构建并设置了gradle(模块)文件
Samuele Bolognini

谢谢您,这是明智的选择。
App Dev Guy

58
  1. 检查您的xml文件。
  2. 清洁项目。

就是这个。

例如,我在我的条目strings.xml

<string name="A">Some text</string>

activity_main.xml我用这个字符串条目

<TextView
android:id="@+id/textViewA"
android:text="@string/A"/>

在处理项目时,我删除了

 <string name="A">Some text</string>

因此activity_main.xml无效。结果:无法解析R。

因此,请检查您的*.xml文件并清理项目。


这真的救了我一命[加一]
GingerHead

我的XML所涉及的一个丢失的图像对我造成了此问题。将图像放在文件夹中,清洗后,R现在又开心了。
Casey Murray

我不小心在strings.xml中两次定义了我的字符串。Studio完全没有显示。X-(感谢您的回答
。– encodingjeremy

这是供其他开发人员阅读的。这种单独的方法应该可以解决问题,就像对我一样。
Paramvir Singh Karwal

6
为什么没有反馈在IDE中为不良XML文件加下划线?
Fuhrmanator

53

如果将Java文件或目录移动到其他位置后看到此错误,则可以保证Android Studio感到困惑。你猜怎么着?撤消这些操作并不能解决问题。

因此,您尝试进行清洁,但这不起作用。

并且重新启动也不起作用。

但是尝试文件->使高速缓存无效/重新启动...->使无效并重新启动

Android Studio维护有关哪些文件依赖于其他文件的信息。并且由于没有正确实现文件移动,文件移动会导致错误。而且还不止这些:使用这些依赖项的缓存来加快构建速度。

这意味着您不仅必须重新启动,还需要使那些缓存无效以恢复(或更准确地说,重建)完整性。


没有帮助。也尝试过清洁/重建。将Java程序包移至另一个程序包后发生错误。有趣的是,可以在一个包中访问R类,但不能在我移动的包中访问它。
rint

在最新版本的Android Studio中,“无效”和“重新启动”现在是默认菜单选项。这应该至少可以帮助几个人。(太糟糕了,他们并没有解决所有导致该错误的疯狂错误!)
Scott Biggs

1
移动并重命名项目后出现此错误。解决了所有清洁和重新启动之后的R问题。谢谢。
FrankKrumnow

2
这大约与喝杯咖啡的时间相同-如果它仍将R标记为红色,则可以用来冲个漂亮的咖啡水...ヽ(´ー`)ノ
ZooMagic

1
找到了我以前的评论的gif-
ZooMagic

30

我认为,如果将“活动”文件放到默认文件夹以外的其他文件夹中。您需要使用将com.example.yourproject.R(这是您的项目R文件NOT Android.R文件)导入到所有活动中R。例如,在MainActivity文件中插入以下行:

import com.example.yourproject.R;

1
啊,在您第一次构建之前,仍然会有错误消息。但是,只要按build,Android Studio就会生成R文件,并且构建应该成功。
ninjahoahong

而且我认为最好是在修复之后,清理项目然后再构建。或按Shift + F9键以使用设备或仿真器进行调试。我更喜欢在真实设备上调试。
ninjahoahong 2014年

这是最好的解决方案。谢谢花花公子
阿伦杰夫

这个答案就是魔杖。谢谢
leeCoder

28

出现此问题的原因似乎很多。最近,我添加了一个名为NewActivity的活动进行测试。这创建了一个名为的文件,res/menu/new.xml而gradle不喜欢该名称,因为new是保留字。

gradlew clean

要么

"Tools" -> "Android" -> "Sync Project with Gradle Files"

这些绝对是不错的尝试,但是在运行这些命令之前,您可能还需要解决一些其他问题。


谢谢也为我工作。小问题-如果我想以这种方式进行操作,应该在哪里键入gradlew clean(我是否执行过“工具”->“ Android”->“使用Gradle文件同步项目”)?
Sergii 2014年

打开命令终端,切换到项目目录并执行“ ./gradlew clean”
chawkinsuf 2014年

那就是我的意思。谢谢!
TinyGrasshopper 2014年

如何比“重建项目”更好地解决问题?
IgorGanapolsky

是的,在我的情况下,我添加了一个名为“ import.png”的png文件。我必须将其重命名,在我的情况下为“ import_icon.png”,然后项目编译成功。
mihai71

17

R.java文件包含xml和Java页面之间的链接。仅当某些资源文件出现问题时,才会出现“ R无法解析”。因此,最好和有效的方法是删除res文件中最后完成的xml或drawable。然后再根据android编码规范从那里开始。这是唯一的方法。有效和正确的方法。

也可以使用Git正确跟踪代码。..


就我而言,不仅存在XML问题,还存在PNG(可绘制)问题。
CoolMind '16

15

您的代码只是乱码。答案很简单。

只需转到Build- > Clean Project

这应该够了吧。

还要检查您的Android Studio版本。

我目前正在使用Android Studio 3.0.1


14

您最近是否更新了SDK工具?启动android SDK Manager,并确保您拥有最新的SDK工具,该工具现已与平台工具分开。我有同样的问题,当我第一次更新我的SDK管理器,该SDK 构建工具包没有露面的安装/升级,直到我关闭并重新打开SDK管理器。


我相信那里的一切都是最新的。真的会引起这样的问题吗?
ez4nick

如果您没有安装新的SDK 构建工具,则可以。
invertigo 2013年

12

只需清理您的项目并使用Gradle File同步项目即可。在此处输入图片说明

问题将得到解决。


应该注意的是,右键单击“应用程序”并单击菜单中的“同步”按钮不能实现此目的。谢谢。
Mafro34

11

我有这个

  1. 我的可绘制资源中的一个大写字母。
  2. 导入由Android Studio(或Eclipse)添加的Android.R
  3. xml文件中的错误

我遇到了这个问题,因为我的一个XML文件中有一个错误。解决了问题,然后做了Build->Clean Project
AjayCodes

11

我最近遇到了这个问题,清理/构建等都没有解决。我猜想我在某个地方有问题,但是不确定在哪里可以找到它(是在清单,资源xml文件中吗?)。

如果出现问题,可以通过执行代码分析来找出问题所在。

从顶部的菜单中选择:

分析->检查代码,使用“默认”配置文件扫描整个项目。

您的检查结果将包含一个名为“ Android”的元素。在这里,您将获得导致资源和清单文件出现问题的所有内容的列表。错误将打开从您的构建生成的xml文件,该文件将以红色显示任何错误。

我的确切问题是由于我使用的是基于样式的清单文件引起的,并且我在 <application>偶然在该风味中标签。

检查

更新:即使在错误仍然存​​在的情况下我现在可以构建并正常运行,但在修复后Android Studio仍然显示错误之后,我确实遇到了问题。(我正在运行一个金丝雀构建,所以现在将其归结为该构建)


有趣的是,我只在一个文件上遇到了这个问题,然后运行了“检查代码”过程,并清除了它(清理和重建并没有解决问题)。必须在Lint中保留某些东西,只有这些东西才能清除。谢谢!
rundavidrun

这次真是万分感谢!尽管这发现了许多一般的错误,这是可以预料的,但使整个城堡瓦解的却是Asset Studio生成的XML文件中的一个小语法错误!解决此问题后,“清洁项目”使我继续前进。
Bink

10

我必须R在android studio中导入我的包。例如:import com.example.<package name>.R


1
我想过就来过这里。再次感谢
Ohiovr

1
这对我有用。非常感谢你。
Aquarius_Girl

在我重构了程序包名称后,这发生在我身上,但是android studio以某种方式离开了import com.example.old-package-name.R,所以我不得不重命名导入。
auspicious99

9

这是一个非常老的问题,但是仍然经常发生,这里没有真正全面的答案。

我遇到这个问题的次数比我想承认的要多。它可能是由各种各样的问题引起的,这些问题几乎都与您的项目结构不符预期。以下是我遇到的所有问题的列表:

从Eclipse导入到Android Studio并不总是能顺利进行,尤其是在旧版本的Android Studio中。确保使用正确的目录树。对于中等成熟的应用,它应该看起来像这样:

AppName/        // AppName is your app's name, obviously
    .gradle/    // This is a compiler created directory. You should normally leave it alone
    .idea/      // Ditto
    build/      // This too
    gradle/     // And this
    app/
        build/
        libs/
        src/
            androidTest/   // Tests based on the Android instrumentation runner should go here
            main/
                java/
                    fully/           // Typically com
                        qualified/   // the domain name. Longer package 
                                     // names may have deeper folder trees
                            AppName/ // All your java files go here
                res/
                    drawable-*/      // One of these for each resolution you support
                    layout/          // All of your general layouts
                    menu/            // All of your menu layouts
                    values/          // All of your resource xml files
                    xml/             // PreferenceScreen layouts go here
                AndroidManifest.xml
            debug/         
            test/          // Pure jUnit tests should go here
        .gitignore
        app.iml
        build.gradle   // This is the gradle file you should be making most changes to
        proguard-rules.pro
    .gitignore
    build.gradle       // This gradle file should mostly be left alone
    gradle.properties
    gradlew
    local.properties
    AppName.iml
    settings.gradle

在您的IDE中可能看起来不是这样。文件树上方有一个下拉菜单,以不同方式显示文件,并且在我的系统上默认为一个名为Android的文件,可将文件分为不同类型。从一个叫做Project的问题更容易解决这种问题,甚至从OS的文件系统直接解决这个问题也很容易,因为Android Studio会将仅包含另一个文件夹的文件夹折叠到一行上。

特别是如果您更改了应用程序的名称,则需要确保源树main / java / com / domain / AppName已更新。还要确保您的AndroidManifest.xml中的package标签正确。

如果您的Gradle文件或AndroidManifest.xml中存在错误,这将阻止Android Studio正确构建资源文件。有时可以通过升级Android Studio来破坏Gradle文件,尤其是从1.0之前的版本升级时。有时这是因为它不再支持Gradle插件的旧版本,因此您需要更新版本号。有时可能很难找到当前版本。截至今天(2015年7月17日),我的应用可以通过com.android.tools.build:gradle:1.2.3。这在最外面的gradle文件中的依赖关系块中,

如果您的AndroidManifest引用了不存在的可绘制或字符串资源或活动,它将中断并导致此错误。有时,如果任何内容引用了不存在的可绘制对象或字符串资源,则会出现此错误。

如果您的资源中有一个损坏的文件或无效的xml文件,则会收到此错误。

以我的经验,有时Android Studio会无缘无故打,,您需要重新启动它和/或PC。我不知道为什么,但是有时候可以。

如果在彼此不覆盖的目录中有两个具有相同名称的xml资源,则可能会出现此问题。例如,您可以在drawable-mhdpi和drawable-xhdpi中使用相同的名称,因为它们会根据目标设备相互覆盖,但是如果您在布局和菜单中使用相同的名称,则会导致问题。重命名或删除其中一个文件。

如果只有一些资源有此问题,则这些资源很可能位于错误的目录中。

在一种情况下,我必须完全重新安装Android Studio。我不知道出什么问题了,但是它奏效了。

在一种情况下,我将整个项目移到另一个目录,然后将其重新导入为新项目。我不知道出什么问题了,但是它奏效了。

具有名称保留字的Xml文件可能会导致此问题。重命名或删除它们。

Gradle文件最终有几种方法可以引用尚未安装的构建工具的版本。通过更改Gradle或下载适当的构建工具来更正此问题。

最后,修复所有错误之后,需要清理Gradle项目。为此,请转到顶部的“生成”菜单,然后选择“清理项目”。


9

只需转到Android顶部菜单列表。单击“ 生成”菜单,在“生成”下,单击“ 重建项目”。

在此处输入图片说明


9

当我手动重命名应用程序的域文件夹时,我遇到了这个问题。为了解决这个问题,我不得不

  1. 设置适当package的文件夹结构<manifest>AndroidManifest.xml
  2. 设置新的包位置android:name<activity>AndroidManifest.xml
  3. 清除缓存依据

文件菜单->使缓存无效/重新启动...

Android Studio重新启动并建立新索引后,该问题将消失。


9

我遇到了同样的问题:Android Studio 3.2该项目可以编译并正常运行,但是在屏幕上出现“无法解析符号“ R””警告

难道没有帮助:

  • 构建->清理项目
  • 生成->重建项目
  • 文件->使缓存无效/重新启动

帮助:

要么

在build.gradle中

dependencies {
        classpath 'com.android.tools.build:gradle:3.3.0'
...
}

用。。。来代替

   dependencies {
            classpath 'com.android.tools.build:gradle:3.2.1'
    ...
    }

要么

将Android Studio更新到3.3


你救了我的命 !将Android Studio更新到3.4为我解决了这个问题
-Artory

8

对于这个问题,我有一个特殊情况。

在我的项目中,一切正常,可以成功编译和构建,但是在我的Android Studio IDE中(并且我也尝试过Intelligent IDEA,它们处于相同情况),R.java文件无法很好地解析,并且总是放下红线。

像这样: 在此处输入图片说明

这几乎使我发疯,编程时我无法忍受读取的颜色。

最后,我发现这个棘手的问题是由我的R.java的文件大小引起的。我的项目非常庞大,它支持多种语言和多种屏幕尺寸。资源太多,我的R.java文件大小约为 2.5M

默认设置下,Android Studio中文件的最大大小为2.5M,因此无法很好地解析大于此限制的文件。您可以在“ AndroidStudio-root / bin / idea.properties”中更改默认设置。

更改此行:

idea.max.intellisense.filesize=2500

至 :

idea.max.intellisense.filesize=5000

然后重新启动Android Studio,红色消失了,我可以再次编程愉快。


在Android 3.2中,只需帮助/编辑自定义属性
-Beto

一个很好的提示,但它并不能解决我无法解决的符号R
Aliton Oliveira,

7

构建>清洁项目

这对我有用。几次遇到相同的问题,这似乎设置正确。除非您更改了某些内容或将其称为变量R。这个问题通常在我发生的地方突然发生,所以我认为它只是Android工作室吓了一跳。哈哈

祝您项目顺利,万事如意。


谢谢。它也对我有用。我替换了drawable中的某些图像,并得到了该错误。
KCP

7

做:建立>清理项目

重要说明:确保在“消息窗格”(Alt + 0)中的“清理项目”之后没有任何错误。如果您发现任何带有感叹号的红色圆圈,则必须删除代码中的这些错误。

这些错误通常与@ string /或@ array /有关。再次清理项目并完成!


7

我遇到了同样的问题,当我创建一个新项目时就会发生。

我要做的是:

  • 检查SDK更新
  • 然后android studio更新,
  • 然后重新打开项目
  • 打开andoridmanifest.xml
  • 删除android:label中“ _>”之间的空格并保存。

这对我行得通。



6

我遇到了同样的问题,多数情况下是通过解决

  • 与Gradle文件同步项目
  • 建设->清洁项目
  • 正在执行文件->使缓存无效

但是这次即使执行了所有这些操作后,错误仍然存​​在,最后我找到了罪魁祸首。

问题出在一个xml文件中,在该文件中,我给出了普通字符串值,android:id而不是id资源类型

错误

android:id="username"

更正

android:id="@id/username"

弄乱resourcesxml文件中与之相关的内容是导致此错误的主要原因。请注意,它可能不会在xml布局文件中显示为错误。

注意

在大多数情况下,编译器会在“消息”中向您显示错误源。尝试其他解决方案之前,请先检查一下


6

`我有同样的问题,它通过以下方式解决了:

1) Sync Project with gradle files
2) Build -> Clean Project
3) Build -> Rebuild Project
4) File -> Invalidate caches

//imp step
5) Check your xml files properly.`

尽管我只需要在gradle文件中放置“ //”并选择重新同步,这是一个很好的答案。然后,所有AS都识别了导入,并允许我运行该应用程序。
瓦尔

5

这种表示法似乎工作正常。

android:id="@+id/viewID"

Android Studio的设计面板似乎无法正常工作。


5

同样的问题。当我在可绘制文件夹中添加一些图像并尝试访问它们时开始。另外,添加的图像都使用大写字母扩展名。这似乎使构建崩溃,因为即使我重命名了它们,消息也是一样的,并且R无法访问。我所做的是,在.iml文件中,我查找了excludeFolder并将其删除(例如以下所示):

  <excludeFolder url="file://$MODULE_DIR$/build/apk" />
  <excludeFolder url="file://$MODULE_DIR$/build/assets" />
  <excludeFolder url="file://$MODULE_DIR$/build/bundles" />
  <excludeFolder url="file://$MODULE_DIR$/build/classes" />
  <excludeFolder url="file://$MODULE_DIR$/build/dependency-cache" />
  <excludeFolder url="file://$MODULE_DIR$/build/incremental" />
  <excludeFolder url="file://$MODULE_DIR$/build/libs" />
  <excludeFolder url="file://$MODULE_DIR$/build/manifests" />
  <excludeFolder url="file://$MODULE_DIR$/build/res" />
  <excludeFolder url="file://$MODULE_DIR$/build/symbols" />
  <excludeFolder url="file://$MODULE_DIR$/build/tmp" />

之后,我重新构建了项目,并神奇地重新出现了R。


5

有很多原因导致此错误。

  1. 有时会发生替换具有相同名称的图像文件的情况。
  2. 假设您从布局.xml中删除了一个项目,说一个 <Button/>但仍在任何Activity或Fragment .java中声明了该项目。
  3. 还有很多。

跟踪错误的最佳方法是相当干净地重建它或同步处理某些故意的错误。

如果不能解决您的问题,则必须存在一些缺陷或运行时错误,或者由于不当使用资源而发生错误,因为代码或设计中可能是java或xml文件,这迫使gradle停止,因为(R )资源文件无法正确索引您的资源,因此您必须承认这一点。

如果您的项目在进行更改之前已运行,请注释掉所做的更改,然后尝试重建项目。

由于没有任何变化,它肯定会工作。

要跟踪确切的错误,请通过将更改分成较小的模块来检查更改。

例如-如果要通过单击按钮使列表可见并在适配器中插入列表值,请首先检查是否能够使其可见,然后检查适配器错误。


4

这让我头疼。就我而言,在Android Studio中配置“ Google Play服务”(安装+ build.gradle配置)后,出现了错误。反过来,这要求minsdk> 7,但错误尚不清楚(实际上对此的投诉仅显示为“ info”)。无论如何,在清单文件和build.gradle文件中将minsdk都更改为8并重建项目后,错误消失了。

所以..关于此问题的一般建议,如果我可以概括一下-您的清单文件或某些其他配置文件中可能存在一些问题,这妨碍了正确的构建。尝试认真查看错误报告,甚至是标题为“ info”的消息,以获取有关错误报告的任何提示...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.