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

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

  •  1
     
  •   abcbuzhiming · 2021-04-08 11:55:24 +08:00 · 10008 次点击
    这是一个创建于 1322 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近才意识到,实际上当年 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   ·   实用小工具   ·   5394 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 08:47 · PVG 16:47 · LAX 00:47 · JFK 03:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.