V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ikas
V2EX  ›  Android

使用 java11 语法来开发安卓

  •  
  •   ikas · 121 天前 · 3109 次点击
    这是一个创建于 121 天前的主题,其中的信息可能已经有所发展或是发生改变。

    安卓 d8 字节码翻译器很早就支持了 java11+大部分的语法,个人已经用了半年多,无任何问题

    //1 切换到 11 JavaVersion.VERSION_11

    //2 加入 sdk 路径 compileOnly files("sdk ... android.jar")

    第 1 条附言  ·  121 天前
    其实主要就是可以使用类型推断 var,这样可以减少不少啰嗦的代码,看起来更舒服些
    第 2 条附言  ·  121 天前
    关于 D8 支持多少 java8+的语法,可以参考 jakewharton 的博文
    jakewharton.com/androids-java-9-10-11-and-12-support/
    22 条回复    2021-06-24 19:19:28 +08:00
    ikas
        1
    ikas   121 天前
    //3
    如果你用到了 viewBinding,还需要解决下 as ide 的一些问题
    apply plugin: 'idea'
    idea {
    module {
    sourceDirs += file("${module.project.buildDir}/generated/data_binding_base_class_source_out/debug/out")
    }
    }
    ikas
        2
    ikas   121 天前
    //2. 第二个可以这样
    compileOnly files("${android.sdkDirectory.path}/platforms/${android.compileSdkVersion}/android.jar")
    AoEiuV020
        3
    AoEiuV020   121 天前
    公司项目安卓插件版本还是 3.4.1,估计用不了这些新功能,
    Smash
        4
    Smash   121 天前
    还不如直接 kotlin,省事儿。
    pipilu
        5
    pipilu   121 天前
    java 11 有啥特别好用的语法,商业上还不太敢升级
    loshine1992
        6
    loshine1992   121 天前
    Kotlin 就可以了
    ikas
        7
    ikas   121 天前
    @pipilu
    安卓端能用到的其实不多,但是只一个 var 就可以大量简化代码了.实际后端我们都用了好几年的 java11+了
    ikas
        8
    ikas   121 天前
    @Smash
    @loshine1992
    多一种选择只是...毕竟不是所有项目都会直接转到 Kotlin ,也不是所有人都喜欢 Kotlin ...
    zongren
        9
    zongren   121 天前
    兼容 android 版本多少?
    qwerthhusn
        10
    qwerthhusn   121 天前
    @pipilu
    List.of(1, 2, 3) Set 也是一样
    Map.of(1, "a", 2, "b")
    Map.ofEntries(Map.entry(1, "a"), Map.entry(2, "b"))
    我就知道个快速构建不可变集合,可以取代 Guava 的 ImmutableXXX 系列

    String 加了一些实用方法,可以取代 commons-lang3 的 StringUtils 一些方法

    Files 类加了一些实用方法,比如一行代码读取文件的内容获取字符串,可以取代 commons-io 的 FileUtils 一些方法

    var 可以取代 lombok 的 var,不过个人不是很喜欢用 var

    其他的从写代码的角度,我没感觉到有太多改进。。。
    ikas
        11
    ikas   121 天前
    @qwerthhusn 是的,主要是 java 本身到了 16 变化的也不太多.另外安卓这边对高版本的兼容也不够.目前使用这种 hack 方式,只能到 11,其实 d8,可以支持 11 12 的一些.不过 d8 脱糖后,基本跟 j8 没有区别,这个跟 java 本身不一样
    List.of 这一类的还比较恶心,安卓需要高版本才行
    ikas
        12
    ikas   121 天前
    @zongren 理论只要 D8 脱糖支持,与安卓版本没有太大关系,如果非要说关系,安卓不同的版本对 jdk11 中的 api 支持是不同的,低版本可能没有对应的 api
    passerbytiny
        13
    passerbytiny   121 天前 via Android
    Java8 以上的版本,跟 8 相比,基本上没有语法差异。事实上整个 API 从 9 以后就基本没再变过,而 9 又只是完成 8 的 TODO 。

    别看它更新那么欢,但它只敢更行性能相关的底层代码。
    ikas
        14
    ikas   121 天前
    @passerbytiny 怎么说呢.var 推断,switch 模式匹配 /解构,"""字符串,instanceof 解构这些都是实打实的语法变化了吧
    至于 api,那就更多了
    xuhengjs
        15
    xuhengjs   121 天前
    instanceof 是 jdk14
    douglarek
        16
    douglarek   121 天前 via Android
    kotlin 都原生支持了不比 Java 11 用着爽吗
    cubecube
        17
    cubecube   121 天前
    NPE 的错误提示还是不错的。
    instanceof 能少些一些转换
    switch 真的不错
    passerbytiny
        18
    passerbytiny   120 天前 via Android
    @ikas
    var 是 8 的 TODO,它更是之前就被 lombok 采用。

    模式匹配,是 14 引入 16 (今年 3 月)才正式化的。6 年了才敢加一个类 lombok 的语法。

    目前的 JCP,集中与 Oracle 的主要开发者一言堂但却不是最终用户,几大开源社区和 IBM 无为而制,谷歌基本已经算分裂势力。这样的 JCP,很难出现会导致兼容性问题的 API 大动。
    ikas
        20
    ikas   120 天前
    @passerbytiny
    var 本身只是类型推断的一种,java8 本身对类型的推断支持也足可以做到 var,但是涉及到语言语法,java 一向是保守的.

    说真的,如果不是 oracle 收购 java,那 java 更不会有今天的发展,参考 java9 各大社区 /公司的分歧导致延期那么久就可以看到.

    另外现在说到 api,其实最近几版的 jdk,已经加入了不少 api,比如 Vector API ,Memroy ApI,Foreign Linker API 等

    还有为了进一步提高 java 性能与支持基本类型的泛型 /统一类型,又加入了 JEP 401: Primitive Objects (Preview)与 Unify the Basic Primitives with Objects (Preview),这些反而变化又很大,甚至现在版本已经对一些用法加入了 warning

    然后为了追平其他语言的协程,现在已经可以下载测试使用的虚拟线程版本的 project loom

    个人对加入 oracle 的 java 是看好的...
    a719031256
        21
    a719031256   120 天前
    要是我的队友敢用 var 这种东西,我一定打死这丫的
    以前写 js 就够折腾的了,现在又想把 java 变成 js
    122006
        22
    122006   120 天前
    试试我做的类似的项目?
    https://github.com/122006/Zircon
    支持在 java/android 里使用完整的内插字符串功能
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1129 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:58 · PVG 02:58 · LAX 11:58 · JFK 14:58
    ♥ Do have faith in what you're doing.