热修复-从java文件到生成apk你需要知道的全过程

一、从java文件到class文件

1.class文件

class文件就是一种文件格式,被JVM识别。如下图
java、scala、python等语言都可以编译生成class文件,让jvm识别

image.png

2.如何编译

编译器就是.java文件转换成编译成.class字节码的。或者使用javac命令也可以转换。

//.java文件
public class Hello
{
    public static void main(String[] args)
    {
        System.out.println("hello ybdesire");
    }
}

使用javac命令(JDK的路径中),可以将.java文件转换为.class文件。

E:\java_to_dex>javac Hello.java
E:\java_to_dex>java Hello
hello ybdesire

二、从class文件到dex文件

1.什么是dex文件

在明白什么是 Dex 文件之前,要先了解一下 JVM,Dalvik 和 ART。JVM 是 JAVA 虚拟机,用来运行 JAVA 字节码程序。Dalvik 是 Google 设计的用于 Android平台的运行时环境,适合移动环境下内存和处理器速度有限的系统。ART 即 Android Runtime,是 Google 为了替换 Dalvik 设计的新 Android 运行时环境,在Android 4.4推出。ART 比 Dalvik 的性能更好。Android 程序一般使用 Java 语言开发,但是 Dalvik 虚拟机并不支持直接执行 JAVA 字节码,所以会对编译生成的 .class 文件进行翻译、重构、解释、压缩等处理,这个处理过程是由 dx 进行处理,处理完成后生成的产物会以 .dex 结尾,称为 Dex 文件。Dex 文件格式是专为 Dalvik 设计的一种压缩格式。所以可以简单的理解为:Dex 文件是很多 .class 文件处理后的产物,最终可以在 Android 运行时环境执行。

2.Davil和ART的比较

2.1)Dalvik

Dalvik虚拟机,是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为.dex(即“Dalvik Executable”)格式的Java应用程序的运行。.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。
大多数虚拟机包括JVM都是一种堆栈机器,而Dalvik虚拟机则是寄存器机。两种架构各有优劣,一般而言,基于堆栈的机器需要更多指令,而基于寄存器的机器指令更长。
Dalvik虚拟机早期并没有使用即时编译(JIT)技术。从Android 2.2开始, Dalvik虚拟机也支持

2.2)ART

是一种在Android操作系统上的运行环境,ART能够在第一次安装的时候,把应用程序的字节码转换为机器码。采用了预编译(AOT,Ahead-Of-Time)技术。

2.3)区别

在Dalvik虚拟环境下,程序的每次运行都会将dex字节码转换为机器码(JIT技术)。这样虽然会降低应用的安装时间(字节码比机器码要小),但是会导致应用的启动时间变慢。

在ART环境下,应用在第一次安装的时候,字节码就会预编译(AOT)成机器码,这样的话,虽然设备和应用的首次启动(安装慢了)会变慢,但是以后每次启动执行的时候,都可以直接运行,因此运行效率会提高。

3.dex 文件是怎么生成的?

java 代码转化为 dex 文件的流程如图所示,当然真的处理流程不会这么简单,这里只是一个形象的显示


image.png

要将.class文件转换为.dex文件,必须要用dx工具。dx一般位于Android SDK的build-tools中。所以需要把dx工具的路径,添加到Windows系统的环境变量中,本文的build-tools路径为C:\Users\xxx\AppData\Local\Android\Sdk\build-tools\28.0.3。

做了如上配置后,使用如下的dx命令,可以将.class文件转换为.dex文件

E:\java_to_dex>dx --dex --output=Hello.dex Hello.class

4.dex文件结构

Dex 文件整体布局如下图所示


image.png

三、class文件和dex文件比较

本质上他们都是一样的,dex是从class文件演变而来的
class文件存在许多有余信息, dex会去除有余,并合并
dex的优点是 一个dex文件就存储了所有的.class文件,更加的适合移动端

image.png

四、apk打包流程

详情见
https://www.cnblogs.com/xunbu7/p/7345912.html

你可能感兴趣的:(热修复-从java文件到生成apk你需要知道的全过程)