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

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

  •  
  •   HangoX · 195 天前 · 912 次点击
    这是一个创建于 195 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    @BBCCBB as 的代码质量有点差,很多时候不是想升级就能升级的,还有就是刚好是个分割线,一般都是部分人先升级上去的
    zeal7s
        5
    zeal7s  
       195 天前
    @HangoX 没有 c/c++/c#类似的#if 宏吗?
    lisongeee
        6
    lisongeee  
       195 天前
    > as 的代码质量有点差,很多时候不是想升级就能升级的,还有就是刚好是个分割线,一般都是部分人先升级上去的

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

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

    @learningman 看起来很蛋疼,但是既然官方是这样,我就只能是这样了
    ikas
        11
    ikas  
       194 天前
    兼容类
    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   ·   我们的愿景   ·   实用小工具   ·   2796 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 06:40 · PVG 14:40 · LAX 23:40 · JFK 02:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.