Android Studio 提示 Cannot resolve symbol 'XXX' 问题如何解决? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhaoyuting
V2EX    Android

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

  •  
  •   zhaoyuting 2021-07-15 09:09:31 +08:00 12972 次点击
    这是一个创建于 1550 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现状,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
    均没用

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

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


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

    @sunpj 我再看看是怎么回事

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

    如果你是系统开发,可以将他依赖的 bootclasspath 里面的 jar 全部复制到工程中以 compileOnly 的方式依赖,就可以消除奥错了。
    300
        14
    300  
       2021-07-15 10:20:01 +08:00 via Android
    ls 好像有种 Mac OS 帖子里喷 Windows 的感觉…
    fredli
        15
    fredli  
       2021-07-15 10:32:14 +08:00
    检查一下 JDK,再试试 Invalidate and Restart
    HarryQu
        16
    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
        17
    rrZ2C  
       2021-07-15 16:57:40 +08:00
    是不是 因为 @UnsupportedAppUsage
    /**
    * The last selected position we used when notifying
    */
    @UnsupportedAppUsage
    int mOldSelectedPosition = INVALID_POSITION;
    mail2dechao
        18
    mail2dechao  
       2021-07-15 17:40:34 +08:00
    将对应的依赖重新删除添加并同步就好了
    fan123199
        19
    fan123199  
       2021-07-16 00:41:38 +08:00
    对于自己工程,要各种删除.gradle .idea build 等目录可解决。但是源码,我没有找到银弹
    ikas
        20
    ikas  
       2021-07-16 15:07:37 +08:00
    你这是看源码...sdk 带的那个也不是完整系统源码啊....跟你项目没有任何关系..
    Helsing
        21
    Helsing  
       2021-07-17 14:55:26 +08:00 via iPhone
    楼上说的对,你查看的是源码,里面飘红是很正常的,因为引用了很多其他的系统源码,而你的工程里又没有。想看源码的话可以谷歌一下怎么把源码导入 Android Studio
    zhanlanhuizhang
        22
    zhanlanhuizhang  
       2021-07-21 17:21:16 +08:00
    你这是遇到了极端情况,你把编译的所有相关文件全部删除。然后改个名称。重新打开就可以了。settings.gradle 里面的项目名称也改一下。rootProject.name
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2816 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 21ms UTC 13:47 PVG 21:47 LAX 06:47 JFK 09:47
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86