V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
HangoX
V2EX  ›  程序员

请教一个关于 idea 插件开发中兼容各个 IDE 版本的问题

  •  
  •   HangoX · 2023-10-14 17:30:56 +08:00 · 1188 次点击
    这是一个创建于 443 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我开发了一个 android studio 的插件,用到了部分 android studio 的代码,但是到 as 的某个版本之后,这个类没了,改为另外一个类。

    这个时候我遇到了一个问题,就是如果我改 target 为新的 as 作为目标,虽然可以使用这个新的类,然后适配新的 as ,但是旧版本的 as 就不能使用了(表现就是直接找不到这个类)。

    请问如果我要同时兼容两个 as 版本,一般都是怎么做的? 我能想到的方法就是

    1. 不同的兼容版本在不同的分支上,然后分别维护,增加新功能每个分支都提交一下
    2. 编写兼容类,然后用反射确定使用什么类
    11 条回复    2023-10-15 17:48:00 +08:00
    zeal7s
        1
    zeal7s  
       2023-10-14 17:37:44 +08:00
    可以拿到当前 as 的版本号吗?拿到的话就能用 if else 做个判断
    zeal7s
        2
    zeal7s  
       2023-10-14 17:39:43 +08:00
    @zeal7s
    1. 在不同分支上操作管理起来太麻烦了
    2. 反射感觉有点不太优雅
    BBCCBB
        3
    BBCCBB  
       2023-10-14 17:52:31 +08:00
    jetbrains 的很多插件都是要使用新版本就必须升级 ide 到高版本的.
    HangoX
        4
    HangoX  
    OP
       2023-10-14 19:42:15 +08:00
    @zeal7s 类不见了,是编译不过,升级后编译可以过,但是不同的类,加载直接报错

    @BBCCBB as 的代码质量有点差,很多时候不是想升级就能升级的,还有就是刚好是个分割线,一般都是部分人先升级上去的
    zeal7s
        5
    zeal7s  
       2023-10-14 20:29:37 +08:00
    @HangoX 没有 c/c++/c#类似的#if 宏吗?
    lisongeee
        6
    lisongeee  
       2023-10-14 22:00:20 +08:00
    > as 的代码质量有点差,很多时候不是想升级就能升级的,还有就是刚好是个分割线,一般都是部分人先升级上去的

    这点确实没毛病,kts 的语法高亮老是报错,还有就是 R 资源提示未发现符号

    虽然不影响运行 gradle build ,但是真的很影响开发体验
    HangoX
        7
    HangoX  
    OP
       2023-10-15 01:37:40 +08:00
    @lisongeee 你要是去看看 android studio 的源码,你会发现实际情况更差,什么沙雕代码都有
    @zeal7s java 不是用这种方式实现,对于 C 来说编译用宏,实际上,java 编译用不同的 module compile 即可,但是不管 c 和 java 都要解决运行时问题
    danbai
        8
    danbai  
       2023-10-15 08:11:53 +08:00 via Android
    idea 插件可以设置使用的版本号,你可以维护两个版本。
    learningman
        9
    learningman  
       2023-10-15 13:06:34 +08:00
    加个版本限制,分开发布,新的特性 backport 到旧版本上。
    你去看 jb 自己的插件也是这么搞的。
    HangoX
        10
    HangoX  
    OP
       2023-10-15 15:25:36 +08:00
    @danbai 看来只能这样,有点蛋疼

    @learningman 看起来很蛋疼,但是既然官方是这样,我就只能是这样了
    ikas
        11
    ikas  
       2023-10-15 17:48:00 +08:00
    兼容类
    java 中没啥好办法

    我自己的一个安卓项目,使用了不同版本的内置 api

    dependencies {
    api platform(project(':bom'))
    implementation project(":system-common")
    implementation project(":system28")
    implementation project(":system29")
    implementation project(":system30")
    implementation project(":system31")
    implementation project(":system32")
    implementation project(":system33")
    implementation project(":system34")
    }

    if (AndroidVersionUtil.getVersion() >= 34) {
    permissionManager = new PermissionManager34();
    ....
    } else if (AndroidVersionUtil.getVersion() >= 33) {
    permissionManager = new PermissionManager33();
    ...
    } else if (AndroidVersionUtil.getVersion() >= 32) {
    permissionManager = new PermissionManager32();
    ....
    }
    ...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1226 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 18:05 · PVG 02:05 · LAX 10:05 · JFK 13:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.