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

ut_est 发布于 2019-03-23 android 最后更新 2019-03-23 10:45 172 浏览

在我试图在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 任何想法如何解决这个问题?
已邀请:

xatque

赞同来自:

只需在build.gradle中添加以下句子:

compile 'com.android.support:design:23.1.1'

equia

赞同来自:

我偶尔会被这个问题所困扰,还有另外一件事要做:将你的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,我将总结:

  1. Android Studio IDE,选择文件|项目结构。
  2. 选择您的模块,例如“app”
  3. 在“编译SDK”字段中,选择最新版本
  4. 同时选择Build Tools
  5. 中的最新版本
确认,项目应自动正确同步。 我从中得到的教训是,它们应该是相同的。

est_ut

赞同来自:

当我在drawable文件夹中添加一些图像文件时,我遇到了同样的问题,其中文件名是'Uppercase'。我将它们重命名为普通格式名称并按下重建项目。它对我有用。

et_id

赞同来自:

  1. 重建项目。
  2. 如果(1)不起作用,请重新启动Android Studio / Eclipse。
如果两者都不起作用,请检查所有xml文件。当您的xml文件不正确时,会发生此错误。

hiure

赞同来自:

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

  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. 点击“+添加内容根”,然后选择上述文件夹。确保它标记为蓝色(作为来源)。
在我这样做之后,突然所有的警告都消失了。问题是,如果您与其他人协作,每台计算机上的文件夹名称都不同,因此在同步时要小心。

yet

赞同来自:

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

dodit

赞同来自:

  1. 选择“文件”>“项目结构”菜单选项。
  2. 按消息框上的“确定”(项目结构更改不会更新build.gradle)。
  3. 在“项目设置”侧窗格中选择“模块”。
  4. 对于每个模块(项目),检查“Excluded Folders”部分是否包含“build”文件夹。如果是,请按“构建”文件夹旁边的“x”按钮。
  5. 按OK
您现在应该看到“MyAppProject / MyApp / build / source”文件夹。这应该包含“r”文件夹(生成R.java文件的位置)。在这里,你应该看到蓝色的“debug”,“release”(如果你的build.gradle中有一个projectFlavour,它们将在“”文件夹下)。在该调试/发布文件夹中应该是您的应用程序包名称,然后是包含所有资源ID的R.java文件。

ket

赞同来自:

有时,这些构建错误将无处不在。如果您遇到这种情况,请尝试以下方法: 重新检查资源文件中XML的有效性 如果没有为上一次构建生成R.java文件,则无论引用资源的位置,都会在项目中看到错误。这可能是由一个XML文件中的拼写错误引起的。布局XML并不总是经过验证,因此这些文件中的拼写错误可能无法引起您的注意。查找拼写错误并保存文件应该会导致R.java重新生成。 清理你的项目!选择Build→Clean Project。这将从头开始重建项目,这可能会导致无错误的构建。 将您的项目与Gradle同步!!!选择工具→Android→使用Gradle文件同步项目。 Android Studio将使用正确的项目设置从头开始重建项目,这有助于在更改Gradle配置后解决问题。 运行Android Lint !!! Lint可能会为您提供有关问题的良好信息。如果上述方法不起作用,那么您很可能会发现问题所在。要运行Lint,请选择Analyze→Inspect Code ...然后选择Whole project并单击OK。 仔细分析Lint建议;从错误开始,然后是警告。 祝你好运。

cnisi

赞同来自:

您需要导入项目R文件

import <YOUR-PROJECT-PACKGENAME>.R;

taut

赞同来自:

问题是R是构建项目时生成的pojo文件,它包含对res目录中资源的引用,如字符串,可绘制(图标或图像)xml布局等。您可能会发现读取R很有意思。 java文件虽然你可能要退出android studio这样做。您可能会发现忽略此类错误会很有帮助,因为在编译和构建时它会消失。 不要做的是导入R文件

mnatus

赞同来自:

每次对我有用的一件事是: 转到项目的 - > build.gradle(Module:app)文件 - >做一点改动(例如:在某处放一个空格并将其删除) - >然后android studio会要求你同步你的gradle文件 - >在文件的右上角 - >选择“立即同步”。 同步完成后,它将解决大多数情况下的问题。

eea

赞同来自:

重命名包名称时会发生此问题。重命名包名称后,必须将旧包名称更改为较新的包名称。 对我来说,一旦我改变了它就解决了这个问题。 之后,您可能会在xml文件中出现错误,您还必须在那里更改包名称。而已。

cut

赞同来自:

了解android studio非常重要 有两种类型的导入

  1. java import type
  2. android studio innere import type
我们的问题与android导入类型为导入android.R 它的工作好吗?但你没有导入android.R? android studio添加此自动但具有不同的语法 解决我们的问题
  • 首先,您需要制作一个新项目“空白”
  • 然后将第一个项目中的所有文件复制到除java文件之外的新项目
  • 然后你需要创建一个同名的新java类
并轻松复制Activity java类的所有内容
"Don't copy modules and package only copy the content of class" and don't forget to add extends .... to your class
你会看到消息要求你导入一些模块 你必须取消选择android.R并按OK 它会正常工作
" If you find android.R only at the dialog box you must click cancel"
//见下一张图片 Select Class To Import 如果你不确切知道哪个java类文件可以解决这个问题 使用项目中的所有java文件执行此解决方案 //祝你好运 @ ABT

amagni

赞同来自:

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

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="wrong.package.name">
主活动名称具有正确的路径,因此清单没有任何已检查的错误。 解决此问题后,虽然构建成功,但源文件仍显示错误。我刚刚运行应用程序,然后清除了源错误指示器。

