Android Studio提示“无法解析符号”,但项目可以编译

105

我正在Android Studio中导入twitter4j,使用以下内容在我的build.gradle文件中:

dependencies {
  compile 'com.android.support:support-v4:18.0.+'
  compile files('libs/twitter4j-core-3.0.4.jar')
}

该项目编译正常,我可以轻松创建推特对象。然而,在Android Studio中,任何引用该库的内容都显示“无法解析符号”,并以红色显示。我需要做什么才能使Android Studio识别该库?

我已经尝试重建项目、使用./gradlew clean命令,以及关闭并重新打开我的项目。


2018年,Android Studio 3+:有时候,Android Studio和Gradle不一致。解决方案在这里:https://dev59.com/V6vka4cB1Zd3GeqPrlZj#50327343 - user1506104
我在将一个练习项目导入到Android Studio后遇到了同样的问题。导入时,Android Studio给了我警告并建议更新sdk版本,所以我按照建议去做了。之后,某些东西不再兼容,因此Android Studio建议更改其他某个版本。在遵循所有这些建议之后,我仍然遇到了“找不到符号”的问题。我撤销了更改,重新导入了项目,并没有这次跟随Android Studio的提示。之后错误消失了。小心盲目地跟随该程序的建议。 - David
28个回答

245

不确定这会不会起作用,但是我目前唯一的想法是:在AS中的文件树中右击jar文件,然后选择“添加为库…”。

编辑:您可以执行“文件”->“无效缓存…”,并选择“无效并重启”选项来解决此问题。

编辑2:这个修复方法适用于所有类似情况,而不仅限于twitter4j的解决方案。


啊,是的,它在里面。 - TG-T
您可以执行“文件”->“使缓存无效…”,并选择“使其无效并重新启动”选项来解决此问题。这是我的最后一个想法了,遗憾地。 - doydoy
16
清空缓存并重新启动对我无效。我也尝试了重新安装Android Studio和重新导入项目。这非常令人恼火... - clocksmith
3
“文件”->“无效缓存…”刚刚解决了我的问题。我在这个问题上浪费了很多时间。为什么这个答案不是搜索结果的前几项呢?非常感谢! - Eric Cochran
2
扔进我的感激之情 - Yevgeny Simkin
显示剩余4条评论

34

尝试更改依赖项的顺序,方法如下:在“文件”>“项目结构”>(选择您的项目)>“依赖项”中进行操作。

对我而言,“无效缓存”并没有起作用,但将我的构建从列表底部移至顶部却有效。


改变依赖关系的顺序对我很有帮助,我尝试了所有答案中提供的解决方案,只有你的解决方案对我有用,谢谢。 - wqycsu
将一个依赖项向上移动就解决了我的问题!(Android Studio 3.0.1)。 - Sébastien
是的,移动哪个依赖项并不重要,只需更改任何一个的顺序,这对于Android Studio 3.3也适用。 - karique

12

这是对我有用的方法。

在项目面板中,右键单击项目名称,并从弹出菜单中选择打开模块设置

然后将编译SDK版本更改为可用的最低版本(您在项目中设置的最小SDK版本)。 等待Android Studio加载所有内容。

它会给你一些错误,请忽略它们。

现在进入您的Java文件,Android Studio 将建议您导入:

import android.support.v4.app.FragmentActivity;

导入它,然后返回打开模块设置并将编译SDK版本更改回以前的版本。

等待事情加载完成,就可以了。


这是一项出色的工作。在我的情况下,Android Studio 告诉我无法解析 SDK 的所有类(包括 String、Integer、TextView 等)。在此之前,aStudio 还告诉我找不到我用来编译项目的 android-14 SDK。我忽略了它,所以问题出现了。最后,我找到了这个答案并按照它进行了更改,编译 SDK 版本,然后就可以工作了。感谢节省了我的时间。 - VinceStyling
现在进入你的Java文件,Android Studio会建议你导入。但这并不适用于我的情况。 - NineCattoRules

9

