请教高手, Android 对 JVM 生态圈的兼容极限在哪里? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
abcbuzhiming
V2EX    Android

请教高手, Android 对 JVM 生态圈的兼容极限在哪里?

  •  1
     
  •   abcbuzhiming 2021-04-08 11:55:24 +08:00 13082 次点击
    这是一个创建于 1646 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近才意识到,实际上当年 Google 仅仅是把 Java 的 api 接口搬了过来,接口下面的代码完全重新写了一遍,虚拟机也是完全自己实现。这样的东西从标准来说应该不能算 JDK,本质其实是语法像 java 语言的全新语言。在当时确实可以把 java 生态圈里的很多东西,直接拿来用。

    但是,我的疑惑是,这样的实现,它的技术极限在哪里,Google 是否真的做到了二进制级别的兼容?
    12 条回复    2021-04-09 11:49:43 +08:00
    guyeu
        1
    guyeu  
       2021-04-08 13:14:24 +08:00
    显然没有,语法层面的兼容都没有做到,所以很多库会同时有 jre 版本和 android 版本。另外,Google 也复用了一大堆 JDK 的原始代码,后来因为官司问题都替换成了自己的实现而已。
    abcbuzhiming
        2
    abcbuzhiming  
    OP
       2021-04-08 16:03:48 +08:00
    @guyeu 能不能举个同时有 jre 版本和安卓版本库的例子
    guyeu
        3
    guyeu  
       2021-04-08 16:10:48 +08:00
    @abcbuzhiming #2 最著名的大概就是 guava 了
    iminto
        4
    iminto  
       2021-04-08 17:17:05 +08:00
    @guyeu 这个例子不应该被认为是 API 不兼容导致,它的安卓版本是做了内存方面的优化和编码风格的改变,虽然某些 API 确实输出上有不同,但是 android 在语法层面应该认为是兼容某个特定 JRE 的。
    ychost
        5
    ychost  
       2021-04-08 17:28:13 +08:00
    Guava 还好,后面 JDK 都借鉴了相关 api 比如 Optional,Future 之类的
    wobuhuicode
        6
    wobuhuicode  
       2021-04-08 17:28:46 +08:00
    我记得 12 年刚学安卓 2.X 开发的时候,很多底层就是 JDK 的,好像安卓 4.4 之后才全部换过来。
    bigbyto
        7
    bigbyto  
       2021-04-08 17:30:06 +08:00
    应该是取决于 android 的虚拟机。 很久没接触安卓,像早期的 dalvik 虚拟机,dex 是由 jvm bytecode(class 文件)转译过去的,因此一些新的 jvm 特性(如 invokedynamic 指令)需要等待安卓的虚拟机进行兼容,才能在代码中使用 lambda 表达式。
    guyeu
        8
    guyeu  
       2021-04-08 17:57:13 +08:00
    @iminto #4 的确,guava 的 android 和 jre 版本更多在于编码风格和特定于 android 的优化。android 在编写和编译的层面也兼容某一个特定的 java 版本,可以说合法的 java 代码就是合法的 android 代码。不同的是运行时。
    cjh1095358798
        9
    cjh1095358798  
       2021-04-08 18:36:08 +08:00
    android 符合 jvm 规范
    ikas
        10
    ikas  
       2021-04-08 20:49:37 +08:00
    android 就是一个独立的平台,本身也是事实分裂了 java 生态,并且 android 的虚拟机不符合 jvm 规范,安卓跑的是 dex,jvm 跑的是 class, java 代码是先编译成 class,然后再转换成 dex.
    ikas
        11
    ikas  
       2021-04-08 21:02:56 +08:00
    置于兼容,他根本不需要符合 jvm,同样也不需要去完整兼容,事实也是,他现在 java8 兼容完整了吗?
    chenyu8674
        12
    chenyu8674  
       2021-04-09 11:49:43 +08:00
    java 程序员随便学两下就可以去写 Android,算不算另一种形式的“兼容”
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     878 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 21:12 PVG 05:12 LAX 14:12 JFK 17:12
    Do have faith in what you're doing.
    ubao 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