Android Studio将R标记为红色,并显示错误消息“无法解析符号R”,但构建成功


150

在我尝试在Android Studio中创建的每个项目中,R的所有用法都标记为红色,并带有错误消息“无法解析符号R”,但是编译成功并且应用程序运行。这真的很烦人,因为它会阻止自动完成,并在我的代码中显示巨大的红色波浪线。

我正在运行Android Studio 1.7.0,并使用默认设置创建项目。附有屏幕截图:

Android Studio屏幕截图

这是我的build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

dependencies {
    compile files('libs/android-support-v4.jar')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 16
    }
}

这是项目结构的样子:

在此处输入图片说明

任何想法如何解决这个问题?


我的某些项目中曾发生过这种情况。为了解决这个问题,我“清理”,“重建”,关闭项目并重新打开。然后选择工具-> Android->与Gradle文件同步项目。还尝试了以下方法...关闭项目,然后将文件夹物理移动到新目录或重命名当前目录。现在,导入项目,就好像它是新的一样。有几种方法可以执行此操作,从初始的Android屏幕上,选择导入,然后在找到目录时,不要从项目名称或主目录中导入,而是在“应用程序”中导入一个级别。
Snappy Cracker'5

读者,在尝试任何其他可能比较复杂的事情之前,请尝试重新启动android studio。
eRaisedToX

Answers:


111

只需在Android Studio中单击“ 生成” ->“ 重建项目”选项。


我有一个.Jpg图片,但没有正确转换就更改为.png。删除该文件解决了问题。虽然很奇怪..
DeathRs

我真的很想这样做,但Android Studio的构建臭名昭著。如果这样做,我的作业将花费30多分钟。
霓虹灯Warge

完美的解决方案!
阿卡什·比萨里亚

不得不这样做两次
Janac Meena

有时是因为您的XML文件错误。<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">检查xml文件中的这些行并进行更正。
meyasir

63

我发现此问题是由于我的XML文件中有错误而引起的。修复XML错误后,请执行清理/构建操作,从而解决了该问题。


8
只是帮助正在阅读的人。XML文件中的某些内容可能导致了错误。对我来说,(不知道为什么),但这是由片段布局行引起的:android:layout_bottom =“ @ id / my_list”只需从这一行从一个片段切换为在另一个片段上使用layout_top。
明升2015年

对我来说也是一样!感谢您的帮助
Michael

同样在这里!谢谢。
泰迪·威尔逊

好答案!感谢
BeratEyüboğlu17/09/

是的,在我的情况下:我的xml元素高度为“ 50”,而不是“ 50dp”。
克里希纳·拉吉·萨利姆

44

单击Build -> Rebuild Project,然后单击确定Tools -> Android -> Sync Project with Gradle Files


2
这可行。升级gradle版本后,我遇到了错误。
Vaquita

我的情况是:每个人cleanR变成错误,每个人都build纠正了错误,但是当然“清除了”项目。遵循此答案后,我最终可以清理项目而不会出错。
塔尔兹

只需添加到@ user2284700的答案即可:在AS 3.1.3中,“用Gradle文件同步项目”位于“文件”菜单下
BMU

33

确保在您的 AndroidManifest.xml的包裹名称正确。这为我解决了问题R.whatever被标记为红色!

我还建议您检查所有gradle文件,以确保这些软件包名称正确。那不应该使所有内容变成红色,但是它将阻止您的gradle文件正确同步。


谢谢!我正在做一个小实验,使用软件包重命名来忘了它……
tom

17

没事。只需更新 Android Studio。解决我的问题!完美地工作。


1
我尝试了这里提到的所有解决方案。更新的Android工作室解决了该问题
湿婆ķ雷迪Ç湿婆

1
感谢您为我节省了更多的时间
wmurmann

12

我在'com.android.tools.build:gradle:3.3.1'中遇到了类似的问题,我尝试了上述所有解决方案,但均无济于事。它实际上是build:gradle 3.3.1问题。我将其更改为3.2.1,然后它起作用了。

因此,build:gradle版本可能会出现问题。


03.2019这有所帮助。有趣的是,这仅发生在我的一个项目上,而其他两个项目则没有。现在,我希望Android Studio更新不会使其他事情变得混乱……
Martin Berger

9
  1. 选择文件>项目结构菜单选项。
  2. 在消息框上按“确定”(项目结构更改不会更新build.gradle)。
  3. 在“项目设置”侧窗格中选择“模块”。
  4. 对于每个模块(项目),请检查“排除的文件夹”部分是否不包含“内部版本”文件夹。如果是这样,请按“构建”文件夹旁边的“ x”按钮。
  5. 按确定

