Android 小结
一、Android架构 ................................................................................................................. 1
二、Android的三种开发工作 ............................................................................................. 2
1、Android 应用程序开发 ............................................................... 3
2、Android系统开发的结构 ............................................................. 4
3、Android移植开发的结构 ............................................................. 5
3.1 硬件抽象层 ........................................................................ 6
3.2 Android 特有驱动 .............................................................. 7
三、Android的底层库 ........................................................................................................ 8
四、Binder机制 .................................................................................................................. 8
五、Android应用开发方式 ................................................................................................. 8
六、Android源码 ................................................................................................................. 9
1、Android 的核心工程 ................................................................................................. 9
2、Android 扩展工程 ................................................................................................... 10
3、Android 中的Java程序包 ..................................................................................... 10
附2.6.29 Android内核与标准Linux内核区别 ........................................................... 10
一、Android架构
分为四层:
? 应用程序层(java应用程序,用户空间)
? 应用程序框架层(java框架,用户空间)
? 系统运行库层(native c/c++框架及java运行环境,用户空间) ? Linux核心层(linux内核及驱动,内核空间)
?
二、Android的三种开发工作
? 应用开发
? 系统开发
? 移植开发
1、Android 应用程序开发
2、Android系统开发的结构
3、Android移植开发的结构
3.1 硬件抽象层
? Android的硬件抽象层是能以封闭源码形式提供硬件驱动模块。HAL的目的是为了把Android framework与Linux kernel隔开,让Android不至过度依赖Linux kernel,以达成kernel independent的概念,也让Android framework的开发能在不考量驱动程序实作的前提下进行发展。
? HAL stub是一种代理人的概念,stub是以*.so档的形式存在。Stub向HAL“提供”操作函数,并由Android runtime向HAL取得stub的operations,再callback这些操作函数。HAL里包含了许多的stub(代理人)。Runtime只要说明“类型”,即module ID,就可以取得操作函数。
引进HAL的原因:
Android的HAL是为了保护一些硬件提供商的知识产权而提出的,是为了避开
linux的GPL束缚。思路是把控制硬件的动作都放到了Android HAL中,而linux driver仅仅完成一些简单的数据交互作用,甚至把硬件寄存器空间直接映射到user space。而Android是基于Apache的license,因此硬件厂商可以只提供二进制代码,所以说Android只是一个开放的平台,并不是一个开源的平台。也许也正是因为Android不遵从GPL,所以Greg Kroah-Hartman才在2.6.33内核将Andorid驱动从linux中删除。GPL和硬件厂商目前还是有着无法弥合的裂痕。
3.2 Android 特有驱动
1) Ashmem 匿名共享内存驱动
2) Logger 轻量级的log驱动
3) Binder基于openBinder的驱动,为android平台提供IPC支持
4) Android power Management 电源管理模块
5) Low Memory killer 缺少内存时杀死进程
6) Android PMEM物理内存驱动。
三、Android的底层库 ? 标准c/c++库bionic
? C语言工具库libutils
? Init进程
? Shell工具
? C++工具库libutils
四、Binder机制
? Binder:由Binder服务器 Binder驱动 Binder客户端构成。 ? Android系统的重要进程:/init
/system/bin/mediaserver
? Zygote:由init进程启动,其又启动system_server和所有的android应
用程序。
? Zygote进程包含两个主要模块:
1、 Socket服务器端。用来接收启动新的Dalvik进程的命令。
2、 Framework共享类和资源。当新的Dalvik进程孵化出来后就不需要再
来装在framework的这些类和资源了。
/system/bin/servicemanager system_server zygote
五、Android应用开发方式
? 基于源码
? 基于SDK
六、Android源码 认识Android源代码结构
Android代码的工程分为3个部分:
? 核心工程(Core Project):建立Android 系统的基础,在根目录的各个文件夹中。
扩展工程(External Project):使用其他开源项目扩展的功能,在external 文件夹中。
包(Package):提供Android 的应用程序和服务,在package 文件夹中。 ? ?
1、Android 的核心工程
Android 的核心工程包含了对Android系统基本运行的支持,以及Android系统的编译系统,工程的内容如下表:
Android 的核心工程
除了上表列出的工程外,还有其他的工程,但大都是Android系统第2个层次的源代码。
2、Android 扩展工程
Android 的扩展工程包含在external文件夹中,是一些经过修改后适应Android系统的开源工程。有一些工程在主机上运行,也有些在目标机上运行。由于包含的扩展工程就多,就不一一列出,感兴趣的童鞋可以自己收集一些资料学习一下。
3、Android 中的Java程序包
略过
附2.6.29 Android内核与标准Linux内核区别
总的区别可以归纳如下:
? ARCH -- 这是Android修改了arch/arm下面的一些文件:
arch/arm:
Chg: arch/arm/kernel/entry-armv.S
Chg: arch/arm/kernel/module.c
Chg: arch/arm/kernel/process.c
Chg: arch/arm/kernel/ptrace.c
Chg: arch/arm/kernel/setup.c
Chg: arch/arm/kernel/signal.c
Chg: arch/arm/kernel/traps.c
Chg: arch/arm/mm/cache-v6.S
Chg: arch/arm/vfp/entry.S
Chg: arch/arm/vfp/vfp.h
Chg: arch/arm/vfp/vfphw.S
Chg: arch/arm/vfp/vfpmodule.c
? Goldfish -- 这是Android为了模拟器所开发的一个虚拟硬件平台。Goldfish执行arm926T指令
(在2.6.29中,goldfish也支持ATMv7指令),但是在实际的设备中,该虚拟平台的文件不会被编译。 arch/arm/mach-goldfish:
New: arch/arm/mach-goldfish/audio.c
New: arch/arm/mach-goldfish/board-goldfish.c
New: arch/arm/mach-goldfish/pdev_bus.c
New: arch/arm/mach-goldfish/pm.c
New: arch/arm/mach-goldfish/switch.c
New: arch/arm/mach-goldfish/timer.c
? YAFFS2 -- 和PC把文件存储在硬盘上不一样, 移动设备一般把Flash作为存储设备。尤其是NAND
flash应用非常广泛(绝大多数手机用的都是NAND flash,三星的一些手机使用的是OneNAND)。NAND flash具有低成本和高密度的优点。
YAFFS2 是“Yet Another Flash File System, 2nd edition" 的简称。 它提供在Linux内核和NAND flash设备 之前高效率的接口。 YAFFS2并没有包含在标准的Linux内核中, Google把它添加到了Android的kernel
fs/yaffs2:
New: fs/yaffs2/devextras.h
New: fs/yaffs2/Kconfig
New: fs/yaffs2/Makefile
New: fs/yaffs2/moduleconfig.h
New: fs/yaffs2/yaffs_checkptrw.c
New: fs/yaffs2/yaffs_checkptrw.h
New: fs/yaffs2/yaffs_ecc.c
New: fs/yaffs2/yaffs_ecc.h
New: fs/yaffs2/yaffs_fs.c
New: fs/yaffs2/yaffs_getblockinfo.h
New: fs/yaffs2/yaffs_guts.c
New: fs/yaffs2/yaffs_guts.h
New: fs/yaffs2/yaffsinterface.h
New: fs/yaffs2/yaffs_mtdif1.c
New: fs/yaffs2/yaffs_mtdif1.h
New: fs/yaffs2/yaffs_mtdif2.c
New: fs/yaffs2/yaffs_mtdif2.h
New: fs/yaffs2/yaffs_mtdif.c
New: fs/yaffs2/yaffs_mtdif.h
New: fs/yaffs2/yaffs_nand.c
New: fs/yaffs2/yaffs_nandemul2k.h
New: fs/yaffs2/yaffs_nand.h
New: fs/yaffs2/yaffs_packedtags1.c
New: fs/yaffs2/yaffs_packedtags1.h
New: fs/yaffs2/yaffs_packedtags2.c
New: fs/yaffs2/yaffs_packedtags2.h
New: fs/yaffs2/yaffs_qsort.c
New: fs/yaffs2/yaffs_qsort.h
New: fs/yaffs2/yaffs_tagscompat.c
New: fs/yaffs2/yaffs_tagscompat.h
New: fs/yaffs2/yaffs_tagsvalidity.c
New: fs/yaffs2/yaffs_tagsvalidity.h
New: fs/yaffs2/yportenv.h
? Bluetooth -- Google为Bluetooth打上了patch,fix了一些Bluetooth的bug
drivers/bluetooth:
Chg: drivers/bluetooth/bfusb.c
Chg: drivers/bluetooth/bt3c_cs.c
Chg: drivers/bluetooth/btusb.c
Chg: drivers/bluetooth/hci_h4.c
Chg: drivers/bluetooth/hci_ll.c
? Scheduler -- 对于Scheduler的改变非常小,我对它并没有去研究。
Chg: kernel/sched.c
? New Android Functionality -- 除了fix一些bug以及其他一些小的更改,Android增加了一些新的功能,
介绍如下:
? IPC Binder -- The IPC Binder is an Inter-Process Communication (IPC) mechanism. It
allows processes to provide services to other processes via a set of higher-level APIs than are available in standard Linux. An Internet search indicated that the Binder concept
originated at Be, Inc., and then made its way into Palm's software, before Google wrote a new Binder for Android.
New: drivers/staging/android/binder.c
? Low Memory Killer -- Android adds a low-memory killer that, each time it's called, scans
the list of running Linux processes, and kills one. It was not clear in our cursory
examination why Android adds a low-memory killer on top of the already existing one in the standard Linux kernel.
New: drivers/staging/android/lowmemorykiller.c
? Ashmem -- Ashmem is an Anonymous SHared MEMory system that adds interfaces so
processes can share named blocks of memory. As an example, the system could use
Ashmem to store icons, which multiple processes could then access when drawing their UI. The advantage of Ashmem over traditional Linux shared memory is that it provides a means for the kernel to reclaim these shared memory blocks if they are not currently in use. If a process then tries to access a shared memory block the kernel has freed, it will receive an error, and will then need to reallocate the block and reload the data.
New: mm/ashmem.c
? RAM Console and Log Device -- To aid in debugging, Android adds the ability to store
kernel log messages to a RAM buffer. Additionally, Android adds a separate logging module so that user processes can read and write user log messages.
New: drivers/staging/android/ram_console.c
? Android Debug Bridge -- Debugging embedded devices can best be described as
challenging. To make debugging easier, Google created the Android Debug Bridge (ADB), which is a protocol that runs over a USB link between a hardware device running Android and a developer writing applications on a desktop PC.
drivers/usb/gadget:
New: drivers/usb/gadget/android.c
Chg: drivers/usb/gadget/composite.c
Chg: drivers/usb/gadget/f_acm.c
New: drivers/usb/gadget/f_acm.h
New: drivers/usb/gadget/f_adb.c
New: drivers/usb/gadget/f_adb.h
New: drivers/usb/gadget/f_mass_storage.c
New: drivers/usb/gadget/f_mass_storage.h
Android also adds a new real-time clock, switch support, and timed GPIO support. We list the impacted files for these new modules at the end of this document.
? Power Management -- Power management is one of the most difficult pieces to get
right in mobile devices, so we split it out into a group separate from the other pieces. It's interesting to note that Google added a new power management system to Linux, rather than reuse what already existed. We list the impacted files at the end of this document. kernel/power:
New: kernel/power/consoleearlysuspend.c
New: kernel/power/earlysuspend.c
New: kernel/power/fbearlysuspend.c
Chg: kernel/power/main.c
Chg: kernel/power/power.h
Chg: kernel/power/process.c
New: kernel/power/userwakelock.c
New: kernel/power/wakelock.c
? Miscellaneous Changes -- In addition to the above, we found a number of changes that
could best be described as, 'Miscellaneous.' Among other things, these changes include additional debugging support, keypad light controls, and management of TCP networking.