本文来源于: 启动手机论坛 具体参考文章:http://www.qdppc.com/forum.php?mod=viewthread&tid=43751&fromuid=1
1、Android系统是什么?
Android是Google公司于2007年公布的基于Linux的移动终端系统平台。
之所以说是移动终端,是由于现现在手机、MID、Tablet等之间的差距越来越小。而不再存在不可逾越的鸿沟。
凭借Google服务的优势、各移动设备制造商的配合以及Android系统本身对于开发人员良好的亲和性。
Android系统非常快就在移动设备操作系统领域占有了举足轻重的地位。
说究竟,Android也就是基于Linux的操作系统。而所谓基于Linux。指的即是基于Linux内核。
事实上。在移动终端领域。Android不是第一个这样做的。也不是最后一个。
如Web OS、Maemo、Moblin、Bada、Meego等
基于Linux内核就意味着这些系统会有本质的相通之处,也意味着有很多其它的开放性、会吸引很多其它的开发人员。
所以,抛开硬件限制。HD2可以跑Android也就注定能跑Unbuntu和Meego等。(只是可能会涉及的驱动开发以及CPU、存储容量的制约)
2、Android系统结构
接下来就说一说Android系统的结构,对于Android系统结构的了解对于Android软件开发和ROM制作都非常重要。
仅仅有当你真正了解了Android是如何的构成的时候。才干更深刻的理解之后每一步做的是什么,也才干明确出了问题可能是哪里的问题。
(1)宏观
Android是基于Linux内核的。
Linux内核是什么不知道?汗,简单地说就是Linux是一个操作系统,Linux Kernel就是这个系统最最主要的部分。是核心。
好比用户数最多的Windows系统,你看道的那些窗体啊、绘图计算器扫雷那些附件啊什么的,只是是架在Windows的内核之上而已。
所谓内核。就是供上层用户库、用户程序调用的核心。就好比计算所得税有一个公式,而其核心是加减乘除四则运算……扯远了……
简单地说Android就是:Linux内核+第三方库(如sqlite、webkit等)+Android核心库+Java虚拟机+定义提供的一些接口
仅仅要把上边每一个词搞懂是啥了,基本就搞懂Android是如何工作的了。
Android在宏观上的结构例如以下
从上至下依次为:应用程序层、应用程序框架层(提供给应用程序对低层接口)、支持库及Android执行时环境(含核心库及Java虚拟机)、Linux内核
详细当中每层都是什么,英语好的自己看,英语不好的google一下
(2)模块
Android各功能系统模块(看其它部分时可能结合这块看):
(注:还包括基本介绍和宏观结构等哦~~~~推荐~)
(3)Android源码文件夹结构
Android 2.2
|-- Makefile
|-- bionic (bionic C库)
|-- bootable (启动引导相关代码)
|-- build (存放系统编译规则及generic等基础开发包配置)
|-- cts (Android兼容性測试套件标准)
|-- dalvik (dalvik JAVA虚拟机)
|-- development (应用程序开发相关)
|-- external (android使用的一些开源的模组)
|-- frameworks (核心框架——java及C++语言)
|-- hardware (主要保护硬解适配层HAL代码)
|-- libcore
|-- ndk
|-- device
|-- out (编译完毕后的代码输出与此文件夹)
|-- packages (应用程序包)
|-- prebuilt (x86和arm架构下预编译的一些资源)
|-- sdk (sdk及模拟器)
|-- system (文件系统库、应用及组件——C语言)
`-- vendor (厂商定制代码)
bionic 文件夹
|-- libc (C库)
| |-- arch-arm (ARM架构,包括系统调用汇编实现)
| |-- arch-x86 (x86架构,包括系统调用汇编实现)
| |-- bionic (由C实现的功能。架构无关)
| |-- docs (文档)
| |-- include (头文件)
| |-- inet
| |-- kernel (Linux内核中的一些头文件)
| |-- netbsd (?netbsd系统相关,详细作用不明)
| |-- private (?一些私有的头文件)
| |-- stdio (stdio实现)
| |-- stdlib (stdlib实现)
| |-- string (string函数实现)
| |-- tools (几个工具)
| |-- tzcode (时区相关代码)
| |-- unistd (unistd实现)
| `-- zoneinfo (时区信息)
|-- libdl (libdl实现,dl是动态链接,提供訪问动态链接库的功能)
|-- libm (libm数学库的实现。)
| |-- alpha (apaha架构)
| |-- amd64 (amd64架构)
| |-- arm (arm架构)
| |-- bsdsrc (?bsd的源代码)
| |-- i386 (i386架构)
| |-- i387 (i387架构?)
| |-- ia64 (ia64架构)
| |-- include (头文件)
| |-- man (数学函数,后缀名为.3,一些为freeBSD的库文件)
| |-- powerpc (powerpc架构)
| |-- sparc64 (sparc64架构)
| `-- src (源码)
|-- libstdc++ (libstdc++ C++实现库)
| |-- include (头文件)
| `-- src (源代码)
|-- libthread_db (多线程程序的调试器库)
| `-- include (头文件)
`-- linker (动态链接器)
`-- arch (支持arm和x86两种架构)
bootable 文件夹
.
|-- bootloader (适合各种bootloader的通用代码)
| `-- legacy (预计不能直接使用,能够參考)
| |-- arch_armv6 (V6架构。几个简单的汇编文件)
| |-- arch_msm7k (高通7k处理器架构的几个基本驱动)
| |-- include (通用头文件和高通7k架构头文件)
| |-- libboot (启动库。都写得非常easy)
| |-- libc (一些经常使用的c函数)
| |-- nandwrite (nandwirte函数实现)
| `-- usbloader (usbloader实现)
|-- diskinstaller (android镜像打包器,x86可生产iso)
`-- recovery (系统恢复相关)
|-- edify (升级脚本使用的edify脚本语言)
|-- etc (init.rc恢复脚本)
|-- minui (一个简单的UI)
|-- minzip (一个简单的压缩工具)
|-- mtdutils (mtd工具)
|-- res (资源)
| `-- images (一些图片)
|-- tools (工具)
| `-- ota (OTA Over The Air Updates升级工具)
`-- updater (升级器)
build文件夹
.
|-- core (核心编译规则)
|-- history (历史记录)
|-- libs
| `-- host (主机端库。有android “cp”功能替换)
|-- target (目标机编译对象)
| |-- board (开发平台)
| | |-- emulator (模拟器)
| | |-- generic (通用)
| | |-- idea6410 (自己加入的)
| | `-- sim (最简单)
| `-- product (开发平台相应的编译规则)
| `-- security (密钥相关)
`-- tools (编译中主机使用的工具及脚本)
|-- acp (Android "acp" Command)
|-- apicheck