分类: LINUX
2011-09-16 14:38:34
Android Runtime
Android includes a set of core libraries that provides most of the functionality available in the core libraries of the Java programming language. Every Android application runs in its own process, with its own instance of the Dalvik virtual machine. Dalvik has been written so that a device can run multiple VMs efficiently. The Dalvik VM executes files in the Dalvik Executable (.dex) format which is optimized for minimal memory footprint. The VM is register-based, and runs classes compiled by a Java language compiler that have been transformed into the .dex format by the included "dx" tool. The Dalvik VM relies on the Linux kernel for underlying functionality such as threading and low-level memory management. Eclipse工具集 Eclipse中window - show window - android 下有许多很好用的工具窗口: Emulator control 可以向Emulator发起电话,发短信等。 Android专有驱动 Android添加了许多驱动,他们一般不操作实际的硬件,只是辅助系统的运行。 主要的Android专有驱动如下: Ashmem(Anonymous Shared Memory):匿名共享内存驱动,为Android系统提供了内存分配功能,实现类似malloc的功能。 Android源代码结构 源代码的工程分为3部分: (1)核心工程:建立Android系统的基础。 包含以下目录: (2)扩展工程:使用其他开源项目扩展的功能,在external文件夹中。 (3)包(package):提供Android的应用程序和服务,在package文件夹中。 Android的源码目录如下: 编译方法: android系统根目录下有一个Makefile,直接执行make即可。make过程将递归找到各个目录中的Android.mk文件进行编译。 Android的kernel需要单独配置和编译,编译过程和通常的linux内核相同。 编译结果都在根目录下的out目录中。结果包含以下内容:(1)主机工具(2)目标机程序(3)目标机映像文件(4)目标机Linux内核(需要单独编译) 单模块编译 mm命令用来在Android源码中编译单个模块 文件系统 编译android源码之后,在out/target/product/generic一些文件:ramdisk.img、system.img、userdata.img、 system、 data、root 其中root、system、data三个目录分别是目标根文件系统、主文件系统和数据文件系统的目录。 ramdisk.img 根文件系统映像
/out/target/product/generic/root包括以下目录: data、dev、proc、sbin、sys、system、init/init.rc等。 主文件系统: /out/target/product/generic/system包括以下目录:app、bin、etc、fonts、framework、lib、usr、xbin => ramdisk.img is gziped archive. ramdisk.img is a small partition image that is mounted read-only by the kernel at boot time. It only contains /init and a few config files. It is used to start init which will mount the rest of the system images properly and run the init procedure. A Ramdisk is a standard Linux feature. It is made just for the Android and do special things to start up the Android system. obj 是中间目标文件目录,其下面的APPS是java应用程序包的目录,EXECUTABLES 是可执行程序的目录,SHARED_LIBRARIES STATIC_LIBRARIEs分别是动态库和静态库的目录。 编译出来的应用程序就是放在system/app下的;用户安装的程序则是放在data/app下。 Android系统进程 Android几个重要的系统进程为/init、/system/bin/servicemanager、/system/bin/mediaserver、zygote及system_server。 (1)servicemanager是Binder的服务管理守护进程,也是Binder机制的核心,所有Binder服务都会通过它进行注册,客户端再通过它获取服务接口。 多媒体服务进程 MediaServer 多媒体服务的守护进程路径是frameworks/base/media/mediaserver,只有一个源文件main_mediaserver.cpp将被编译成一个可执行程序mediaserver,负责多媒体、照相机、音频三项服务。 在Android的init.rc中具有如下定义: Modem与RIL 实现电话功能的主要硬件是通信模块(modem),modem通过与通信网络进行沟通,传输语音及数据,完成呼叫、短信等相关电话功能。 modem硬件上一般提供两个通道:一个用于AT命令,另一个用于数据传输。也有的并不区分,只提供了一个通道,这就需要实现MUX(多路复用)协议, 复杂的AT相关处理一般不放在Modem驱动层,而是通过其上的RIL层完成。RIL负责AT命令的发送及响应解析,这是电话服务的实现基础,另外,RIL还负责数据的可靠传输。 权限相关 apk应用是有权限上线的,也就是说有一些权限apk应用无论如何也获取不到,即使该apk属于root账号。 另外,system/app下的应用程序的权限高于adb install安装的应用程序。 adb install安装的apk程序是安装到了/data/app目录下,adb并没有一个有效的卸载的命令(adb uninstall貌似无效),如果要卸载的话可手动到/data/app目录下删掉(rm)对应的应用。 |