![](https://csdnimg.cn/release/download_crawler_static/87993003/bg7.jpg)
个安装程序文件,格式为 apk。 APK 文件其实是 zip 格式,但后缀名被修改为 apk,通过
UnZip 解压后,可以看到 Dex 文件,Dex 是 Dalvik VM executes 的全称,即 Android Dalvik
执行程序,并非 Java ME 的字节码而是 Dalvik 字节码。
APK 文件结构
一个 APK 文件结构为:
1. META-INF\ (注:Jar 文件中常可以看到);
2. res\ (注:存放资源文件的目录) ;
3. AndroidManifest.xml (注:程序全局配置文件) ;
4. classes.dex (注:Dalvik 字节码);
5. resources.arsc (注:编译后的二进制资源文件)。
总结下我们发现 Android 在运行一个程序时首先需要 UnZip,然后类似 Symbian 那样
直接执行安装,和 Windows Mobile 中的 PE 文件有区别,这样做对于程序的保密性和可靠
性不是很高,通过 dexdump 命令可以反编译,但这样做符合发展规律,微软的 Windows
Gadgets 或者说 WPF 也采用了这种构架方式。
在 Android 平台中 dalvik vm 的执行文件被打包为 apk 格式,最终运行时加载器会解
压然后获取编译后 androidmanifest.xml 文件中的 permission 分支相关的安全访问,但
仍然存在很多安全限制,如果你将 apk 文件传到/system/app 文件夹下会发现执行是不受
限制的。
最终我们平时安装的文件可能不是这个文件夹,而在 android rom 中系统的 apk 文件
默认会放入这个文件夹,它们拥有着 root 权限。
2.1.3. 硬件抽像层
Android 的 HAL(硬件抽像层)是能以封闭源码形式提供硬件驱动模块。HAL 的目的是
为了把 Android framework 与 Linux kernel 隔开,让 Android 不至过度依赖 Linux kernel,
以达成 Kernel independent 的概念,也让 Android framework 的开发能在不考量驱动程序
实现的前提下进行发展。
HAL stub 是一种代理人(Proxy)的概念,Stub 是以 *.so 档的形式存在。Stub 向
HAL“提供”操作函数(Operations),并由 Android runtime 向 HAL 取得 Stub 的
Operations,再 Callback 这些操作函数。HAL 里包含了许多的 Stub(代理人)。Runtime
只要说明“类型”,即 Module ID,就可以取得操作函数。