现在,您应该看到“ MyAppProject / MyApp / build / source”文件夹。它应该包含“ r”文件夹(在其中生成R.java文件)。在这里,您应该看到蓝色的“ debug”,“ release”(如果您的build.gradle中包含projectFlavour,则它们将位于“”文件夹下)。在该debug / release文件夹中,应该是您应用的程序包名称,然后是一个包含所有资源ID的R.java文件。


1
这不再重要,但是请注意,在我对Loïc的答复中可以看到,该文件夹中没有R.java文件。
伊利亚·科根

9
  1. 重建项目。
  2. 如果(1)不起作用,请重新启动Android Studio / Eclipse。

如果两者都不起作用,请检查所有xml文件。当您的xml文件不正确时,会发生此错误。


在我的情况下,manifest.xml文件中存在一个导致问题的属性。我睡不着觉的夜晚,直到发现并删除了该行。该属性为android:fullBackupContent =“”
Kingsley Ijike,

6

由于某些原因,Android Studio对编辑器和编译器使用不同的配置。如果它适用于编译器,那就很好了。如果对编辑器不起作用。(它看到未解析的文件)。

您需要向项目源中添加一些目录。例如,所有资源都应标记为“源”。

文件->项目结构

选择“模块”,然后选择您的项目。然后选择sources标签。在右侧找到您的资源目录,然后单击蓝色的“源”按钮。关闭所有,它应该工作。

另外,您必须确保

