1.最底层_硬件

任何Android设备最底层的硬件包括 显示屏, wifi ,存储设备 等. Android最底层的硬件会根据需要进行裁剪,选择自己需要的硬件.



2.Linux内核层

该层主要对硬件进行管理 , 包括显示驱动(Display Driver) , 相机驱动(Camera Driver) ,蓝牙驱动(Bluetooth Driver),共享内存驱动(Shared Memory Driver),USB驱动(USB Driver),键盘驱动(Keypad Driver),Wifi驱动(WiFi Driver),声音驱动(Audio Drivers),电源驱动(Power Management).

有的驱动是与真实的硬件对应的,用来驱动底层硬件的,而有的驱动是软件的抽象 , 是一种虚拟驱动.上面的共享内存驱动和Binder驱动就是软件驱动.LogCat也是一种软件驱动.


Android基于Linux2.6提供核心系统服务 , 例如 : 安全 , 内存管理 , 进程管理 , 网络堆栈 , 驱动模型 . Linux Kernel也作为硬件和软件之间的抽象层 , 该层隐藏具体硬件细节 , 为上层提供统一的服务 .

使用binder作为进程通讯机制 , 取代传统进程间通讯机制 ; 这种机制在Native层实现了一套 , 在Java层也实现了一套 .


3.硬件抽象层

该层是由不同的厂商实现的,该层实现了对底层驱动的调用 .

用户空间的C/C++库 ;

遵循Apache协议 ;

定义Android需要的linux driver实现的接口 ;

将Android彻底和硬件抽象出来 ;


4.Native库Libraries层

这个库是通过C/C++实现的,通过调用硬件抽象层的方法完成的.

Android系统的各个组件使用这些功能通过Android应用程序框架(Application framework)暴露给开发者的 ;

SurfaceManager :

Media Framework :

SQLite :

WebKit :

Libc :

OpenGL|ES : 在该层提供了一套C/C++函数库 , 但是在Framework层提供了一层Java的函数库 ;

Audio Manager :

FreeType :

SSL :


5.Android运行时环境Android Runtime

Core Libraries : 核心类库,提供大部分Java编程功能 , 与JavaSE不同,对JavaSE类库进行了精简.可以通过SDK中的doc目录下的帮助文档进行查询 .

Dalvik Virtual Machine : Android\虚拟机 , 基于寄存器的 . 大多数虚拟机所采用的基于栈的实现 . 该虚拟机依赖于Linux内核提供的基本功能 , 如线程和底层底层内存管理 .

Android所有的应用程序都是通过Java开发的,在Dalvik虚拟机上运行的.




6.Application Framework

提供了一组API,四大组件就是在该层提供的 , 这层框架还提供了一组服务,在手机开机的过程中会驻留在某个程序中 . 比如侦听电话,短信等开启对应的广播接受者的服务 . 在linux启动的时候,将该服务加载进来,每个服务都会占用一个Dalvik虚拟机.

通过提供开放的开发平台 , Android使用开发者能够编制极其丰富和新颖的应用程序 , 开发者可以自由的利用设备的硬件优势 , 访问位置信息 , 运行后台服务 , 设置闹钟 , 向状态栏添加通知等 ;

开发者可以完全使用核心应用程序所使用的框架APIs , 应用程序的体系结构旨在简化组件的重用 , 任何应用程序都能发布他的功能 , 并且任何其他的应用程序都可以使用这些功能 . 这个机制允许用户替换组件 , 所有的应用程序其实是一组服务和系统 .

点击adb shell 可以对连接的手机进行查看 , ps 命令可以查看所有的进程 , service list 命令可以查看所有已经启动的服务 , 系统的服务都可以通过getSystemService得到 .

在该层封装了进程间通信的机制 , 就是Binder机制 ;


7.应用层Applications

使用Java开发的应用程序.

对用户 : 良好的用户体验 , 强大的用户亲和力 .

对开发者 : 快速而灵活的开发平台 , 让开发者的灵感能快速转化为产品 .




8.Android开发种类

Android开发分为三种类型 :


(1)移植开发手机系统

将一个应用从不同的平台上进行移植 , 开发 .

例如 : 这个平台的底层可能不支持 , 这个移植可以是从底层驱动到上层应用的整体移植 , 也可以是不同SDK版本上的应用移植 .



(2)应用程序开发




(3)Android系统开发


例如开发浏览器 , 这个是基于WebKit的 , 需要该组件的C/C++代码看懂 , 将这个组件修改的能适用于自己开发 ;

开发手机电视 , 需要将数据进行视频解码 , 在Native完成一套视频解码库 , 在Framework层暴露API , 供开发者使用 ;



9.三种开发形式

(1)SDK开发 : 在windows , linux , mac 下开发 ;

Java语言知识 ;

应用程序架构 ;

GUI设计基础知识 ; 各种视图的使用 ; 2D/3D图形API ; 应用程序设计思想 ;




(2)NDK开发 : 在windows , linux 下 开发

Java语言知识

应用程序架构 ;

JNI技术 ;

Linux下的C编程


(3)源码开发 : 完全源代码 , Linux中开发 ;


Android源码开发知识结构 :

Linux操作系统知识

Linux内核知识(C语言)

linux驱动知识 (C语言)

Android底层库(C语言 , C++)

Dalvik虚拟机(C++ , Java)

Android GUI系统(C++ , Java)

音频 , 视频 多媒体 (C语言 , C++ , Java)

电话部分(C , C ++ , Java)

传感器部分 (C , C++ , Java)







更多相关文章

  1. android sdk MyEclipse adt 配置与开发 -windows
  2. Android开发技术周报 Issue#72
  3. 推荐给Android开发者的七本图灵书
  4. Android开发-一个简单的五子棋游戏
  5. Android开发者网址导航
  6. Android网络游戏之神农诀项目开发--视频观看地址
  7. Android(安卓)Activity生命周期
  8. Android应用程序启动过程源代码分析
  9. Android(安卓)告急!

随机推荐

  1. Android配置
  2. android 音乐频谱
  3. Android中自定义滑动条风格
  4. Create Hello Android
  5. android NDK install and config in ubun
  6. 使用命令行创建Android模拟器
  7. Android人脸识别技术
  8. android anr导出崩溃文件
  9. Android硬件访问服务-Service
  10. Android中横竖屏、全屏、无标题设置