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