build/source/r/debug也是一个来源。在我所有的build/source/*/debug标记为来源。

主模块.iml

<?xml version="1.0" encoding="UTF-8"?>
<module external.system.id="GRADLE" type="JAVA_MODULE" version="4">
  <component name="FacetManager">
    <facet type="android" name="Android">
      <configuration>
        <option name="SELECTED_BUILD_VARIANT" value="debug" />
        <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
        <option name="ALLOW_USER_CONFIGURATION" value="false" />
        <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
        <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
      </configuration>
    </facet>
    <facet type="android-gradle" name="Android-Gradle">
      <configuration>
        <option name="GRADLE_PROJECT_PATH" value=":SherlockHolmes" />
      </configuration>
    </facet>
  </component>
  <component name="NewModuleRootManager" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/build/source/r/debug" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/build/source/aidl/debug" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/build/source/rs/debug" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/build/source/buildConfig/debug" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/build/res/rs/debug" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/build/source/r/test" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/build/source/aidl/test" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/build/source/rs/test" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/build/source/buildConfig/test" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/build/res/rs/test" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/debug/res" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/assets" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/res" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/aidl" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/assets" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/java" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/jni" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/rs" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/res" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/resources" isTestSource="true" />
      <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/exploded-bundles" />
      <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/symbols" />
      <excludeFolder url="file://$MODULE_DIR$/build/tmp" />
    </content>
    <orderEntry type="jdk" jdkName="Android 4.2.2" jdkType="Android SDK" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="library" name="Sherlock.aar" level="project" />
    <orderEntry type="library" name="SlidingMenu.aar" level="project" />
    <orderEntry type="library" name="support-v4-13.0.0" level="project" />
  </component>
</module>

项目IML

<?xml version="1.0" encoding="UTF-8"?>
<module external.system.id="GRADLE" type="JAVA_MODULE" version="4">
  <component name="FacetManager">
    <facet type="android-gradle" name="Android-Gradle">
      <configuration>
        <option name="GRADLE_PROJECT_PATH" value=":" />
      </configuration>
    </facet>
  </component>
  <component name="NewModuleRootManager" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$">
      <excludeFolder url="file://$MODULE_DIR$/.gradle" />
      <excludeFolder url="file://$MODULE_DIR$/build" />
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
  </component>
</module>

黑魔法

对此不确定,但我听说它可以正常工作,但我确定它不会更改任何内容。注释所有需要的行后,尝试编译并保存项目R。然后,当一切都不是红色时。尝试重新添加它们。奇怪的是您的构建/源代码没有生成。

另外这个问题建议检查“编译器使用外部版本”

Android Studio不会为我的导入项目生成R.java

边注

还要确保在您的Java代码中没有。import android.r;从您显示的内容来看,一切似乎都很好。奇怪的是未创建构建/源。例如,我没有构建/ apk。可能是您处于发布模式,并且没有创建这些目录。


嗨Loïc,我在问题中添加了项目结构的屏幕截图。如您所见,整个res文件夹被标记为“源”,并且我没有build/source目录。我应该创建它吗?如果是这样,怎么办?
伊利亚·科根

据我所知,构建时应该创建build / source目录。Android Studio是“ alpha”版本。它带有很多奇怪的东西。我有1.7.0_21。一个想法是做一个build/rebuil project。如果可以从命令行运行gradle,则可能会引发一些未在编辑器中显示的错误。
卢瓦克福雷-Lacroix的

尽管该项目可以在设备上编译并成功运行,但它不会被创建。
Ilya Kogan

iml文件看起来与您的文件非常相似,但包含和排除了相同的文件夹。即使不存在“ file:// $ MODULE_DIR $ / build / source / r / debug”。使用外部版本会导致其他问题(该项目根本无法编译)。如何检查我是否处于发布模式?
伊利亚·科根

5

在找到更好的解决方案之前,这是我的临时解决方案:

  1. 使用“一切”,找到R.java的创建位置。就我而言 C:\Program Files (x86)\Android\android-studio\system\compiler\<project-name>.cb969c52\.generated\aapt\<module-name>.6badd9a4\production\com\<project-name>\<module-name>

  2. 在项目视图中,单击模块,然后按F4。忽略警告。

  3. 单击“ +添加内容根”,然后选择上述文件夹。确保将其标记为蓝色(作为来源)。

我这样做之后,所有警告突然消失了。问题是,如果您与其他人协作,则每台计算机上的文件夹名称都不相同,因此在同步时要小心。


您是否尝试过使用最新的0.2.3版本的Android Studio?如果您仍然遇到问题,请将此问题报告给code.google.com/p/android/issues,以便Android Studio开发者可以识别并可以解决问题。
reece

1
不,我放弃了Android Studio。我喜欢IDE,但仍然有很多错误,不适合团队合作。我们回到了Eclipse。
伊利亚·科根

2
没问题。由于Android Studio仍在开发中,因此您需要能够报告发现的所有错误(以便可以修复)并容忍其粗糙的边缘。这并不适合所有人。
reece 2013年

5

这对我有用:

  1. 关闭并重新打开项目

  2. 如果Gradle第一次无法同步,请按“与Gradle文件同步项目”(位于顶部菜单中的AVD管理器图标旁边)重复1-2。(我的工作第二次)。

使用Android Studio 1.2.2


5

我通过以下方式解决了它:

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.

有一天没有明显的原因我的应用程序崩溃了……到处都是错误……非常感谢!这非常有帮助!
JFreeman

1
保佑您,无效的缓存是唯一
Kibi

4

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

在此处输入图片说明


4

有时,这些构建错误会无处不在。如果您遇到这种情况,请尝试以下操作:

重新检查资源文件中XML的有效性:如果未为上次构建生成R.java文件,则无论在何处引用资源,都会在项目中看到错误。这可能是由您的一个XML文件中的错字引起的。布局XML并非总是经过验证,因此这些文件中的拼写错误可能不会引起您的注意。查找拼写错误并保存文件将导致R.java重新生成。

清理您的项目! Select Build → Clean Project这将从头开始重建项目,这可能会导致无错构建。

与Gradle同步您的项目! Select Tools → Android → Sync Project with Gradle FilesAndroid Studio将使用正确的项目设置从头开始重建项目,这可以帮助您在更改Gradle配置后解决问题。

运行Android Lint! 皮棉可能会为您提供有关问题的良好信息。如果上述方法不起作用,则很可能会在这里找到问题。要运行Lint,select Analyze → Inspect Code → select Whole project → OK 请仔细分析Lint建议;从错误开始,然后是警告。

祝好运。


在我的情况下,manifest.xml文件中存在一个导致问题的属性。我睡不着觉的夜晚,直到发现并删除了该行。该属性为android:fullBackupContent =“”
Kingsley Ijike

3

我发生此错误是因为我的activity_main.xml文件中输入无效。

当您尝试构建或清理您的项目时,您将看到错误消息

我通过阅读这些错误消息解决了我的问题,更正了我的xml文件中的错误。然后重建项目



2

从样本创建项目时,虽然不导入现有项目是好的(防止gradle,.idea,.iml,build,jar和apk冲突,即所有不必要的生成生成的文件),但是在创建新项目后,复制并粘贴所有相关资源,我建议:

检查项目{AndroidManifest声明和Java类中的所有导入}中的软件包和从软件包中的导入,所有资源(可绘制,mip-map,布局和菜单以及您的build.gradle(与最新sdk一起使用的build.gradle示例)可以根据要求提供)),以查看它们是否存在以及声明的字符串和ID是否确实存在并已被使用,此后您唯一的错误应该是所提出的问题:

Bulid->清理项目

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

File->使缓存无效并重新启动

在最坏的情况下,重新启动计算机会有所帮助。

以上应该可以。如有必要,随时提问,即发表评论。


2

这主要是由于xml文件中的错误引起的,请检查您最新的xml更改并重建它,与我一样。


有所帮助,谢谢!
farahm

2

我在清单的软件包声明中有复制/粘贴重用错误

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="wrong.package.name">

主要活动名称具有正确的路径,因此清单没有任何检查过的错误。

解决此问题后,尽管构建成功,但源文件仍显示错误。我刚运行应用程序,然后清除了源错误指示符。


对我来说,manifest.xml文件中存在一个导致问题的属性。我只是删除了这一行。该属性为android:fullBackupContent =“”
Kingsley Ijike,

1

通过手动清理文件夹.idea / libraries并随后单击“使用Gradle文件同步项目”,它也对我有用。显然,此Sync不会删除元素,而是保留旧元素并添加当前元素。可能是要报告的错误:)


1

android studio遇到了同样的问题,我发现build / generated / source / r仅包含release文件夹,而不包含debug。因此出于某种原因,调试版本未生成可用的R类。

我通过打开项目iml文件解决了该问题,并修复了这一行

<option name="RES_FOLDERS_RELATIVE_PATH" value="" />

<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />

与gradle重新同步,使用R注释掉行,运行debug生成R,使用R运行未注释的行,然后再次运行调试,已修复。


我在哪里可以找到iml文件?
卡布奇诺2015年

在您的build.gradle是......最有可能同一个文件夹
卢卡斯Hanacek

1

解决方案很简单:

转到File > Project Structure > app并选择Flavours选项卡,API 21: Android 5.0 (Lollipop)在下拉列表中选择Min Sdk Version


谢谢,这有效!我已将minSdkVersion值设置为一个低得多的值,然后还原为我解决了该问题。
阿文德玛尼

1

就我而言,我遵循了在Stackoverflow上可以找到的所有答案,但似乎没有一个可以解决此问题。所有的答案都将指出xml文件可能损坏或与Gradle名称冲突。一些答案声称,有必要清理项目或将项目与Gradle同步。这些解决方案都不能解决问题。另外,一旦我遵循了有关如何构建Hello World应用程序的教程,并且我只是遵循了Android Studio向导窗口而没有任何编码,那么就怀疑这是一个错字是没有任何意义的。

TLDR

问题原来是构建工具版本。我的设置为23.0.0 rc1,所以我将其更改为22.0.1。我想这是因为我正在使用最新的可用Android版本。

要更改此值,您可以在左侧窗口中打开项目浏览器>右键单击“应用程序>打开模块设置”,然后在“属性标签”上查找


1

您需要导入您的项目R文件

import <YOUR-PROJECT-PACKGENAME>.R;

1

清洁项目对我来说很有帮助

Build -> Clean Project

1

如果出现此错误,请清理项目。

  1. 转到在您的Android Studio之上构建
  2. 选择选项清洁项目

其背后的原因是,通过清除.apk系统上android studio项目文件夹中存在的先前文件,该文件将被删除。


1

最近,我将项目导入Android Studio,R 的一部分以红色标记为错误消息“无法解析符号R”,但编译成功并运行了应用程序。

发展环境:

  • IDE:Android Studio 3.1.2
  • 系统:Mac OS

解:

第1步:

查找Android Studio的配置文件
我的路径:

/Applications/Android Studio.app/Contents/bin/idea.properties

第2步:

更改2500:

idea.max.intellisense.filesize=2500  

到5000或更多:

idea.max.intellisense.filesize=5000  

您是怎么想的?这是什么意思?
Nikos Hidalgo,

1
#最大文件大小(千字节)IDE应为其提供代码帮助。#如果启用了代码帮助,则文件越大,其编辑器的工作就越慢,并且对系统的总体内存要求也更高。如果需要任何可用文件的大小代码帮助,请删除此属性或将其设置为非常大的数目。idea.max.intellisense.filesize = 2500
张瑜

1

您必须更改路径:

例如

import it.example.project.myproject.R;

在某一方面的变化

import it.example.project.R;


0

我遇到了同样的错误,结果是清单文件中有一些错误。修复后,再次单击“创建项目”,效果很好。Android Studio有时不会给出非常有用的错误消息。


0

我时不时地被这个问题咬住,还有另一件事可以尝试:将您的compileSdk和buildSdk版本与最新版本匹配。

我将compileSdkVersion从21更改为19,因为Android Studio(1.1 Canary通道)调试器无法正确跟踪到预构建的库中。我发现它似乎是根据buildToolsVersion(19.1.0)进行跟踪的,我通过单击堆栈跟踪中的错误(然后选择19而不是21)进行了验证。尽管我直接在build.gradle文件中对其进行了更改,但这里有一个图形化的演练:https ://www.blogger.com/comment.g?blogID=4722727826918942842&postID=3875998513888772255,我将总结一下:

  1. 在Android Studio IDE中,选择文件| 项目结构。
  2. 选择您的模块,例如“ app”
  3. 在“编译SDK”字段中,选择最新版本
  4. 同时在Build Tools中选择最新版本

确认,项目将自动正确同步。

我从中得到的教训是它们应该相同。

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.