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

Ily*_*gan 150 android gradle android-studio

在我尝试在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
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是项目结构的样子:

在此输入图像描述

知道如何解决这个问题吗?

pat*_*ran 108

只需单击Android Studio中的Build - > Rebuild Project选项即可.


Bla*_*rai 62

我发现这个问题是因为我的XML文件出错了.修复XML错误后,执行clean/build,修复了问题.

  • 只是帮助谁阅读.XML文件中可能存在导致错误的内容.对我来说,(不知道为什么)但它是由片段布局线引起的:android:layout_bottom ="@ id/my_list"只需从一个片段切换到另一个片段的layout_top. (8认同)

小智 44

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

  • 这有效.我在升级gradle版本后遇到了错误. (2认同)

cra*_*ned 31

确保AndroidManifest.xml包装名称正确无误.当我R.whatever被标记为红色时,这解决了我的问题!

我还建议检查所有gradle文件以确保这些包名称正确无误.这不应该使一切都变红,但它会阻止你的gradle文件正确同步.


Ted*_*dVN 16

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


小智 12

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

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


ree*_*ece 9

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

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


Lal*_*wah 8

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

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


Loï*_*oix 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>
Run Code Online (Sandbox Code Playgroud)

项目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>
Run Code Online (Sandbox Code Playgroud)

黑魔法

不确定这个,但我听说它工作,而我很确定它不应该改变任何东西.在评论所有需要的行后,尝试编译并保存项目R.然后当一切都不是红色.尝试添加它们.奇怪的是,你的构建/源代码没有生成.

此问题还建议检查"编译器使用外部构建"

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

边注

还要确保在你的java代码中没有.import android.r;从你所展示的,一切似乎都很好.奇怪的是没有创建构建/源.例如,我没有build/apk.可能是你处于发布模式,它不会创建这些目录.


Ily*_*gan 5

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

  1. 使用Everything,找到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. 单击"+添加内容根"并选择上述文件夹.确保它标记为蓝色(作为来源).

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

  • 没问题.由于Android Studio仍在开发中,因此您需要能够报告您找到的任何错误(因此可以修复它们)并容忍其粗糙的边缘.这不适合所有人. (2认同)

bas*_*i82 5

这为我工作:

  1. 关闭并重新打开项目

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

使用Android Studio 1.2.2


Bap*_*nde 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.
Run Code Online (Sandbox Code Playgroud)