【问题标题】:"cannot resolve symbol R" in Android StudioAndroid Studio 中的“无法解析符号 R”
【发布时间】:2013-06-07 21:16:48
【问题描述】:

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

【问题讨论】:

  • 过去我遇到过 xml 错误,例如:progressbar cannot be cast to android.widget.textview,我通过更改 textview 的名称来解决这个问题。我仍然真的不知道是什么导致了错误的开始。
  • 如果您更改了名称,也许您现在正在尝试使用 res/strings.xml 中不存在的字符串引用?
  • 我在问这个问题之前搜索了很多次,发现了很多类似的问题,包括你提到的那个。我确实阅读了该问题中的建议,并且我的任何 java 文件中都没有 import Android.R。
  • 大家好,我忘了问这个问题,因为它是很久以前问的。一年前我应该接受我自己的答案,现在是上面的评论。问题在于,当时 android studio 还处于早期阶段,作为一个新开发人员,我永远不应该使用它。请放心,现在一切正常,并且一直如此。如果可能,请取消删除我原来的答案,以便我接受。
  • 找不到 R 不是你的错误,它是由构建错误引起的错误修复你的其他错误,你应该没问题。

标签: android android-studio r.java-file


【解决方案1】:

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


点击 Build->Clean Project 将执行 gradle clean

【讨论】:

  • 有时你还需要重启android studio。或者至少对我来说。
  • 对于那些对使用命令行感到不安的人,单击 Build->Clean Project 将执行“gradlew clean”。 ;)
  • 不走运...清洁重建对我不起作用
  • if clean,rebuild,invalidate caches-restart 不能解决 go for: import package.R;
  • 对我来说,这是导致问题的原因:gradle 中的 ApplicationId 和清单中的包名称不匹配(尽管自动导入为 R 文件添加了错误的地址)。我推荐这篇小文章来澄清两者之间的区别。 blog.stylingandroid.com/package-name-vs-application-id
【解决方案2】:

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

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

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

【讨论】:

  • 您当时使用的 Android Studio 版本是什么?
  • 对我不起作用(Android Studio 0.8.14)。但是,Build > Clean 项目运行良好。
  • 在 Android 1.2.1 中仍然有效。如果第一次不起作用,请记住多次执行此操作。
  • 这是唯一对我有用的东西。我首先尝试了所有其他解决方案。
  • 在 Android Studio 3.1.1 中,此选项位于 File -> Sync Project with Gradle Files
【解决方案3】:

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

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

更改 gradle 版本后问题已解决。详细历史记录可以查看here

