现状,Android Studio 对于一些 Symbol 不能 Resolve, 具体请看图 1 、图 2 。
图 1: %title插图%num
图 2:%title插图%num

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

求个解决方案

22 条回复    2021-07-21 17:21:16 +08:00

thetbw
    1

thetbw   23 天前

是不是 gradle 的问题,跑一下看他会报什么错
AoEiuV020
    2

AoEiuV020   23 天前

ListView ?这不是 android 内部的组件吗,普通安卓项目自然没法访问一些内部的变量,代码都不在你的项目里,
要看就下载完整安卓源码项目试试,
sunpj
    3

sunpj   23 天前

应该是少了个依赖
zhaoyuting
    4

zhaoyuting   23 天前

@thetbw
不知道怎么操作…
整个项目可以正常打包,也能调试。

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

@AoEiuV020
你们的 Android Studio 在查看 SDK 类的源代码的时候也是同样的情况吗?
我之前没搞过 android,这个现象是不是挺正常的 . . . . 都这样?

guchengyehai1
    5

guchengyehai1   23 天前 via iPhone

这是因为那些 class 都是定义在系统中
root99527
    6

root99527   23 天前

mOldSelectedPosition 是哪里定义的?
gtanyin
    7

gtanyin   23 天前

@zhaoyuting 都这样,没问题
zhaoyuting
    8

zhaoyuting   23 天前

@root99527
mOldSelectedPosition 是在 Adapter
zhaoyuting
    9

zhaoyuting   23 天前

@root99527
mOldSelectedPosition 是在 AdapterView 里定义的。AdapterView 是 ListView 的父类的父类。
这是我靠搜索搜到的,因为 cannot resolve symbol,没得跳转,只能手动搜了。

@sunpj 我再看看是怎么回事

@guchengyehai1
@gtanyin
好的,学习了

secretman
    10

secretman   23 天前

上面那些什么在系统里的都是瞎说, 你都 import 了。
一般不管他过一段时间就好,受不了就备份 .idea 、.gradle,然后删了重新打开项目试试

secretman
    11

secretman   23 天前

Android Stduio 经常各种泛红但是其实没错,IDE 垃圾

secretman
    12

secretman   23 天前

@secretman 看走眼了,你这是源码,下载一份完整的编译吧,你现在打开的是 SDK 里面的,对不起楼上的大哥们
cg2dev
    13

cg2dev   23 天前

如果是 App 应用开发,这种系统包里面的报错可以忽略,因为他依赖于其他的包,但是对于你应用开发没有影响,因为你开发过程属于编译时。到了设备上是运行时,系统里面集成了他依赖的各个 jar,所以不会报错。

如果你是系统开发,可以将他依赖的 bootclasspath 里面的 jar 全部复制到工程中以 compileOnly 的方式依赖,就可以消除奥错了。

winterbells
    14

winterbells   23 天前 via Android

ls 好像有种 Mac OS 帖子里喷 Windows 的感觉…
fredli
    15

fredli   23 天前

检查一下 JDK,再试试 Invalidate and Restart
HarryQu
    16

HarryQu   23 天前

我看了下 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
    17

rrZ2C   22 天前

是不是 因为 @UnsupportedAppUsage
/**
* The last selected position we used when notifying
*/
@UnsupportedAppUsage
int mOldSelectedPosition = INVALID_POSITION;
mail2dechao
    18

mail2dechao   22 天前

将对应的依赖重新删除添加并同步就好了
fan123199
    19

fan123199   22 天前

对于自己工程,要各种删除.gradle .idea build 等目录可解决。但是源码,我没有找到银弹
ikas
    20

ikas   22 天前

你这是看源码…sdk 带的那个也不是完整系统源码啊….跟你项目没有任何关系..
Helsing
    21

Helsing   21 天前 via iPhone

楼上说的对,你查看的是源码,里面飘红是很正常的,因为引用了很多其他的系统源码,而你的工程里又没有。想看源码的话可以谷歌一下怎么把源码导入 Android Studio
zhanlanhuizhang
    22

zhanlanhuizhang   16 天前

你这是遇到了*端情况,你把编译的所有相关文件全部删除。然后改个名称。重新打开就可以了。settings.gradle 里面的项目名称也改一下。rootProject.name