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

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

  •  1
     
  •   abcbuzhiming · 13 天前 · 2174 次点击
    最近才意识到,实际上当年 Google 仅仅是把 Java 的 api 接口搬了过来,接口下面的代码完全重新写了一遍,虚拟机也是完全自己实现。这样的东西从标准来说应该不能算 JDK,本质其实是语法像 java 语言的全新语言。在当时确实可以把 java 生态圈里的很多东西,直接拿来用。

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