我们编写java代码都是.java格式的,但是jvm并不能识别.java文件,它只能加载、执行.class文件, 所以我们要通过javac命令将.java文件编译成.class文件,然后通过java命令运行.class文件
dalvik的执行dalvik与jvm差不多,区别就是dalvik只能加载、运行.dex文件(至于如何识别、运行,后面会讲到)。我们的Android程序也 是用java编写的,生成的也是.java文件,所以需要把.java文件转换成.dex文件,dalvik才能执行。IDE编译、打包的过程, 就是将.java文件转换成.dex文件的过程,我们可以简单看一下编译过程
一个APP的目录结构
各文件的作用
下面是官方介绍的打包流程图:
总结一下,主要就是这几步:
1、根据res目录下的资源文件、AndroidManifest.xml生成R.java文件;
2、处理.aidl文件,生成对应的java文件,如果没有aidl,则跳过;
3、将前两步生成的java文件和src目录下源码一起编译成class文件;
4、通过dex将class文件生成成dex文件;
5、将资源文件和dex文件一起打包,生成初始apk;
6、对初始apk签名 ;
最后概括就是classes.dex文件就是我改APP的所有源代码的dex可执行文件
APP的安装过程apk的安装过程,就是把apk解压成第4步中的dex文件和原始资源文件(比如图片),运行过程就是dalvik加载、运行dex文件 的过程。这里有两个过程,一个是加载,一个是运行
Dex文件的生成过程通过命令“javac HelloWorld.java”可以生成HelloWorld.class文件。
再通过命令“dx –dex –output=HelloWorld.dex HelloWorld.class”就会生成HelloWorld.dex文件了。
dex文件的加载是通过DexClassLoader、PathClassLoader等类来完成的