【讨论】:

  • Android 工作室开发人员的又一惊人壮举。恢复到3.2.1 实际上是唯一对我有用的解决方案...
  • 令人惊讶的是 2 个月后仍然是一个问题。最新版本 (3.3.2) 没有修复它,3.2.1 修复了。
  • 您也可以将 Android Studio 升级到版本 3.3,而不是回到 gradle 3.2.1。看我的回答here
  • 它通过将 3.3.0 更改为 3.2.1 来工作,但我的问题是它在 3.3.0 上运行良好,我刚刚重构并更新了 manifest xml 文件和 gradle 文件并同步了 gradle 。我可以知道可能是什么原因
  • 25 小时上网,看来这是唯一可行的解​​决方案。谢谢安卓工作室:(....
【解决方案4】:

我遇到了类似的问题,这就是我所做的:

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

检查我的 sdk 中的 buildTools 版本

从 build gradle (module) 将 minSdkVersion 从 8 更改为 9

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

但这一切都没有帮助。

最后我找到了答案(这在我的情况下有效)

从 build.gradle(module:app) 改变

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

或者

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

【讨论】:

    【解决方案5】:
    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 文件并清理项目。

    【讨论】:

    • 我的 XML 文件中的一个缺失图像对我造成了这个问题。将图像放入文件夹中,清理干净,R 现在又开心了。
    • 我不小心在 strings.xml 中定义了我的字符串两次。 Studio 根本没有表现出来。 X-(谢谢你的回答。
    • 为什么在 IDE 中没有反馈给坏的 XML 文件下划线?
    • 当你提到的事情发生时,问题会在 xml 中突出显示。我已经尝试了所有可以在互联网上找到的方法,但没有解决我的问题,尽管应用程序运行正常。
    【解决方案6】:

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

    所以你尝试了一个干净的,但这不起作用。

    而且重启也不行。

    但是尝试文件 -> 使缓存无效/重新启动... -> 无效并重新启动

    Android Studio 维护有关哪些文件依赖于哪些其他文件的信息。而且由于移动文件没有正确实现,移动文件会导致错误。这还不是全部:这些依赖项的缓存用于加速构建。

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

    【讨论】:

    • 没有帮助。也尝试过清洁/重建。将 java 包移动到另一个包后发生错误。有趣的是,在一个包中可以访问 R 类,但在我移动的包中无法访问它。
    • 在最新版本的 Android Studio 中,Invalidate 和 Restart 现在是默认菜单选择。这应该至少可以帮助一些人。 (太糟糕了,他们没有修复所有导致此错误的疯狂错误!)
    • 移动和重命名项目后出现此错误。这解决了所有清理和重启后的 R 问题。谢谢。
    • 如果您第一次尝试,这绝对是正确的答案 1.) 清理和重建 2.) 确保您的 xml 文件有效
    【解决方案7】:

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

    import com.example.yourproject.R;
    

    【讨论】:

    • 啊,在你第一次构建之前仍然会有错误消息。但是,您只需按下构建,Android Studio 就会生成 R 文件,构建应该会成功。
    • 我认为修复后最好清理项目然后构建。或按 Shift + F9 使用您的设备或模拟器进行调试。我更喜欢在真机上调试。
    【解决方案8】:

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

    gradlew clean

    "Tools" -&gt; "Android" -&gt; "Sync Project with Gradle Files"

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

    【讨论】:

    • 谢谢也为我工作。小问题 - 如果我想这样做,我应该在哪里输入 gradlew clean (我做了“工具”->“Android”->“使用 Gradle 文件同步项目”)?
    • 打开命令终端,切换到项目目录执行“./gradlew clean”
    • 这如何比“重建项目”更好地解决问题?
    • 是的,就我而言,我添加了一个名为“import.png”的 png 文件。我不得不重命名它,在我的例子中是“import_icon.png”,然后项目编译好了。
    【解决方案9】:

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

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

    【讨论】:

    • 在我的例子中,不仅在 XML 中存在问题,而且在 PNG(可绘制)中也存在问题。
    【解决方案10】:

    您最近是否更新了您的 SDK 工具?启动 android SDK 管理器并确保您拥有最新的 SDK 工具,该工具现在与平台工具分开。当我第一次更新我的 SDK 管理器时,我遇到了同样的问题,直到我关闭并重新打开 SDK 管理器,SDK build 工具包才显示安装/更新。

    【讨论】:

    • 我相信那里的一切都是最新的。这真的会导致这样的问题吗?
    • 如果您没有安装新的 SDK build 工具,可以。
    【解决方案11】:

    您的代码只是被打乱了。答案很简单。

    只需转到 Build --> Clean Project

    这应该可以解决问题。

    还要检查您的 Android Studio 版本。

    我目前使用的是 Android Studio 3.0.1

    【讨论】:

      【解决方案12】:

      我必须在 android studio 中导入我的 R 包。例如:import com.example.&lt;package name&gt;.R

      【讨论】:

      • 这发生在我重构包名后,但不知何故android工作室留下了import com.example.old-package-name.R,所以我不得不重命名导入。
      • 我已经将一些 UI 的东西移到了一个子包中,然后得到了错误,我需要从父包中导入 R。
      【解决方案13】:

      只需清理您的项目并使用 Gradle 文件同步项目即可。

      问题就解决了。

      【讨论】:

      • 需要注意的是,右击“app”并点击菜单中的同步按钮并不能实现这一点。谢谢。
      【解决方案14】:

      我有过这个

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

      【讨论】:

      • 我遇到了这个问题,因为我的一个 XML 文件中存在错误。解决了这个问题然后做了一个Build-&gt;Clean Project
      【解决方案15】:

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

      当出现问题时,您可以通过运行代码分析来找出问题所在。

      从顶部的菜单中选择:

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

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

      我的确切问题是由于我使用基于风味的清单文件而导致的,并且我意外地在风味中复制了 &lt;application&gt; 标记内的一些权限。

      更新:我确实遇到了一个问题,在修复后 Android Studio 仍然显示错误,即使我现在可以在错误仍然存​​在的情况下构建和运行完美。 (我正在运行一个金丝雀版本,所以暂时搁置它)

      【讨论】:

      • 有趣的是,我只在一个文件上遇到了这个问题,然后运行了“检查代码”过程,它自行清除了(清理和重建并没有解决它)。一定有什么东西卡在了 Lint 中,只有这样才能清除。谢谢!
      • 谢谢你!虽然这发现了许多一般性错误,这是意料之中的,但摧毁整个城堡的部分是 Asset Studio 生成的 XML 文件中的一个小语法错误!一旦我解决了这个问题,一个清洁项目让我可以继续前进。
      【解决方案16】:

      我在手动重命名应用程序的域文件夹时遇到了这个问题。为了解决这个问题,我不得不

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

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

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

      【讨论】:

        【解决方案17】:

        我遇到了同样的问题: 安卓工作室 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

        【讨论】:

        • 你救了我的命!将 android studio 更新到 3.4 为我解决了这个问题
        【解决方案18】:

        这是一个非常古老的问题,但它仍然经常发生,并且这里没有真正全面的答案。

        我遇到这个问题的次数比我想承认的要多。它可能是由各种各样的问题引起的,这些问题大多与您的项目结构不符合预期有关。以下是我遇到的所有问题的列表:

        从 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 文件中的 dependencies 块中,

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

        如果您的资源中有损坏的文件或无效的 xml 文件,您将收到此错误。

        根据我的经验,有时 Android Studio 会无缘无故地出现问题,您需要重新启动它和/或您的 PC。我不知道为什么,但有时它会起作用。

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

        如果只有部分资源存在此问题,则这些资源很可能位于错误的目录中。

        在一种情况下,我不得不完全重新安装 Android Studio。我不知道出了什么问题,但它确实有效。

        在一种情况下,我将整个项目移动到不同的目录,并将其作为新项目重新导入。我不知道出了什么问题,但它确实有效。

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

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

        最后,在您修复了任何错误之后,您需要清理您的 Gradle 项目。为此,您可以转到顶部的 Build 菜单并选择 Clean Project。

        【讨论】:

          【解决方案19】:

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

          【讨论】:

            【解决方案20】:

            我有这个问题的特殊情况。

            在我的项目中,一切顺利,可以编译构建成功,但是在我的Android Studio IDE中(我也试过Intelligent IDEA,他们的情况一样)R.java文件不能很好的解析并始终处于红线。

            就像这样:

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

            最后我发现这个棘手的问题是由我的 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 studio,红色消失,我又可以愉快地编程了。

            【讨论】:

            • 在 Android 3.2 中只是帮助/编辑自定义属性
            【解决方案21】:

            构建 > 清理项目

            这对我有用。有几次同样的问题,这似乎是正确的。除非您更改了某些内容或调用了变量 R。这个问题通常会突然发生,当它发生在我身上时,所以我想它只是 Android 工作室吓坏了。哈哈

            祝你好运,祝你的项目好运。

            【讨论】:

            • 谢谢。它也对我有用。我替换了drawable中的一些图像并得到了那个错误。
            【解决方案22】:

            执行:构建 > 清理项目

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

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

            【讨论】:

              【解决方案23】:

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

              我做的是:

              • 检查 SDK 更新
              • 然后android studio更新,
              • 然后重新打开项目
              • 打开andoridmanifest.xml
              • 删除 android:label 中“_>”之间的空格并保存。

              这对我有用。

              【讨论】:

                【解决方案24】:

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

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

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

                【讨论】:

                  【解决方案25】:

                  我遇到了同样的问题,大多数时候它都被解决了

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

                  但这一次,即使做了所有这些事情,错误仍然存​​在,我终于找到了罪魁祸首。

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

                  错误

                  android:id="username"
                  

                  更正

                  android:id="@id/username"
                  

                  在 xml 文件中弄乱与 resources 相关的东西是一个主要问题 此错误的原因。请注意它可能不会在 xml 布局文件中显示为错误。

                  注意

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

                  【讨论】:

                    【解决方案26】:

                    `我遇到了同样的问题,它通过以下方式解决:

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

                    【讨论】:

                    • 这是一个很好的答案,虽然我只需要在 gradle 文件中放置 '//' 并选择重新同步。然后所有 AS 都识别了导入并允许我运行应用程序。
                    【解决方案27】:

                    这种表示法似乎可以正常工作。

                    android:id="@+id/viewID"
                    

                    Android Studio 的设计面板似乎不太好用。

                    【讨论】:

                      【解决方案28】:

                      同样的问题。当我在我的可绘制文件夹中添加一些图像并尝试访问它们时开始。此外,添加的图像具有大写字母的扩展名。这似乎使构建崩溃,因为即使我重命名它们,消息也是相同的并且 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 神奇地重新出现了。

                      【讨论】:

                        【解决方案29】:

                        导致此错误的原因有很多。

                        1. 有时会发生替换保持相同名称的图像文件。
                        2. 假设您从布局 .xml 中删除了一个项目,例如 &lt;Button/&gt;,但它仍然在任何 Activity 或 Fragment .java 中声明。
                        3. 还有很多。

                        跟踪错误的最佳方法是重建它而不是干净或同步做一些故意的错误。

                        如果它不能解决您的问题,那么肯定有一些缺陷或运行时错误或由于资源使用不当而发生的错误,可能是您的代码或设计中的 java 或 xml 文件,这迫使 gradle 停止因为(R)资源文件无法正确索引您的资源,您必须承认这一点。

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

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

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

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

                        【讨论】:

                          【解决方案30】:

                          只需从根包中导入 R 符号

                          import rootpackage.R;
                          

                          没有重建、同步或其他东西...

                          【讨论】:

                            猜你喜欢
                            • 2016-10-26
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2018-05-14
                            • 2016-08-23
                            • 1970-01-01
                            • 1970-01-01
                            相关资源
                            最近更新 更多