【Android 应用开发】对Android体系结构的理解--后续会补充
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语言知识 ;
应用程序架构 ;
(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)
最新文章
- Theoretical comparison between the Gini Index and Information Gain criteria
- MODIS批量处理软件MRT的安装说明
- tengine-2.1.0 源码安装
- Java代码实现excel数据导入到Oracle
- 【jQuery 使用】 利用jQuery.prop(";outerHTML";)获取包含自身在内的HTML元素的HTML代码
- [转]深入分析 Java 中的中文编码问题
- DDD开发框架ABP之导航菜单
- 前台添加jquery的引用
- 使用zxing生成二维码 - servlet形式
- 网页头一定要加的代码段(加注版)一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
- Python学习笔记——基础篇【第六周】——面向对象
- spring cloud+dotnet core搭建微服务架构:Api授权认证(六)
- vue 预渲染遇到的坑
- Github 上 Star 最多的个人 Spring Boot 开源学习项目
- Python_Mix*OS模块,序列化模块种的json,pickle
- JavaScript的使用你知道几种?(上)
- 安装JDK提示: 该项不适于在指定状态下使用的错误
- sublime text3 激活码——许可证
- python音乐播放器第二版
- 模拟多级复选框效果的jquery代码
热门文章
- Android布局中ScrollView与ListView的冲突的最简单方法
- [struts2学习笔记] 第三节 创建struts 2 HelloWorld所需的六个步骤
- 3.关于QT中的MainWindow窗口,MenuBar,ToolBar,QuickTip等方面的知识点
- Linux系统编程-----进程fork()
- 关于V4L2中操作比较重要的几个命令以及一般操作流程总结
- java 之容器
- LCD 常用的客观效果指标和测试方法
- Access数据类型和.NET数据类型映射
- J2EE学习从菜鸟变大鸟之九 深入浅出理解 Servlet-----实例解析
- Hibernate查询之SQL查询,查询结果用new新对象的方式接受,hql查询,通过SQL查询的结果返回到一个实体中,查询不同表中内容,并将查到的不同表中的内容放到List中