nfugit

赞同来自:

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

adolor

赞同来自:

删除您刚刚定义的资源(后台等)的视图,并同步Gradle文件。如果这不起作用,请删除最近处理的活动,然后同步Gradle文件。

tvel

赞同来自:

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

  1. 在Android工作室的基础上构建
  2. 选择清洁项目选项
这背后的原因是,通过清除您以前的.apk文件,系统上的android studio项目文件夹中的文件将被删除。

hrerum

赞同来自:

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

oiusto

赞同来自:

从示例创建项目时,虽然没有导入现有项目是好的(防止与gradle,.idea,.iml,build,jars和apks的冲突,即所有不必要的构建生成的文件),在创建新项目后,复制并粘贴所有相关资源,我建议: 从项目中的包中检查包和导入{AndroidManifest声明和java类中的所有导入},所有资源(可绘制,mip-map,布局和菜单以及你的build.gradle(与最新一起使用的build.gradle示例)可以根据要求提供sdk))看看他们是否在那里&如果声明的字符串和id实际存在并且已经被使用,那么你唯一的错误应该是问的问题: Bulid->清洁项目 工具 - > Android->使用Gradle文件同步项目 文件 - >使缓存无效并重新启动 在最坏的情况下,重启机器会有所帮助。 以上应该有效。如有必要,请随意提问,即发表评论。

xatque

赞同来自:

我发现这个问题是因为我的XML文件中有错误引起的。修复XML错误后,执行clean / build,修复了问题。

yvero

赞同来自:

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

Build -> Clean Project

godio

赞同来自:

你必须改变路径:例如 import it.example.project.myproject.R; 在某一方面的变化 import it.example.project.R;

pnon

赞同来自:

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

oqui

赞同来自:

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

nin

赞同来自:

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

datque

赞同来自:

只需转到Android顶级菜单列表即可。单击Build菜单,在Build下单击Rebuild Project。 enter image description here

bipsam

赞同来自:

  • Android studio-> Build - > Make Project或Make Module'xxx'解决问题。
  • 是的,运行app无法解决问题......
  • 是的,干净无法解决问题......
  • 是,文件 - >无效缓存无法解决问题......
  • 顺便问一下,我应该使用是吗?或者可能是不对的英文?

dquia

赞同来自:

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

aut_id

赞同来自:

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

lipsum

赞同来自:

解决方案很简单: 转到File > Project Structure > app并选择Flavours标签,在Min Sdk Version的下拉列表中选择API 21: Android 5.0 (Lollipop)

uet

赞同来自:

问题:Android Studio将R标记为红色,并显示错误消息“无法解析符号R” 解决方案:我通过将以下内容添加到导入和放大器来解决“R”错误。然后重建项目,错误就消失了。 import com.mkyong.android.R; 说明:有时,即使您多次构建或运行“optimize import”命令,Android Studio也不会添加导入。有时,当您“重新启动Android Studio”时,错误会得到解决,但有时甚至在多次重启Android Studio后错误仍然存​​在。 谢谢。

nquis

赞同来自:

解决此问题的更好方法是重新启动Android Studio。 如果您不想重新启动,请单击Build -> Clean Project

tfugit

赞同来自:

当我在Android工作室初学时,这是我面临的一般性问题。 通常,当十六进制代码转换期间的R.java文件正确地识别出适当的幻数时,会出现问题。 所以我们应该记住所有的XML文件都是正确的。这通常是由于XML文件中的问题而引起的。 进入每个XML文件,确保所有文件都为真有效。 然后转到文件并同步项目。我的错误删除了很多次这样的步骤。

lmagni

赞同来自:

发生此错误是因为我的activity_main.xml文件中存在无效输入。 当您尝试构建或清理项目时,您将看到错误消息。 我通过阅读这些错误消息解决了我的问题,纠正了我的xml文件中的错误。然后重建项目。

wnihil

赞同来自:

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

kquam

赞同来自:

我通过以下方式解决了

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.

qporro

赞同来自:

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

TLDR 问题原来是Build Tools版本。我的设置为23.0.0 rc1,因此我将其更改为22.0.1。我想这是因为我正在使用Android的最新版本。 要更改此值,您可以在左侧窗口中打开项目浏览器>右键单击“应用程序>打开模块设置”,然后在“属性选项卡”中查找它

lmagni

赞同来自:

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

umodi

赞同来自:

请确保您的AndroidManifest.xml包名称正确无误。当我的R.whatever标记为红色时,这解决了我的问题! 我还建议您检查所有gradle文件,以确保这些包名称正确无误。这不应该使所有内容都变红,但它会阻止您的gradle文件正常同步。

ket

赞同来自:

这对我有用:

  1. 关闭并重新打开项目
  2. 按“与Gradle文件同步项目”(位于顶层菜单中的AVD管理器图标旁边) 如果Gradle第一次无法同步,请重复1-2。 (我的第二次工作)。
使用Android Studio 1.2.2

amagni

赞同来自:

我也有这个问题。我从项目的drawable文件夹中删除了额外的图像。

hquae

赞同来自:

出于某些原因,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>

project 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;来自你所展示的,一切似乎都很好。奇怪的是没有创建构建/源代码。例如,我没有build / apk。可能是你处于发布模式,它不会创建这些目录。

gvel

赞同来自:

这发生在我身上, 我发现它是由一些无效的缓存文件引起的。 所以我通过添加禁用缓存

android.enableBuildCache=false
gradle属性。