安卓 d8 字节码翻译器很早就支持了 java11+大部分的语法,个人已经用了半年多,无任何问题
//1 切换到 11 JavaVersion.VERSION_11
//2 加入 sdk 路径 compileOnly files("sdk ... android.jar")
1
ikas OP //3
如果你用到了 viewBinding,还需要解决下 as ide 的一些问题 apply plugin: 'idea' idea { module { sourceDirs += file("${module.project.buildDir}/generated/data_binding_base_class_source_out/debug/out") } } |
2
ikas OP //2. 第二个可以这样
compileOnly files("${android.sdkDirectory.path}/platforms/${android.compileSdkVersion}/android.jar") |
3
AoEiuV020 2021-06-23 13:12:57 +08:00
公司项目安卓插件版本还是 3.4.1,估计用不了这些新功能,
|
4
Smash 2021-06-23 13:25:21 +08:00
还不如直接 kotlin,省事儿。
|
5
pipilu 2021-06-23 13:27:03 +08:00
java 11 有啥特别好用的语法,商业上还不太敢升级
|
6
loshine1992 2021-06-23 13:38:14 +08:00
Kotlin 就可以了
|
7
ikas OP @pipilu
安卓端能用到的其实不多,但是只一个 var 就可以大量简化代码了.实际后端我们都用了好几年的 java11+了 |
8
ikas OP |
9
zongren 2021-06-23 15:53:01 +08:00
兼容 android 版本多少?
|
10
qwerthhusn 2021-06-23 15:58:06 +08:00
@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 其他的从写代码的角度,我没感觉到有太多改进。。。 |
11
ikas OP @qwerthhusn 是的,主要是 java 本身到了 16 变化的也不太多.另外安卓这边对高版本的兼容也不够.目前使用这种 hack 方式,只能到 11,其实 d8,可以支持 11 12 的一些.不过 d8 脱糖后,基本跟 j8 没有区别,这个跟 java 本身不一样
List.of 这一类的还比较恶心,安卓需要高版本才行 |
12
ikas OP @zongren 理论只要 D8 脱糖支持,与安卓版本没有太大关系,如果非要说关系,安卓不同的版本对 jdk11 中的 api 支持是不同的,低版本可能没有对应的 api
|
13
passerbytiny 2021-06-23 18:09:25 +08:00 via Android
Java8 以上的版本,跟 8 相比,基本上没有语法差异。事实上整个 API 从 9 以后就基本没再变过,而 9 又只是完成 8 的 TODO 。
别看它更新那么欢,但它只敢更行性能相关的底层代码。 |
14
ikas OP @passerbytiny 怎么说呢.var 推断,switch 模式匹配 /解构,"""字符串,instanceof 解构这些都是实打实的语法变化了吧
至于 api,那就更多了 |
15
xuhengjs 2021-06-23 20:39:40 +08:00
instanceof 是 jdk14
|
16
douglarek 2021-06-23 20:43:04 +08:00 via Android
kotlin 都原生支持了不比 Java 11 用着爽吗
|
17
cubecube 2021-06-23 20:45:09 +08:00
NPE 的错误提示还是不错的。
instanceof 能少些一些转换 switch 真的不错 |
18
passerbytiny 2021-06-24 11:48:36 +08:00 via Android
@ikas
var 是 8 的 TODO,它更是之前就被 lombok 采用。 模式匹配,是 14 引入 16 (今年 3 月)才正式化的。6 年了才敢加一个类 lombok 的语法。 目前的 JCP,集中与 Oracle 的主要开发者一言堂但却不是最终用户,几大开源社区和 IBM 无为而制,谷歌基本已经算分裂势力。这样的 JCP,很难出现会导致兼容性问题的 API 大动。 |
20
ikas OP @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 是看好的... |
21
a719031256 2021-06-24 13:54:14 +08:00
要是我的队友敢用 var 这种东西,我一定打死这丫的
以前写 js 就够折腾的了,现在又想把 java 变成 js |
22
122006 2021-06-24 19:19:28 +08:00
|