android SDK 的 Java 版本支持 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
kujio

android SDK 的 Java 版本支持

  •  
  •   kujio Dec 7, 2021 14279 views
    This topic created in 1601 days ago, the information mentioned may be changed or developed.

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

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

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

    22 replies    2021-12-10 17:59:39 +08:00
    xmt328
        1
    xmt328  
       Dec 7, 2021
    安卓的运行时与电脑上的 JVM 是不一样的
    高级语法编译后安卓设备是不支持的
    但是构建过程中有一步是脱糖
    所以你的 java15 代码最终是等价替换为低版本的字节码去运行的
    Cbdy
        2
    Cbdy  
       Dec 7, 2021 via Android
    安卓不是 Java
    AoEiuV020CN
        3
    AoEiuV020CN  
       Dec 7, 2021
    官方只有一句话带过,直接说 AGP 4.0.0 以后支持了语法脱糖和部分 api 脱糖,
    看这意思像是支持所有新语法糖以及部分 java8 的 api ,文本块算是语法糖,就被脱糖了,
    kujio
        4
    kujio  
    OP
       Dec 7, 2021
    @xmt328 有没有详细的文档教程啥的?
    kujio
        5
    kujio  
    OP
       Dec 7, 2021
    @AoEiuV020CN 这个我也查到了,以为只是支持 java8 的语法糖 api
    crayygy
        6
    crayygy  
       Dec 7, 2021
    直接用 Kotlin ?
    hingbong
        8
    hingbong  
       Dec 7, 2021
    文本块编译成字节码能和别的字符串有区别?
    kujio
        9
    kujio  
    OP
       Dec 7, 2021
    @guyuesh2 这个只说了 java8 脱糖,更高的 java 版本具体的支持情况也没说
    kujio
        10
    kujio  
    OP
       Dec 7, 2021
    @hingbong 没区别就是语法糖,但是我想知道 Android SDK 的 JAva 版本支持的具体情况.
    如果从 java8 到 java17 更新的全都是语法糖并且都能被 Gradle 脱糖,那就可以得出结论:支持 java8 到目前最新版本.
    但显然并不是.
    kujio
        11
    kujio  
    OP
       Dec 7, 2021
    @crayygy 屎山加 kotlin 就更麻烦了,
    ikas
        12
    ikas  
       Dec 7, 2021   1
    安卓使用 d8 来编译,脱糖..
    其早在多年就支持到高版本 java,官方直到今年才正式加入 java11 支持....
    为啥那么慢...当然是推广 kotlin 了
    jakewharton.com/androids-java-9-10-11-and-12-support/
    kujio
        13
    kujio  
    OP
       Dec 7, 2021
    @ikas 啊这个回答到点了,赞一个
    AoEiuV020CN
        14
    AoEiuV020CN  
       Dec 7, 2021
    @ikas #12 这个过时了,20 年的 AGP 4.0.0 之前和之后的脱糖是完全两码事,这文章都 18 年了,最新目前看来就是支持所有语法糖,有任何问题可以直接当 bug 反馈,
    ikas
        15
    ikas  
       Dec 7, 2021
    @AoEiuV020CN d8 还过时吗???? 建议多看看把....
    AoEiuV020CN
        16
    AoEiuV020CN  
       Dec 7, 2021 via Android
    @ikas 不是 d8 过时,是文章过时,
    ikas
        17
    ikas  
       Dec 7, 2021
    好吧...文章只是用来说明 d8 对 java 的支持情况.....管中窥豹..同样对于更高 java 的语法..道理也是一样的
    ikas
        18
    ikas  
       Dec 7, 2021
    @AoEiuV020CN 另外..即便是 AGP 4.0.0 或者更高..他也是脱糖+插入支持库...因为本质安卓的虚拟机并没支持更高,这与 java 是不同的
    pursuer
        19
    pursuer  
       Dec 7, 2021
    建议使用 kotlin ,语法糖可以脱糖,但 API 不会,有时候低版本 android 上调用了高版本 API 程序直接挂了,还会碰到像这样的坑 t/717605#reply6 。如果要覆盖较广范围的 android 版本,我觉得还是不用原生最好,原生只写一些胶水。android 的 jvm 运行环境比较坑
    mxalbert1996
        20
    mxalbert1996  
       Dec 7, 2021 via Android
    402159806
        21
    402159806  
       Dec 9, 2021
    gradle 里改好版本直接用,只是会提示你需要 api 24 ,如果最低版本就是 24 那没问题,脱糖也只是把 1.8 的部分新语法脱糖了,其他的还是需要 api 24
    yukiww233
        22
    yukiww233  
       Dec 10, 2021
    大部分语法脱应该能用, 支持的 api 得看官方的列表
    https://developer.android.com/studio/write/java8-support-table
    About     Help     Advertise     Blog     API     FAQ     Solana     1051 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 55ms UTC 23:11 PVG 07:11 LAX 16:11 JFK 19:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86