V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
QBugHunter
V2EX  ›  问与答

Android studio 版本更新导致类丢失

  •  
  •   QBugHunter · 2020-10-16 11:36:07 +08:00 via Android · 932 次点击
    这是一个创建于 1532 天前的主题,其中的信息可能已经有所发展或是发生改变。
    3.1 升级到 4.1,代码没动,然后编译通不过,提示

    java.lang.ClassNotFoundException: Class javax.servlet.http.Cookie not found

    然后网上查了一下,说我的 servlet 的版本不对,要 3.0 的,我的应该是 2.x 的,然后要修改 opt.xml 文件里的配置,我找了半天实在没找到这个文件的位置

    还有个答案是把 serlet-pai-3.1.jar 添加进 dependencies 里,但我看他给的 dependencies 貌似和我的不太一样。。。

    请问如何解决这个类未发现的问题
    13 条回复    2020-10-16 13:38:48 +08:00
    chenjiajia9411
        1
    chenjiajia9411  
       2020-10-16 12:38:45 +08:00
    你不会还在依赖 Apache HTTP Client 吧,那个早就在 API 23 弃用了……
    https://developer.android.com/about/versions/marshmallow/android-6.0-changes#behavior-apache-http-client
    然后在 API 29 的时候被彻底移除了: https://developer.android.com/about/versions/pie/android-9.0-changes-28#apache-p
    QBugHunter
        2
    QBugHunter  
    OP
       2020-10-16 12:44:38 +08:00 via Android
    @chenjiajia9411
    那怎么从工程里找到这个依赖,然后移出呢?我看了。gredle 文件没这个类的依赖
    chenjiajia9411
        3
    chenjiajia9411  
       2020-10-16 12:50:05 +08:00
    @QBugHunter #2 这个依赖本来是系统库,不需要特地配置。你要做的是在代码里搜索还在引用 org.apache.http 或者 javax.servlet.http 的地方,读懂他们是干啥的,然后用适当的现代化的库和类去替换,或者就干脆放弃升级。
    QBugHunter
        4
    QBugHunter  
    OP
       2020-10-16 13:02:12 +08:00 via Android
    @chenjiajia9411
    求教怎么升级。。。。我在网上查到就是说版本不对,但网上说要改一个 opt.xml 的文件,我找不到,
    我在整个工程里搜索 javac.servlet.http 显示没有结果
    QBugHunter
        5
    QBugHunter  
    OP
       2020-10-16 13:04:06 +08:00 via Android
    @chenjiajia9411
    或者说如何让工程不使用这个类
    chenjiajia9411
        6
    chenjiajia9411  
       2020-10-16 13:07:45 +08:00
    @QBugHunter #5 ……没有具体的项目比较难看的啊,你搜的办法应该都是后端 Java EE 开发的办法,不适用于安卓的。类名搜索不到的话应该是第三方库的问题了,可以排查一遍第三方库的依赖或者源码看看(虽然我没记错的话 IDEA 的搜索可以包括第三方库的)。
    如果你只是想干脆先让编译通过的话,试试在依赖里加一个“ compileOnly group: 'javax.servlet:javax.servlet-api:4.0.1' ”?
    chenjiajia9411
        7
    chenjiajia9411  
       2020-10-16 13:08:31 +08:00
    @chenjiajia9411 #6 compileOnly 'javax.servlet:javax.servlet-api:4.0.1'
    不行的话把 compileOnly 换成 implementation.
    ChenFanlin
        8
    ChenFanlin  
       2020-10-16 13:10:31 +08:00
    歪个楼, 前几天升到了 4.1, 调试的时候很多类的字段都捕获不到报异常, 有些断点也进不去, app 也常常卡死, 已经退回 4.0.2 了
    chenjiajia9411
        9
    chenjiajia9411  
       2020-10-16 13:16:39 +08:00
    @ChenFanlin #8 我是觉得升级看自己,有需要的功能就升级,像我需要 Java 8 library desugaring 所以才要升级到 4.0,就算是要兼容 Android 11 的包可见性更改,谷歌的办法也是提供就地更新而没有要求所有人都要升级到 4.1: https://developer.android.com/studio/releases/gradle-plugin#4-0-0
    HongJay
        10
    HongJay  
       2020-10-16 13:18:51 +08:00
    4.1 是真的搞
    QBugHunter
        11
    QBugHunter  
    OP
       2020-10-16 13:20:50 +08:00 via Android
    @ChenFanlin
    我也歪一下,怎么退回以前的版本。。。。
    ChenFanlin
        12
    ChenFanlin  
       2020-10-16 13:37:18 +08:00
    @QBugHunter #11 https://developer.android.com/studio/archive?hl=zh-cn 旧版安装包
    @chenjiajia9411 #9 比较喜欢升级最新版, 以前也没遇到过很大的问题
    chenjiajia9411
        13
    chenjiajia9411  
       2020-10-16 13:38:48 +08:00
    @QBugHunter #11 循序渐进升级也是个办法,先从 3.2 升起来,慢慢一步步过渡到 4.1.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5370 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 08:53 · PVG 16:53 · LAX 00:53 · JFK 03:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.