android SDK 的 Java 版本支持

2021-12-07 13:54:47 +08:00
 kujio

想问下 android SDK 的 Java 版本支持,查了一下开发者指南好像目前只支持最高 java1.8. 但是我想用 java15,主要是因为 15 支持文本块,因为项目里有大量的 sql 语句,文本块更好看也更好改.

于是我把 sourceCompatibility 和 targetCompatibility 都改成 Java_15,发现竟然就 OK 了,编译运行也没问题,使用 15 语法也没问题,

有点懵逼,很好奇,Android SDK 的 Java 版本支持到底在哪里查,还是 Java 高版本可以向下兼容,有没有大佬帮我解答一下疑惑

6084 次点击
所在节点    Android
22 条回复
xmt328
2021-12-07 14:20:50 +08:00
安卓的运行时与电脑上的 JVM 是不一样的
高级语法编译后安卓设备是不支持的
但是构建过程中有一步是脱糖
所以你的 java15 代码最终是等价替换为低版本的字节码去运行的
Cbdy
2021-12-07 14:21:47 +08:00
安卓不是 Java
AoEiuV020CN
2021-12-07 14:31:44 +08:00
官方只有一句话带过,直接说 AGP 4.0.0 以后支持了语法脱糖和部分 api 脱糖,
看这意思像是支持所有新语法糖以及部分 java8 的 api ,文本块算是语法糖,就被脱糖了,
kujio
2021-12-07 15:43:08 +08:00
@xmt328 有没有详细的文档教程啥的?
kujio
2021-12-07 15:43:40 +08:00
@AoEiuV020CN 这个我也查到了,以为只是支持 java8 的语法糖 api
crayygy
2021-12-07 15:44:49 +08:00
直接用 Kotlin ?
guyuesh2
2021-12-07 16:06:03 +08:00
hingbong
2021-12-07 16:22:59 +08:00
文本块编译成字节码能和别的字符串有区别?
kujio
2021-12-07 16:26:20 +08:00
@guyuesh2 这个只说了 java8 脱糖,更高的 java 版本具体的支持情况也没说
kujio
2021-12-07 16:30:48 +08:00
@hingbong 没区别就是语法糖,但是我想知道 Android SDK 的 JAva 版本支持的具体情况.
如果从 java8 到 java17 更新的全都是语法糖并且都能被 Gradle 脱糖,那就可以得出结论:支持 java8 到目前最新版本.
但显然并不是.
kujio
2021-12-07 16:31:47 +08:00
@crayygy 屎山加 kotlin 就更麻烦了,
ikas
2021-12-07 16:40:59 +08:00
安卓使用 d8 来编译,脱糖..
其早在多年就支持到高版本 java,官方直到今年才正式加入 java11 支持....
为啥那么慢...当然是推广 kotlin 了
jakewharton.com/androids-java-9-10-11-and-12-support/
kujio
2021-12-07 17:04:37 +08:00
@ikas 啊这个回答到点了,赞一个
AoEiuV020CN
2021-12-07 18:33:27 +08:00
@ikas #12 这个过时了,20 年的 AGP 4.0.0 之前和之后的脱糖是完全两码事,这文章都 18 年了,最新目前看来就是支持所有语法糖,有任何问题可以直接当 bug 反馈,
ikas
2021-12-07 18:45:14 +08:00
@AoEiuV020CN d8 还过时吗???? 建议多看看把....
AoEiuV020CN
2021-12-07 18:47:56 +08:00
@ikas 不是 d8 过时,是文章过时,
ikas
2021-12-07 18:52:05 +08:00
好吧...文章只是用来说明 d8 对 java 的支持情况.....管中窥豹..同样对于更高 java 的语法..道理也是一样的
ikas
2021-12-07 18:54:01 +08:00
@AoEiuV020CN 另外..即便是 AGP 4.0.0 或者更高..他也是脱糖+插入支持库...因为本质安卓的虚拟机并没支持更高,这与 java 是不同的
pursuer
2021-12-07 19:01:49 +08:00
建议使用 kotlin ,语法糖可以脱糖,但 API 不会,有时候低版本 android 上调用了高版本 API 程序直接挂了,还会碰到像这样的坑 https://www.v2ex.com/t/717605#reply6 。如果要覆盖较广范围的 android 版本,我觉得还是不用原生最好,原生只写一些胶水。android 的 jvm 运行环境比较坑
mxalbert1996
2021-12-07 19:09:32 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/820597

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX