对于Android DEX文件详细说明

移动开发 Android
使用Android打包工具(aapt)将DEX文件,资源文件以及AndroidManifest.xml文件(二进制格式)组合成一个应用程序包(APK)。

对于Android DEX文件进行优化,需要注意的一点是DEX文件的结构是紧凑的,但是我们还是要想方设法的进行提高程序的运行速度,我们就仍然需要对DEX文件进行进一步优化。

调整所有字段的字节序(LITTLE_ENDIAN)和对齐结构中的没一个域 验证DEX文件中的所有类 对一些特定的类进行优化,对方法里的操作码进行优化 。优化后的文件大小会有所增加,应该是原Android DEX文件的1-4倍。 优化发生的时机有两个:对于预置应用,可以在系统编译后,生成优化文件,以ODEX结尾。

这样在发布时除APK文件(不包含DEX)以外,还有一个相应的Android DEX文件;对于非预置应用,包含在APK文件里的DEX文件会在运行时被优化,优化后的文件将被保存在缓存中。

[[8645]]

每一个Android应用都运行在一个Dalvik虚拟机实例里,而每一个虚拟机实例都是一个独立的进程空间。虚拟机的线程机制,内存分配和管理,Mutex等等都是依赖底层操作系统而实现的。

所有Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制。 
不同的应用在不同的进程空间里运行,加之对不同来源的应用都使用不同的Linux用户来运行,可以最大程度的保护应用的安全和独立运行。

Zygote是一个虚拟机进程,同时也是一个虚拟机实例的孵化器,每当系统要求执行一个 Android应用程序,Zygote就会FORK出一个子进程来执行该应用程序。这样做的好处显而易见:Zygote进程是在系统启动时产生的,它会完成虚拟机的初始化,库的加载,预置类库的加载和初始化等等操作,而在系统需要一个新的虚拟机实例时。

Zygote通过复制自身,最快速的提供个系统。另外,对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块内存区域,大大节省了内存开销。Android应用开发和Dalvik虚拟机Android应用所使用的编程语言是Java语言,和Java SE一样,编译时使用Sun JDK将Java源程序编程成标准的Java字节码文件(.class文件)。

而后通过工具软件DX把所有的字节码文件转成Android DEX文件(classes.dex)。最后使用Android打包工具(aapt)将DEX文件,资源文件以及AndroidManifest.xml文件(二进制格式)组合成一个应用程序包(APK)。应用程序包可以被发布到手机上运行。

【编辑推荐】

  1. Android应用程序组建原理深入剖析 
  2. Android SMS短信服务相关概念简述 
  3. Android数据库相关代码解读 
  4. Android安装卸载程序具体操作方法解析 
  5. Android应用程序的四个关键点 
责任编辑:chenqingxiang 来源: 清华大学出版社
相关推荐

2009-12-14 10:19:23

.NET Framew

2010-07-21 13:17:52

Perl文件读写

2010-02-04 14:41:52

Android菜单类型

2010-01-04 10:39:33

ADO.NET描述

2010-10-13 14:28:09

mysql日志文件

2010-03-03 18:17:01

Android手机服务

2010-02-06 15:53:55

2010-02-06 17:43:51

Android应用

2010-03-05 14:16:38

Android设计平台

2010-02-04 15:20:50

Android SDK

2009-12-10 14:17:51

VS2008专业版

2010-01-08 10:34:49

JavaScript解

2010-02-05 18:09:12

Android

2010-03-03 17:11:08

2010-02-05 17:04:31

Android版本

2010-03-05 15:58:11

操作系统Android

2010-02-05 17:34:37

Android 2.1

2010-03-05 13:54:09

2010-02-06 16:57:43

Android操作系统

2009-12-28 09:26:09

ADO对象
点赞
收藏

51CTO技术栈公众号