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)

对Android体系结构的理解--后续会补充的更多相关文章

  1. 【Android 应用开发】对Android体系结构的理解--后续会补充

    1.最底层_硬件 任何Android设备最底层的硬件包括 显示屏, wifi ,存储设备 等. Android最底层的硬件会根据需要进行裁剪,选择自己需要的硬件. 2.Linux内核层 该层主要对硬件 ...

  2. Android Adapter基本理解

    感谢大佬:https://blog.csdn.net/l799069596/article/details/47301711 Android Adapter基本理解: 我的理解是: 1.一个有许多ge ...

  3. [译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解

    原文链接:Hello, Android Multiscreen_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android Multiscreen深入理解. 本 ...

  4. Android动画的理解

    基础知识 在我们开始讲Android动画这个知识点之前,我们了解下相应的基础知识点. Shape篇 一般用Shape定义的XML文件是存放在Drawable目录下,广泛应用于在Button.TextV ...

  5. Android灯光系统--深入理解背光灯

    Android灯光系统--深入理解背光灯 一.怎么控制背光灯(简述) APP将亮度值写入数据库 线程检测数据库的值是否发生变化 这种机制成为"内容观察者"--contentObse ...

  6. 移动端测试===Android内存管理: 理解App的PSS

    Android内存管理: 理解App的PSS 原文链接:http://www.littleeye.co/blog/2013/06/11/android-memory-management-unders ...

  7. Appium Capabilities 详解(Android适配/IOS后续再补充)

    Appium 关键字 关键字 描述 实例 automationName 你想使用的自动化测试引擎 Appium (默认) 或 Selendroid platformName 你要测试的手机操作系统 i ...

  8. Android系统分区理解及分区目录细解【转】

    本文转载自:https://blog.csdn.net/u010001503/article/details/51853822 Android 通常有以下分区: System分区: 就是我们刷ROM的 ...

  9. Android开发学习——android体系结构

    Android的体系结构采用了分层架构的思想, 从上层到底层共包括四层,分别是应用程序程序层.应用框架层.系统库和Android运行时和Linux内核. 一 应用程序层 该层提供一些核心应用程序包,例 ...

随机推荐

  1. shell基础知识---与监听服务器长连接端口状态

    从未写过脚本我的最近接了俩脚本的需求,就在这分享一下我的我学到基础知识主要就四部分内容 一.变量 变量的定义 string='字符串' string="字符串" num=808st ...

  2. SHOPEX快递物流单号查询插件

    本SHOPEX快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递.顺丰快递.圆通快递.EMS快递.汇通快递.宅急送快递.德邦物流.百世快递.汇通快递.中通快递.天天快递等知 ...

  3. 常见IE8兼容性问题及解决

    1.css3媒体查询 IE8不支持媒体查询 解决:respond.js,在页面中所有css文件的引用位置之后引用Respond.js 2.HTML5新标签 IE8不支持H5新标签 解决:html5sh ...

  4. Opportunity Helper

    using System; using Microsoft.Xrm.Sdk; using Microsoft.Crm.Sdk.Messages; public class OpportunityHel ...

  5. netfilter 学习摘要

    netfilter 子系入口在L3,完成后把数据包发往L4 netfilter 主要功能: 数据包选择(iptables) 数据包过滤 网络地址转换(NAT) 数据包操纵(在路由选择之前或之后修改数据 ...

  6. python学习——模块和包

    在之前常用模块中我们已经初步了解了模块的导入,今天来说学习一下模块和包.我们可以把模块理解成每一个python文件.而包就是多个能解决一类问题的python文件全部放在一起.OK

  7. C语言程序设计:现代方法(第2版)第二章全部习题答案

    前言 本人在通过<C语言程序设计:现代方法(第2版)>自学C语言时,发现国内并没有该书完整的课后习题答案,所以就想把自己在学习过程中所做出的答案分享出来,以供大家参考.这些答案是本人自己解 ...

  8. 前端必备的Nginx学习

    由于机缘巧合,认识了一些朋友,给我介绍了搬瓦工的网站.买了一个国外的服务器,既可以FQ又拥有了一个搭载 Centos 6 的服务器.一年19.99美元,折合人民币也就130左右,一键搭建.有兴趣可以点 ...

  9. C# 面试题 (二)

    1. 什么是C#? C#是微软公司发布的一种面向对象的.运行于.NET Framework之上的高级程序设计语言.C#是一种安全的.稳定的.简单的.优雅的,由C和C++衍生出来的面向对象的编程语言. ...

  10. SpaceVim 语言模块 dart

    原文连接: https://spacevim.org/cn/layers/lang/dart/ 模块简介 功能特性 依赖安装及启用模块 启用模块 语法检查及代码格式化 安装 dart-repl 快捷键 ...