我的问题是由导入的库项目引起的,我在build.gradle中输入了一些内容,然后删除它并按下“立即同步”按钮,错误消失了。


6
我也遇到了这个问题,我的Android应用程序依赖于一些自己的Android库(使用Android Studio 3.0和3.1.1)。
每当我更新库并返回应用程序时,触发Gradle Sync时,Android Studio无法检测我对库所做的代码更改。编译工作正常,但Android Studio在使用该库的某些代码上显示红色错误线。
经过调查,我发现这是因为gradle继续指向我的库的旧编译版本。 如果您转到yourProject / .idea / libraries /,您将看到包含链接到库已编译版本的xml文件列表。这些文件以Gradle__artifacts_ *.xml开头(其中*是您的库名称)。
因此,为了使Android Studio使用最新版本的库,您需要删除这些Gradle__artifacts_ * .xml文件,然后Android Studio将重新生成它们,指向您的库的最新编译版本。
如果您不想每次单击“Gradle sync”时都手动执行此操作(谁会想这样做...),则可以在应用程序的build.gradle文件中添加此小的gradle任务。
task deleteArtifacts {
    doFirst {
        File librariesFolderPath = file(getProjectDir().absolutePath + "/../.idea/libraries/")
        File[] files = librariesFolderPath.listFiles({ File file -> file.name.startsWith("Gradle__artifacts_") } as FileFilter)

        for (int i = 0; i < files.length; i++) {
            files[i].delete()
        }
    }
}

为了让你的应用在执行gradle同步之前始终执行此任务,你只需要进入Gradle窗口,然后找到yourApp/Tasks/other/下的“deleteArtifacts”任务,在其上右键单击并选择“Execute Before Sync”(如下所示)。 Gradle window to configure task execution 现在,每次进行Gradle同步时,Android Studio都会强制使用你的libs的最新版本。

5

当我在项目中遇到这个问题(红色代码但它们正确工作)时;

首先,我进行了以下操作:(文件 -> 指示缓存)--> (使无效并重新启动)。

最后,我重新同步了我的应用程序中的build.gradle文件。问题得到了解决。


5

无效的缓存/重启这次对我没用。

找到了一个解决方案:

  1. 在build.gradle中删除compile ***implementation *** 行。

  2. 清理并重新构建。这里应该会出现错误。

  3. 将步骤1中的行添加回build.gradle中。

  4. 再次清理和重建。

很奇怪......


2

我最近遇到了一个问题,经过几天的摸索,终于找到了解决方法!顺便说一下,其他的解决方案对我都没有用。

解决方法:我的项目路径中有特殊字符!

请确保您的路径中没有这些特殊字符,那么您应该就不会遇到这个问题了,或者至少其他的解决方案对您也会有用。

希望这能帮助到有需要的人!


请检查您是否有一个项目路径中带有特殊字符,例如!(感叹号)。在我遇到的类似问题中(https://dev59.com/LI7ea4cB1Zd3GeqPHu5Q),这是根本原因。许多Java应用似乎不能容忍这种特殊字符(例如,从终端运行 'gradlew clean'将失败并抛出RunTimeException)。在线上发布的其他解决方案都没有帮助到我。但是,一旦我从路径中删除了!并进行了清理构建,Android Studio神奇地开始工作。 - Jim C
哇,太棒了!谢谢 :) - Josep Escobar

2

这个问题发生在我使用Android Studio默认位置中未安装的SDK时。我之前从ADT中使用了另一个位置,因为我试图避免重新下载所有内容。一旦我将项目指向Android Studio安装位置中的SDK位置,问题就解决了。


是的,我想那也是个好主意:默认情况下,Android Studio会将所有SDK安装在默认的Android Studio安装目录中。如果有任何不遵循该模式的情况,则需要进行修改。 - doydoy

1

我最近在使用Android Studio 1.3时遇到了同样的问题。唯一可行的解决方法是删除.gradle和.idea文件夹,然后重新导入项目到Android Studio。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接