请教一个关于 idea 插件开发中兼容各个 IDE 版本的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
HangoX
V2EX    程序员

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

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

我开发了一个 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  
PRO
   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     Solana     3839 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 23ms UTC 00:54 PVG 08:54 LAX 16:54 JFK 19:54
Do have faith in what you're doing.
ubao msn 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