Android Studio 提示 Cannot resolve symbol 'XXX' 问题如何解决?

2021-07-15 09:09:31 +08:00
 zhaoyuting
现状,Android Studio 对于一些 Symbol 不能 Resolve, 具体请看图 1 、图 2 。
图 1: https://sm.ms/image/oJinhPQ7V1kbOFr
图 2: https://sm.ms/image/GnWVsPkcDF7y1fZ

试过的方法
1. Clean Project
2. Invalidate and Restart
均没用

求个解决方案
5589 次点击
所在节点    Android
22 条回复
thetbw
2021-07-15 09:13:45 +08:00
是不是 gradle 的问题,跑一下看他会报什么错
AoEiuV020
2021-07-15 09:22:04 +08:00
ListView ?这不是 android 内部的组件吗,普通安卓项目自然没法访问一些内部的变量,代码都不在你的项目里,
要看就下载完整安卓源码项目试试,
sunpj
2021-07-15 09:31:57 +08:00
应该是少了个依赖
zhaoyuting
2021-07-15 09:33:05 +08:00
@thetbw
不知道怎么操作...
整个项目可以正常打包,也能调试。

我点进去 android SDK 的类 ListView 出现了一堆红色,后来我点进 Context 类里面也是同样的一堆红色:Cannot resolve symbol 。


@AoEiuV020
你们的 Android Studio 在查看 SDK 类的源代码的时候也是同样的情况吗?
我之前没搞过 android,这个现象是不是挺正常的 . . . . 都这样?
guchengyehai1
2021-07-15 09:42:37 +08:00
这是因为那些 class 都是定义在系统中
root99527
2021-07-15 09:44:27 +08:00
mOldSelectedPosition 是哪里定义的?
gtanyin
2021-07-15 09:47:16 +08:00
@zhaoyuting 都这样,没问题
zhaoyuting
2021-07-15 09:53:55 +08:00
@root99527
mOldSelectedPosition 是在 Adapter
zhaoyuting
2021-07-15 10:00:04 +08:00
@root99527
mOldSelectedPosition 是在 AdapterView 里定义的。AdapterView 是 ListView 的父类的父类。
这是我靠搜索搜到的,因为 cannot resolve symbol,没得跳转,只能手动搜了。

@sunpj 我再看看是怎么回事

@guchengyehai1
@gtanyin
好的,学习了
secretman
2021-07-15 10:01:39 +08:00
上面那些什么在系统里的都是瞎说, 你都 import 了。
一般不管他过一段时间就好,受不了就备份 .idea 、.gradle,然后删了重新打开项目试试
secretman
2021-07-15 10:02:04 +08:00
Android Stduio 经常各种泛红但是其实没错,IDE 垃圾
secretman
2021-07-15 10:03:38 +08:00
@secretman 看走眼了,你这是源码,下载一份完整的编译吧,你现在打开的是 SDK 里面的,对不起楼上的大哥们
cg2dev
2021-07-15 10:09:29 +08:00
如果是 App 应用开发,这种系统包里面的报错可以忽略,因为他依赖于其他的包,但是对于你应用开发没有影响,因为你开发过程属于编译时。到了设备上是运行时,系统里面集成了他依赖的各个 jar,所以不会报错。

如果你是系统开发,可以将他依赖的 bootclasspath 里面的 jar 全部复制到工程中以 compileOnly 的方式依赖,就可以消除奥错了。
winterbells
2021-07-15 10:20:01 +08:00
ls 好像有种 Mac OS 帖子里喷 Windows 的感觉…
fredli
2021-07-15 10:32:14 +08:00
检查一下 JDK,再试试 Invalidate and Restart
HarryQu
2021-07-15 12:50:34 +08:00
我看了下 ListView 的源码,import 中报红的部分注解,点击可以跳转。报红的部分成员变量可以在父类中找到。

但是像 ViewRootImpl 类就找不到了。如果想要研究系统源码的话,直接使用 Android SDK 并不方便。


在别人的文章中看到的:
在研究 Android SDK 源码的时候,经常会发现部分 API 报红,点击无法跳转,这对于研究源码来说非常的不方便。

Android 有两种类型的 API 不能通过 SDK 访问。

一种是在 com.android.internal 包中的 API,称之为 internal API 。

另一种是被标记为 @hide 属性的类和方法,这是一组被隐藏的 API,称之为 hidden API 。

当使用 Android SDK 进行开发的时候,应用默认引用了 android.jar ,它位于 SDKDir\platforms\android-X 目录下( X 代表 API 级别),默认移除了所有的被 @hide 标识的方法或者类以及 internal 包下的类。当应用在设备上运行时,它会加载 framework.jar 。简单来说,framework.jar 和 android.jar 等同,但是没有移除 internal API 和 hidden API 。Hidden API 之所以被隐藏,是想阻止开发者使用 SDK 中未完成或不稳定的部分。因为这些 API 可能有问题:

1. 隐藏的 API 在未来的 Android 版本中可能被删除。
2. 可能会被修改方法签名或字段类型。
3. 设备制造商还可能会删除或修改隐藏的 API,这可能会影响这部分设备。

引用的两篇文章:
https://zhuanlan.zhihu.com/p/33241064
https://www.jianshu.com/p/fbf45770ecc8
rrZ2C
2021-07-15 16:57:40 +08:00
是不是 因为 @UnsupportedAppUsage
/**
* The last selected position we used when notifying
*/
@UnsupportedAppUsage
int mOldSelectedPosition = INVALID_POSITION;
mail2dechao
2021-07-15 17:40:34 +08:00
将对应的依赖重新删除添加并同步就好了
fan123199
2021-07-16 00:41:38 +08:00
对于自己工程,要各种删除.gradle .idea build 等目录可解决。但是源码,我没有找到银弹
ikas
2021-07-16 15:07:37 +08:00
你这是看源码...sdk 带的那个也不是完整系统源码啊....跟你项目没有任何关系..

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/789610

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX