共计 1021 个字符,预计需要花费 3 分钟才能阅读完成。
download:Vue3+Nuxt3 打造 SSR 网站利用,0 到 1 实现服务端渲染无密
基础知识
本章不会介绍 java 语言自身,置信大家对此已有足够相熟。绝对的,会从工程利用角度,解说几个有意思的技术点。
1.1 由源码到 apk
源代码是如何经验多重解决,最终出现在 apk 中,理解这个过程,有助于咱们认清 java 代码腐化的一些起因。从 apk 构建视角 来看,java(kotlin)
代码残缺处理过程如下:
上述流程中,无论是 java 还是 kotlin 代码,都会首先编译为jvm 字节码。这里须要留神,app/ 子工程中的local jar、flat aar
,以及通过内部依赖形式引入的 j ar、aar,都是间接蕴含编译好的 jvm 字节码,这会带来如下优劣势:
- 【劣势】无需再进行由源码到字节码的编译,在代码完全相同状况下,工程的模块化(jar/aar)水平越高,越可能缩短整体 apk 构建耗时;
- 【劣势】提前编译好的 jvm 字节码,不会再进行源码编译期各项查看,容易呈现代码间援用关系不匹配状况,具体后文「不兼容援用」局部会详述。
- 此外,对于 jvm 和 Dalvik 字节码,一个最外围的区别是:前者的指令,基于栈,后者基于寄存器。基于寄存器的劣势,次要是运行时指令执行性能的晋升。此外,jvm 字节码,每个类位于独立.class 文件,而 dalvik 字节码,所有类均位于同一(几)个 dex 文件,可能更好的复用代码数据,因而存储占用更低。
1.2 应用 java8
java8 是一个比拟有代表性的 java 语言版本,在 Android 中应用 java8,这个话题自身会比较复杂。首先,从 java8 新内容来看,次要分为新语言个性和新 API;其次,从编码到运行的整个链路来看,波及编译工具链、设施预装 jdk、设施vm(Dalvik/Art
)三个局部的反对;此外,Android 自身应用的 jdk 并不是规范的oracle jdk 或openjdk,而是进行了一些定制后的子集。
java8 新语言特 性,有一些波及到新的 jvm 指令集,这些须要运行时 vm 可能反对。否则,就须要在编译工具链中,可能应用兼容的指令集来替换这些新指令集的性能,这个过程就是大家相熟的“脱糖”,AndroidGradlePlugin3.0 及以上版本,曾经对此实现了较好的反对。因为 Android 零碎中 Art 虚拟机,直到 8.0 版本,才齐全实现对 java8 新指令集的反对,因而当 apk 构建的 minSdkVersion
设置为 26(8.0)以下时,会触发脱糖解决