想问下 android SDK 的 Java 版本支持,查了一下开发者指南好像目前只支持最高 java1.8. 但是我想用 java15,主要是因为 15 支持文本块,因为项目里有大量的 sql 语句,文本块更好看也更好改.
于是我把 sourceCompatibility 和 targetCompatibility 都改成 Java_15,发现竟然就 OK 了,编译运行也没问题,使用 15 语法也没问题,
有点懵逼,很好奇,Android SDK 的 Java 版本支持到底在哪里查,还是 Java 高版本可以向下兼容,有没有大佬帮我解答一下疑惑
1
xmt328 2021-12-07 14:20:50 +08:00
安卓的运行时与电脑上的 JVM 是不一样的
高级语法编译后安卓设备是不支持的 但是构建过程中有一步是脱糖 所以你的 java15 代码最终是等价替换为低版本的字节码去运行的 |
2
Cbdy 2021-12-07 14:21:47 +08:00 via Android
安卓不是 Java
|
3
AoEiuV020CN 2021-12-07 14:31:44 +08:00
官方只有一句话带过,直接说 AGP 4.0.0 以后支持了语法脱糖和部分 api 脱糖,
看这意思像是支持所有新语法糖以及部分 java8 的 api ,文本块算是语法糖,就被脱糖了, |
5
kujio OP @AoEiuV020CN 这个我也查到了,以为只是支持 java8 的语法糖 api
|
6
crayygy 2021-12-07 15:44:49 +08:00
直接用 Kotlin ?
|
7
guyuesh2 2021-12-07 16:06:03 +08:00
|
8
hingbong 2021-12-07 16:22:59 +08:00
文本块编译成字节码能和别的字符串有区别?
|
10
kujio OP @hingbong 没区别就是语法糖,但是我想知道 Android SDK 的 JAva 版本支持的具体情况.
如果从 java8 到 java17 更新的全都是语法糖并且都能被 Gradle 脱糖,那就可以得出结论:支持 java8 到目前最新版本. 但显然并不是. |
12
ikas 2021-12-07 16:40:59 +08:00 1
安卓使用 d8 来编译,脱糖..
其早在多年就支持到高版本 java,官方直到今年才正式加入 java11 支持.... 为啥那么慢...当然是推广 kotlin 了 jakewharton.com/androids-java-9-10-11-and-12-support/ |
14
AoEiuV020CN 2021-12-07 18:33:27 +08:00
@ikas #12 这个过时了,20 年的 AGP 4.0.0 之前和之后的脱糖是完全两码事,这文章都 18 年了,最新目前看来就是支持所有语法糖,有任何问题可以直接当 bug 反馈,
|
15
ikas 2021-12-07 18:45:14 +08:00
@AoEiuV020CN d8 还过时吗???? 建议多看看把....
|
16
AoEiuV020CN 2021-12-07 18:47:56 +08:00 via Android
@ikas 不是 d8 过时,是文章过时,
|
17
ikas 2021-12-07 18:52:05 +08:00
好吧...文章只是用来说明 d8 对 java 的支持情况.....管中窥豹..同样对于更高 java 的语法..道理也是一样的
|
18
ikas 2021-12-07 18:54:01 +08:00
@AoEiuV020CN 另外..即便是 AGP 4.0.0 或者更高..他也是脱糖+插入支持库...因为本质安卓的虚拟机并没支持更高,这与 java 是不同的
|
19
pursuer 2021-12-07 19:01:49 +08:00
建议使用 kotlin ,语法糖可以脱糖,但 API 不会,有时候低版本 android 上调用了高版本 API 程序直接挂了,还会碰到像这样的坑 https://www.v2ex.com/t/717605#reply6 。如果要覆盖较广范围的 android 版本,我觉得还是不用原生最好,原生只写一些胶水。android 的 jvm 运行环境比较坑
|
20
mxalbert1996 2021-12-07 19:09:32 +08:00 via Android
|
21
402159806 2021-12-09 10:22:50 +08:00
gradle 里改好版本直接用,只是会提示你需要 api 24 ,如果最低版本就是 24 那没问题,脱糖也只是把 1.8 的部分新语法脱糖了,其他的还是需要 api 24
|
22
yukiww233 2021-12-10 17:59:39 +08:00
大部分语法脱应该能用, 支持的 api 得看官方的列表
https://developer.android.com/studio/write/java8-support-table |