大家好,又见面了,我是你们的朋友全栈君。
Dex文件介绍
Android系统中,一个App的所有代码都在一个Dex文件里面。Dex是一个类似Jar的存储了多有Java编译字节码的归档文件。
为什么要使用dex文件来存储呢?
Java源码经过编译后,得到很多个class文件,考虑到手机的内存较小,google改进了字节码的组织形式,将一个app中的所有class文件合到了一起构成dex文件,当然并不是简单的拼接在一起,而是遵从dex的格式重新组织。
在dex中各个类能够共享数据,在一定程度上降低了冗余,同时也是文件结构更加紧凑,实验表明,dex文件是传统jar文件大小的50%左右。
dex文件最终会和资源文件等一起打包成为apk,签名后安装到手机上。
Java文件编译成Dex文件
Java文件编程成dex文件,要经历以下几个步骤:
- Java文件生成.class文件。
- .class文件生成dex文件。
1. Java文件生成.class文件
Java文件是Java的源文件。
.class文件是Java的字节码文件,它可以被JVM识别、加载和执行。
我们想要生成dex文件,第一步是要把Java文件编译成.class文件,也就是字节码文件。
生成.class文件的方式,Android和Java并无不同,都可以使用javac类生成:
// 打开命令行窗口,输入如下命令,即可将.java文件编译成.class文件
javac -source 1.7 -target 1.7 Demo.java
2. .class文件生成Dex文件
生成.class文件之后,就需要我们转换成dex文件了。
这一步是通过Android提供的工具包充的dx工具来实现的。
dx工具是Android源码的一部分,其路径是在out目录下,因此在执行dx之前,可以将该工具添加到PATH路径。
示例:
//进入dx所在目录,.class文件复制到该目录下,命令行执行命令:
dx --dex --output demo.dex Demo.class
dex文件的执行
打包成.apk文件,安装运行
通常情况下我们的dex文件会通过apkbuilder工具,将所有没有编译过的资源(eg: images)、编译过的资源和.dex文件打包到最终的.apk文件中去。
打包成.apk文件之后,会对Apk文件签名,apk文件只有被签名才能被安装在设备上。
另外,在生成最终apk之前,打包器会使用zipalign工具对应用进行优化,位于android-sdk/tools目录下。
最终,.apk文件将会运行在Android系统上。
dalvikvm工具
dalvikvm工具,可以直接运行.dex文件中的代码,而不必通过.apk的形式安装运行。
dalvikvm的作用就是创建一个虚拟机并执行指定参数中的java类。
我们用一个示例来看如何使用?
- dex文件生成,这里指定生成产物为demo.jar
dx --dex --output=demo.jar Demo.class
- 将demo.jar 通过adb push到/data/app目录,并使用dalvikvm工具来执行Demo类:
adb push demo.jar /data/app
adb shell
cd /data/app
dalvikvm -cp demo.jar Demo
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/153548.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...