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

问题描述 投票:690回答:96

在我引用R.id.something的所有类中的每个实例中,R都是红色的,它表示“无法解析符号R”。每次有R.layout.something时,它都用红色加下划线并说“无法解析方法setContentView(?)”。该项目总是很好。一直看到这一点很烦人。我在这里已经阅读了许多关于类似的东西的其他问题,但大部分涉及从Eclipse导入项目。我使用的是我认为最新版本的Android Studio,该项目是使用Android Studio创建的,并且没有任何“无法解决R”问题。如果有人知道,我想知道是什么原因造成的。

android android-studio r.java-file
96个回答
709
投票

我也有这个问题。一个简单的'gradlew clean'和'gradlew build'就可以了。


单击Build-> Clean Project,这将执行gradle清理


14
投票

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

Just go to **Build** --> **Clean Project**.

这应该够了吧。

我目前正在使用Android Studio 3.0.1。


13
投票

您最近更新了SDK工具吗?启动android SDK管理器并确保您拥有最新的SDK工具,现在它们与平台工具分开。我第一次更新我的SDK管理器时遇到了同样的问题,在我关闭并重新打开SDK管理器之前,SDK构建工具包没有显示安装/更新。


12
投票

只需清理项目并使用Gradle文件同步项目。

问题将得到解决。


11
投票

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

当出现问题时,您可以通过执行代码分析来了解它是什么。

从顶部的菜单中选择:

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

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

我确切的问题是因为我使用了基于风味的清单文件,并且我在<application>标签内复制了一些权限。

Inspection

更新:我确实有一个问题,Android Studio仍然在修复后显示错误,即使我现在可以构建并运行完全正常,但错误仍然存​​在。 (我正在运行一个金丝雀构建,所以暂时将其归结为此)


9
投票

我有这个

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

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的问题中解决这类问题,甚至可以直接从操作系统的文件系统中解决,因为Android Studio会将仅包含另一个文件夹的文件夹折叠到一行上。

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

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

如果您的AndroidManifest引用了不存在的drawable或字符串资源或活动,它将会中断并导致此错误。有时,如果有任何引用不存在的drawable或字符串资源,您将收到此错误。

如果资源中的文件已损坏,或者xml文件无效,则会出现此错误。

根据我的经验,有时候Android Studio会毫无理由地打嗝,你需要重新启动它和/或你的PC。我不知道为什么,但有时候它有效。

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

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

在一个案例中,我不得不完全重新安装Android Studio。我不知道出了什么问题,但它确实有效。

在一个案例中,我将整个项目移动到另一个目录,并将其作为新项目重新导入。我不知道出了什么问题,但它确实有效。

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

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

最后,在修复了任何错误后,您需要清理Gradle项目。您可以通过转到顶部的“生成”菜单并选择“清理项目”来完成此操作。


9
投票

只需转到Android顶级菜单列表。单击Build菜单,在Build下单击Rebuild Project。

enter image description here


9
投票

当我手动重命名我的应用程序的域文件夹时,我遇到了这个问题。要解决这个问题,我必须这样做

  1. package中设置<manifest>的正确AndroidManifest.xml文件夹结构。
  2. android:name中为<activity>AndroidManifest.xml设置新的包裹位置。
  3. 清除缓存

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

一旦Android工作室重新启动并构建新索引,问题就会消失。


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


8
投票

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


224
投票

在Android Studio的最新版本中,至少对我来说,以下工作:

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

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

enter image description here


8
投票

我有一个特殊情况来解决这个问题。

在我的项目中,一切顺利,它可以成功编译和构建,但在我的Android Studio IDE(我也尝试过智能IDEA,它们处于相同的情况),R.java文件无法很好地解决并始终是掉在红线上。

就像这样:enter image description here

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

最后我发现这个棘手的问题是由我的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工作室,红色被解雇,我可以再次愉快地编程。


7
投票

构建>清洁项目

这对我有用。有几次同样的问题,这似乎是正确的。除非你改变了某些东西或称为变量R.这个问题通常不会发生,当它发生在我身上时,所以我想它只是Android工作室吓坏了。哈哈

有一个好的,祝你的项目好运。


7
投票

做:构建>清理项目

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

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


7
投票

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

我所做的是:

  • 检查SDK更新
  • 然后android工作室更新,
  • 然后重新打开项目
  • 打开androidmanifest.xml
  • 擦除android:标签中“_>”之间的空格并保存。

这对我行得通。


7
投票

我自己很难解决这个问题。

  • 确保layout.xml文件中没有错误。
  • 转到“构建”>“清理项目”

它对我有用,希望它也适合你。


6
投票

我遇到了同样的问题,而且大部分时间都是由它解决的

  • 使用gradle文件同步项目
  • 做构建 - >清理项目
  • 执行文件 - >使缓存无效

但是这次错误在做完所有这些事情之后仍然存在,最后我找到了罪魁祸首。

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

错误

android:id="username"

更正

android:id="@id/username"

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

注意

在大多数情况下,编译器会向您显示Message中的错误源。尝试在尝试其他解决方案之前先检查它


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.`

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 )esource文件无法正确索引您的资源,您必须承认。

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

它肯定会起作用,因为不会有任何变化。

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

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


145
投票

我使用的是gradle 3.3.0。这是罪魁祸首。从我的生命中浪费了6.50小时。 Gradle 3.2.1删除了错误。

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

更改gradle版本后问题已解决。详细历史可以找到here


4
投票

这对我来说是个头疼的问题。在我的情况下,在Android Studio(安装+ build.gradle配置)中配置“Google Play服务”后出现错误。这反过来要求minsdk> 7,但错误是非常不清楚的(实际上对此的抱怨只显示为“信息”)。无论如何..在清单文件和build.gradle文件中将minsdk更改为8并重建项目时,错误消失了。

所以..关于这一点的一般建议,如果我可以概括 - 你的清单文件或其他配置文件可能有一些问题,这阻止了正确的构建。尝试非常努力地查看错误报告,甚至是标题为“info”的消息,以获取有关它可能是什么的任何提示......


108
投票

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

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

检查我的sdk中的buildTools版本

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

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

但这一切都无济于事。

最后我找到了答案(这在我的案例中有效)

从build.gradle(模块:app)更改

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

要么

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


56
投票
  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文件和清理项目。


49
投票

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

所以你试试干净,但这不起作用。

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

但是尝试File - > Invalidate Caches / Restart ... - > Invalidate and Restart

Android Studio维护有关哪些文件依赖于哪些其他文件的信息。由于移动文件未正确实现,因此移动文件会导致错误。并非全部:这些依赖项的缓存用于尝试加速构建。

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


28
投票

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

gradlew clean

要么

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

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


25
投票

我想如果你把你的活动文件放到另一个文件夹而不是默认文件夹。您需要将com.example.yourproject.R(这是您的项目R文件而非Android.R文件)导入到使用R的所有活动。例如,在MainActivity文件中插入以下行:

import com.example.yourproject.R;


15
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.