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

abcbuzhiming 1月前 21

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

但是,我的疑惑是,这样的实现,它的技术极限在哪里,Google 是否真的做到了二进制级别的兼容?
最新回复 (12)
  • guyeu 27天前
    引用 2
    显然没有,语法层面的兼容都没有做到,所以很多库会同时有 jre 版本和 android 版本。另外,Google 也复用了一大堆 JDK 的原始代码,后来因为官司问题都替换成了自己的实现而已。
  • 楼主 abcbuzhiming 27天前
    引用 3
    @guyeu 能不能举个同时有 jre 版本和安卓版本库的例子
  • guyeu 27天前
    引用 4
    @abcbuzhiming #2 最著名的大概就是 guava 了
  • iminto 27天前
    引用 5
    @guyeu 这个例子不应该被认为是 API 不兼容导致,它的安卓版本是做了内存方面的优化和编码风格的改变,虽然某些 API 确实输出上有不同,但是 android 在语法层面应该认为是兼容某个特定 JRE 的。
  • ychost 27天前
    引用 6
    Guava 还好,后面 JDK 都借鉴了相关 api 比如 Optional,Future 之类的
  • wobuhuicode 27天前
    引用 7
    我记得 12 年刚学安卓 2.X 开发的时候,很多底层就是 JDK 的,好像安卓 4.4 之后才全部换过来。
  • bigbyto 27天前
    引用 8
    应该是取决于 android 的虚拟机。 很久没接触安卓,像早期的 dalvik 虚拟机,dex 是由 jvm bytecode(class 文件)转译过去的,因此一些新的 jvm 特性(如 invokedynamic 指令)需要等待安卓的虚拟机进行兼容,才能在代码中使用 lambda 表达式。
  • guyeu 27天前
    引用 9
    @iminto #4 的确,guava 的 android 和 jre 版本更多在于编码风格和特定于 android 的优化。android 在编写和编译的层面也兼容某一个特定的 java 版本,可以说合法的 java 代码就是合法的 android 代码。不同的是运行时。
  • cjh1095358798 27天前
    引用 10
    android 符合 jvm 规范
  • ikas 27天前
    引用 11
    android 就是一个独立的平台,本身也是事实分裂了 java 生态,并且 android 的虚拟机不符合 jvm 规范,安卓跑的是 dex,jvm 跑的是 class, java 代码是先编译成 class,然后再转换成 dex.
  • ikas 27天前
    引用 12
    置于兼容,他根本不需要符合 jvm,同样也不需要去完整兼容,事实也是,他现在 java8 兼容完整了吗?
  • chenyu8674 27天前
    引用 13
    java 程序员随便学两下就可以去写 Android,算不算另一种形式的“兼容”
  • 游客
    14
返回