V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhaoyuting
V2EX  ›  Android

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

  •  
  •   zhaoyuting · 192 天前 · 1846 次点击
    这是一个创建于 192 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现状,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  
       192 天前
    是不是 gradle 的问题,跑一下看他会报什么错
    AoEiuV020
        2
    AoEiuV020  
       192 天前
    ListView ?这不是 android 内部的组件吗,普通安卓项目自然没法访问一些内部的变量,代码都不在你的项目里,
    要看就下载完整安卓源码项目试试,
    sunpj
        3
    sunpj  
       192 天前
    应该是少了个依赖
    zhaoyuting
        4
    zhaoyuting  
    OP
       192 天前
    @thetbw
    不知道怎么操作...
    整个项目可以正常打包,也能调试。

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


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

    @sunpj 我再看看是怎么回事

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

    如果你是系统开发,可以将他依赖的 bootclasspath 里面的 jar 全部复制到工程中以 compileOnly 的方式依赖,就可以消除奥错了。
    winterbells
        14
    winterbells  
       191 天前 via Android
    ls 好像有种 Mac OS 帖子里喷 Windows 的感觉…
    fredli
        15
    fredli  
       191 天前
    检查一下 JDK,再试试 Invalidate and Restart
    HarryQu
        16
    HarryQu  
       191 天前
    我看了下 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  
       191 天前
    是不是 因为 @UnsupportedAppUsage
    /**
    * The last selected position we used when notifying
    */
    @UnsupportedAppUsage
    int mOldSelectedPosition = INVALID_POSITION;
    mail2dechao
        18
    mail2dechao  
       191 天前
    将对应的依赖重新删除添加并同步就好了
    fan123199
        19
    fan123199  
       191 天前
    对于自己工程,要各种删除.gradle .idea build 等目录可解决。但是源码,我没有找到银弹
    ikas
        20
    ikas  
       190 天前
    你这是看源码...sdk 带的那个也不是完整系统源码啊....跟你项目没有任何关系..
    Helsing
        21
    Helsing  
       189 天前 via iPhone
    楼上说的对,你查看的是源码,里面飘红是很正常的,因为引用了很多其他的系统源码,而你的工程里又没有。想看源码的话可以谷歌一下怎么把源码导入 Android Studio
    zhanlanhuizhang
        22
    zhanlanhuizhang  
       185 天前
    你这是遇到了极端情况,你把编译的所有相关文件全部删除。然后改个名称。重新打开就可以了。settings.gradle 里面的项目名称也改一下。rootProject.name
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2000 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:09 · PVG 10:09 · LAX 18:09 · JFK 21:09
    ♥ Do have faith in what you're doing.