Android
1.系统架构
简单的翻译版本
-
Linux内核(Linux Kernel)
- Android运行在linux kernel 2.6之上,但是把linux内受GNU协议约束的部分做了取代,这样在Android的程序可以用于商业目的。
- Linux 内核是硬件和软件层之间的抽象层。
- 驱动:显示驱动、摄像头驱动、键盘驱动、WiFi驱动、Audio驱动、flash内存驱动、Binder(IPC)驱动、电源管理等。
- 中间件
- 中间件包括两部分:核心库和运行时(libraries & Android runtime)
- 核心库包括,SurfaceManager 显示系统管理库,负责把2D或3D内容显示到屏幕;Media Framework 媒体库,负责支持图像,支持多种视频和音频的录制和回放;SQlite 数据库,一个功能强大的轻量级嵌入式关系数据库;WebKit 浏览器引擎等。
- Dalvik虚拟机:区别于Java虚拟机的是,每一个Android 应用程序都在它自己的进程中运行,都有一个属于自己的Dalvik 虚拟机,这一点可以让系统在运行时可以达到优化,程序间的影响大大降低。Dalvik虚拟机并非运行Java字节码,而是运行自己的字节码。
- 应用程序框架(Application Framework)
- 丰富而又可扩展性的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids), 文本框(text boxes),按钮( buttons), 可嵌入的web 浏览器。
- 内容提供者(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据。
- 资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件( layoutfiles )。
- 通知管理器(Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。
- 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。
- 应用程序 (Applications)
- Android 系统会内置一些应用程序包包括email 客户端,SMS 短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA 语言编写的。
2.目录结构
应用目录结构:
src: 编写java代码的目录
gen:包含了Android的资源文件的标识符,不需要程序员维护,自动添加的而且有分类
libs: 当前工程所依赖的jar包.
assets: 放置一些程序所需要的媒体文件. 原生资源文件
bin: 工程的编译目录. 存放一些编译时产生的临时文件和当前工程的.apk文件.
res(resources): 资源文件.
drawable: 存放程序所用的图片.
layout: 存放Android的布局文件.
menu: 存放android的OptionsMenu菜单的布局.
values (应用程序所需要的数据. 会在R文件中生成id)
strings.xml 存放android字符串.
dimens.xml 存放屏幕适配所用到的尺寸.
style.xml 存放android下显示的样式.
values-sw600dp 7寸平板所对应的值
values-sw720dp-land 10寸平板所对应的值
values-v11 指定3.0版本以上的手机显示的样式.
values-v14 指定4.0版本以上的手机显示的样式.
AndroidManifest.xml: android应用程序的入口文件. 声明了android里边的组件. 和相关配置信息.
proguard-project.txt: 加密当前程序所使用.
project.properties: 指定当前工程采用的开发工具包的版本
源码目录结构:
|-- abi (应用程序二进制接口,生成libgabi++和.so相关库文件)
|-- art (google在4.4后加入用来代替Dalvik的运行时环境)
|-- bionic (bionic C库)
|-- bootable (启动引导程序的源码)
|-- build (android的编译系统)
|-- common(linux内核文件)
|-- cts (android兼容性测试套件)
|-- dalvik (dalvik JAVA虚拟机源码)
|-- developers (开发使用的例子)
|-- development (开发所需要的一些例程、文档和工具)
|-- device(设备相关代码和编译脚本)
|-- docs(文档)
|-- external (android使用的扩展库)
|-- frameworks (android应用框架层,为应用层提供API)
|-- gdk(开发谷歌眼镜的sdk)
|-- hardware (硬解适配层HAL代码)
|-- libcore(java核心库)
|-- libnativehelper(支持android的类库)
|-- ndk (原生开发套件,提供了一些列工具可以快速开发c/c++的动态库)
|-- out (编译完成后的输出目录)
|-- packages (应用程序包)
|-- pdk(平台开发套件)
|-- prebuilts (编译所需要的程序文件,主要包含不同平台下的ARM编译器)
|-- sdk (sdk及模拟器)
|-- system (嵌入式Linux的一些系统工具,如adb、fastboot、logcat等)
|-- uboot(uboot的源码)
|-- vendor (厂商定制代码)