Dalvik虚拟机的许多设计是考虑到与JVM的兼容性的,采用了基于寄存器的架构,指令码采用二地址和三地址混合形式,目标机器架构明确,主要是针对ARM处理器的支持,ARM9有16个32位通用寄存器而Dalvik虚拟机也是用16个虚拟寄存器,因此它也不需要考虑很多可移植性的问题,优先考虑在ARM9上以高效的方法的实现,这个战略和微软的技术战略是非常象的。看以下代码publicclassDemo{publicstaticvoidfoo() {inta = 1;intb = 2;intc = (a + b) * 5;}}经过javac的编译后,可以看到Demo.class的foo()的代码是0iconst_11istore_0 [a]2iconst_23istore_1 [b]4iload_0 [a]5iload_1 [b]6iadd7iconst_58imul9istore_2 [c]10return接着使用Android SDK的tools目录里头的工具dx工具,这里是SDK的tools不是根目录的tools文件件,这个DX工具可以是Android 1.5/1.6/2.1的,使用DX工具来讲Demo.Class转化为dex格式,转换的时候可以直接以文本的形式dump出dex的内容,使用下面的命令:dx –dex –verbose –dump-to=Demo.dex.txt –dump-method=Demo.foo –verbose-dump Demo.class可以看到foo()的字节码是:0000: const/4v0, #int1// #10001: const/4v1, #int2// #20002: add-int/2addr v0, v10003: mul-int/lit8 v0, v0, #int5// #050005: return-void另外Dalvik的.dex问价在未压缩的状态下的体积通常比同等内容的.jar问价在deflate压缩后还要小,但是光从字节码来看,java的字节码总是要比dex的小,这主要是.dex使用了共享的常量池,使得相同的字符串数字常量只会出现一次有效的压缩了文件的大小,不过在JSR200也提到了这样的压缩方法。回到五彩斑斓的Android架构图上,剩下的两层都是纯蓝色的,一层是Application Framework,一层是Applications。我们经常说的使用Eclipse结合ADT开发的是Applications层,它的开发模式和众多的功能是由Application Framework来支持的,我猜想应该这两层就是Android的MMI了吧,这两层都是纯JAVA来开发的,这两层的资料相当的多。应该赞叹一下这个框架,因为这个框架下的人机交互相当的友好,看起来让人赏心悦目,虽然很多公司都在做手机的MMI,能做得如此人性化的真的很少,而且还无私的开源。另外值得一提的是,这个框架的源代码是开源的,但是要通过Git和repo来获得,repo必须在linux环境执行因为repo是个shell文件,至于Git有Windows版本的,但是在公司我下载了很久都无法连接上,不知道是不是由于公司的网络管制比较严格的缘故,说起网络的问题,Android模拟器的上网我也迟迟没有弄成功,使用了网上说的三种方法都不成功,加上平时使用的经验发现,除了IE好像其他程序都无法连到外网。使用网上下载的源码包可以在开发程序的时候看到框架的源代码,但是网上的源码只更新到2.0版本,一直传闻Google没有对2.1进行开源。从网上下载的代码也不过只有20来兆大小,但是这20多兆的代码没有办法在Eclipse里头编译,只能在linux下编译,听说编译的临时文件非常大。由于没有办法拿到源码和参与预编译的文件,我也无法验证这一说法的真伪。因为在Windows里头搭建编译环境也不是没可能的,已经有高人,使用Windows的环境模拟linux的来编译了Android的模拟器,这个模拟器的最新代码无法获得,只能获得之前的一个旧版本,我拿回来之后,按照高人的方法去编译果然出现高人说的一些问题,但是高人把编译好的模拟器截图,并说明要最新的代码。最后说说这个开发模式,因为这是纯java的MMI,这个时候的Java就可以大显身手,没有J2ME的局限,也没有沙箱,这给了Java很大的空间。由于本人之前开发过较长时间的WEB程序,发现了很多很熟悉的地方,使用XML来布局可以类比JSP里头的Html布局,使用AndroidManifest.xml来做配置文件,就像J2EE里头的web.xml一样规定着什么可以运行,如何去运行,还有一个自动生成的管理资源的R文件就像ASP.net里头自动生成的代码,呈现和业务的分开,另外使用了SQLite,就如同在web开发的数据库开发一样,和web开发不同的是Android的应用开发有独特的Service组件和Intent的消息传递。这样的开发模式的好处在于每个程序都有相当大的独立性,而且程序之间是非常平等的,这个很重要,在J2ME里头,java程序和其他程序可不是平等的,如果你愿意,你可重写Android的每一个应用程序,包括拨号,短信息,联系人等等,也给了开发人员相当大的自由度。另外,Android的java开发使用了很多Java5的新特性,也大大的加速了java程序的开发。