首页 文章

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

提问于
浏览
119

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

我正在运行Android Studio 1.7.0并使用默认设置创建项目 . 附上截图:

Android Studio Screenshot

这是我的 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
    }
}

这就是项目结构的样子:

enter image description here

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

30 回答

  • 1

    解决方案很简单:

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

  • 2

    您需要导入项目R文件

    import <YOUR-PROJECT-PACKGENAME>.R;
    
  • 0

    在我的案例中,清理项目有所帮助

    Build -> Clean Project
    
  • 3

    如果您收到此错误,请清除您的项目 .

    • 去构建Android工作室的顶部

    • 选择清洁项目选项

    这背后的原因是通过清除您之前的系统上的android studio项目文件夹中存在的 .apk 文件被删除 .

  • 6

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

  • 0

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

  • 54

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

  • 2

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

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

  • 5

    与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生成未注释的行并再次运行调试,修复 .

  • 2
    • 选择“文件”>“项目结构”菜单选项 .

    • 在消息框上按“确定”(项目结构更改不更新build.gradle) .

    • 在"Project Settings"侧窗格中选择"Modules" .

    • 对于每个模块(项目),检查"Excluded Folders"部分是否包含"build"文件夹 . 如果是,请按"build"文件夹旁边的'x'按钮 .

    • 按OK

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

  • 0

    出于某些原因,Android studio对编辑器和编译器使用不同的配置 . 如果它适用于编译器,那么它很好 . 如果它对编辑器不起作用 . (它看到未解决的文件) .

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

    文件 - >项目结构

    选择"Modules",然后选择您的项目 . 并选择 sources 选项卡 . 在右侧找到您的资源目录,然后单击蓝色"source"按钮 . 关闭所有它应该工作 .

    此外,你必须确保这一点

    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 don't generate R.java for my import project

    旁注

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

  • 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>

    • 在项目视图中,单击模块并按F4 . 忽略警告 .

    • 单击“添加内容根”并选择上述文件夹 . 确保它标记为蓝色(作为来源) .

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

  • 30
    • 重建项目 .

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

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

  • 1

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

    enter image description here

  • 5

    有时,这些构建错误将无处不在 . 如果您遇到这种情况,请尝试以下方法:

    Recheck the validity of the XML in your resource files: 如果没有生成您的R.java文件在最后一次构建中,无论您在何处引用资源,都会在项目中看到错误 . 这可能是由一个XML文件中的拼写错误引起的 . 布局XML并不总是经过验证,因此这些文件中的拼写错误可能无法引起您的注意 . 查找拼写错误并保存文件应该会导致R.java重新生成 .

    Clean your project! Select Build → Clean Project 这将从头开始重建项目,这可能会导致无错误的构建 .

    Sync your project with Gradle! Select Tools → Android → Sync Project with Gradle Files Android Studio将使用正确的项目设置从头开始重建项目,这有助于在更改Gradle配置后解决问题 .

    Run Android Lint! Lint可能会为您提供有关问题的良好信息 . 如果上述方法不起作用,那么您很可能会发现问题所在 . 要运行Lint, select Analyze → Inspect Code → select Whole project → OK 仔细分析Lint建议;从错误开始,然后是警告 .

    祝好运 .

  • 8

    这对我有用:

    • 关闭并重新打开项目

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

    使用Android Studio 1.2.2

  • 1

    这个错误发生在我身上,因为有一个 invalid input in my activity_main.xml file.

    当你尝试 build or clean your project 时,你会看到 error messages .

    我通过 reading those error messagescorrect what is wrong in my xml file. 然后 rebuild project 解决了我的问题 .

  • 1

    我通过以下方式解决了

    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.
    
  • 0

    几天前我遇到了这个bug,我试着四处寻找,直到我决定重新安装Android Studio . 它对我有用 .

  • 0

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

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

    Bulid->清洁项目

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

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

    在最坏的情况下,重启机器会有所帮助 .

    以上应该有效 . 如有必要,请随意提问,即发表评论 .

  • 0

    这主要是因为xml文件中的错误,检查你最新的xml更改并重建它,同样的问题 .

  • 101

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

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

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

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

  • 42

    通过手动清理文件夹.idea / libraries并在“使用Gradle文件同步项目”后点击它解决了这个问题 . 显然,此同步不会删除元素,但保留旧元素并添加当前元素 . 可能是报告的错误:)

  • 3

    最近我将我的项目导入Android studio, a part of R标记为红色,错误为meesage "cannot resolve symbol R",但编译成功,应用程序运行 .

    发展经验:

    • IDE:Android工作室3.1.2

    • 系统:Mac Os

    解决方案:

    step1:

    找到Android studio的配置文件
    我自己的路:

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

    step2:

    改变2500:

    idea.max.intellisense.filesize=2500
    

    到5000或更多:

    idea.max.intellisense.filesize=5000
    
  • 4

    我遇到了同样的错误,结果证明清单文件有一些错误 . 修复后,再次单击Make Project,它工作正常 . Android工作室有时不提供非常有用的错误消息 .

  • 2

    我不时会被这个问题所困扰,还有另外一件事要做:将您的compileSdk和buildSdk版本与最新版本相匹配 .

    我已经将我的compileSdkVersion从21更改回19,因为Android Studio(1.1 canary channel)调试器未正确跟踪到预构建的库 . 我发现它似乎是基于buildToolsVersion(19.1.0)的跟踪,我通过单击堆栈跟踪中的错误(然后选择19而不是21)来验证 . 虽然我直接在build.gradle文件中更改了它,但是这里有一个图形演练:https://www.blogger.com/comment.g?blogID=4722727826918942842&postID=3875998513888772255并且我将总结:

    • Android Studio IDE,选择文件|项目结构 .

    • 选择您的模块,例如"app"

    • 在“编译SDK”字段中,选择最新版本

    • 还要在Build Tools中选择最新版本

    确认,项目应自动正确同步 .

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

  • 1

    对我来说,在将我的一个原始资源的名称从 extra 更改为 extra.jet 后,我遇到了这个问题,然后所有的 R 变为红色并且无法构建 . 我尝试了所有上述解决方案并没有任何效果,然后我尝试用原始名称 extra 制作它的另一个副本并从android studio中删除它然后 R s返回到正常并且构建成功 .

  • 4

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

    TLDR

    问题原来是Build Tools版本 . 我被设置为 23.0.0 rc1 ,所以我将其更改为 22.0.1 . 我想这是因为我正在使用Android的最新版本 .

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

  • 3

    我在使用培训网站的练习文件时遇到了同样的问题,并尝试通过卸载android studio并删除所有相关目录并重新安装来解决问题,但这并没有产生任何结果 . 但是,我注意到我正在查看的教程将其练习文件存储在DESKTOP上,而我的DOWNLOADS目录中的文件夹中,所以我只是将所有练习文件复制到我的桌面;这使得我的练习文件夹结构与教程创建者的结构相同,这就是诀窍 .

  • 1

    在大多数情况下,您的资源存在一些问题,即布局,样式等 . 因此,请尝试在资源中查找并修复问题,然后清理项目 .

相关问题