admin管理员组

文章数量:1531792

Android 操作系统架构开篇:http://gityuan/android/https://cloud.tencent/developer/article/1429122

Android架构图(五层框架):https://wwwblogs/pengdonglin137/p/3858254.html

官方系统架构图:https://developer.android.google/guide/platform/
Android Studio官方介绍:https://developer.android.google/studio/
Android Studio官方详解:https://developer.android.google/studio/intro/

Android控件架构:https://cloud.tencent/developer/article/1337229

一、引言

虽然 Android 系统非常庞大且错综复杂,需要具备全面的技术栈,但整体架构设计清晰。Android 底层内核空间以 Linux Kernel 作为基石,上层用户空间由 Native系统库、虚拟机运行环境、框架层组成,通过系统调用(Syscall)连通系统的内核空间 与 用户空间。对于用户空间主要采用 C++ 和 Java 代码编写,通过 JNI 技术打通用户空间的 Java层 和 Native层(C++/C),从而连通整个系统。为了能让大家整体上大致了解Android系统涉及的知识层面,先来看一张Google官方提供的经典分层架构图:

查看:https://developer.android/guide/platform

依次分为:

  1. Linux 内核
  2. HAL ( 新的 Android 架构图细化特定分出一个:Hardware Abstraction Lay (HAL)层 )
  3. 系统Native库 和 Android运行时 环境
  4. Java框架层
  5. 应用层

这 5 层架构每一层都包含大量的子模块或子系统。

上图采用静态分层方式的架构划分,众所周知,程序代码是死的,系统运转是活的,各模块代码运行在不同的进程(线程)中,相互之间进行着各种错终复杂的信息传递与交互流,从这个角度来说此图并没能体现Android整个系统的内部架构、运行机理,以及各个模块之间是如何衔接与配合工作的。为了更深入地掌握Android整个架构思想以及各个模块在Android系统所处的地位与价值,计划以Android系统启动过程为主线,以进程的视角来诠释Android M系统全貌,全方位的深度剖析各个模块功能,争取各个击破。这样才能犹如庖丁解牛,解决、分析问题则能游刃有余。

其他框架图表示:

可以很明显看出,Android 系统架构由 4 部分组成,分别是:Linux Kernel、Android Runtime 和 Libraries、Application Framework、Applications。学过计算机网络都知道 OSI/RM,就会知道分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。也就是说各层各司其职,各层提供固定的SAP(Service Access Point),专业点可以说是高内聚、低耦合。 如果你只是做应用开发,就不需要深入了解Linux Kernel层。

其他框架图表示:

其他框架图表示:

从Linux操作系统的角度来看,第2层是内核空间与用户空间的分界线,第1层运行于内核空间,第2、3、4层次运行于用户空间。

总结:

  • 1. 应用层:应用是用java语言编写的运行在虚拟机上的程序,比如Email客户端,SMS短消息程序,日历等。
  • 2. 应用框架层:这一层是编写Google发布的核心应用时所使用的API框架,开发人员同样可以使用这些框架来开发自己的应用,这样便简化了程序开发的结构设计,但是必须要遵守其框架的开发原则。
  • 3. 系统运行库(C/C++库以及Android运行库)层:当使用Android应用框架时,Android系统会通过一些C/C++库来支持我们使用的各个组件,使其更好的为我们服务,比如其中的SQLite(关系数据库),Webkit(Web浏览器引擎)。
  • 4. Linux内核层:Android的核心系统服务给予Linux2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于该内核,比如Binder IPC(Internet Process Connection进程间通信)驱动,android的一个特殊驱动程序,具有单独的设备节点,提供进程间通信的功能。

Android的系统架构不仅从宏观上认识了Android系统,同时,也给我们的学习与实践指明了方向。若是从事Android应用开发,那应该研究Android的应用框架层和应用程序层;若是从事Android系统开发,那应该研究Android的系统库和Android运行时;若是从事Android驱动开发,那应该研究Android的Linux内核

其他框架图表示:

从Android架构得出我们必须要掌握的知识点:

  1. Linux知识。Android是基于Linux内核的,编译Android源码也必须在Linux上,所以必须掌握Linux的基础知识(操作区别、简单指令、进程等),没事可以装个VM虚拟机玩玩。
  2. C/C++知识。Android大部分核心库是C/C++的动态链接库,系统大部分隐藏API都是在这里面的,而且你看哪条面试中没写要求熟悉NDK(Java+C/C++形式)开发,所以必须熟悉C/C++知识,C语言看谭浩强的《C语言程序设计》就可以,NDK推荐看《Android C++高级编程》。
  3. Java知识。Android是80%的Java package,IDE和语言都是Java,没理由不具备精通级的Java知识。尤其是多线程、I/O流、面向对象思想、http和socket网络等,面试必问题,Java的进阶书书大家都知道就不再提了。
  4. T-SQL知识(可以只是基础的增删改查和子查询)。

高级工程师要掌握的知识:

  1. 数据结构(基础)
  2. 设计模式(推荐看《大话设计模式》,然后再带入Android API看设计模式在Android中的应用)
  3. Web开发语言+Html+JS(推荐php和jsp,做到最后怎么着都得熟悉一门Web开发语言)

以上皆是知识点,以下是我认为可以有的一些点:

  1. GitHub(这简直就是摆在那里的财富,各种你需要的Android的例子上面都有,只是你必须要学会去搜索)
  2. Android ROM(想想自己做一个专属的ROM屌不屌)
  3. afinl、thinkandroid等各种Android开源快速开发框架(要是能参与开源项目就离大牛不远了)
  4. iOS开发(我是很羡慕人家用苹果机我用win7系统的)
  5. 各种Android开发论坛(学习最快的形式是交流和传授)

如觉得还有技术方面提升的地方再补充。

Android开发的三个层次

我觉得Android开发上有三个层次技术:

1. 第一个层次和传统的嵌入式Linux最接近,主要涉及的是CPU、GPU以及外设的驱动以及使能方面。多需要熟悉Linux内核,Android框架定义中驱动的接口规范等等,这部分开源社区的力量最大。这个层次技术主要需求方是是各种CPU和Android设备解决方案供应商。 

2. 第二个层次主要是涉及Android框架中间件部分,如多媒体/3D框架,Java虚拟机等等,这部分Google控制的是最严格的,因为他要控制 Android各种feature以及捆绑自己的移动互联网应用,必须规范中间件。这部分所涉及的软件技术也最多,从各种C/C++库,Java虚拟机性能,用户体验抽象到数据库设计等等很大的内涵。开发的一般也是选择一个方向发力。另外深度定制Android ROM重点也是这个层次。

3. 第三个层次就是App开发层次,这个层次主要就是利用Android SDK开发了。很多C/C++出身的觉得是用Java开发,其实Java就是啥都是指针的C++,外带try/catch以及垃圾收集,上手其实是很快的。Android程序最重要一点是理解生命周期概念,将一个Activity和Linux进程关系搞清楚,啥时候这个进程启动,啥时候睡眠,啥时候退出,后台的事件循环如何运行的,最后时刻要提醒自己虚拟机在运行,垃圾收集在运行。Google Code上有还多参考代码,在看中学,体会很快的。

另外,本人采用了一种特别的模式来进行Android程序开发:Java只负责界面,用NDK来做各种复杂的业务和数据处理,Java与NDK之间设计好API以及事件传递方式(Android SDK 中Localsocket就可以很好用做事件发送)。这种方式适合C/C++背景的开发人员上手Android,Java无需达到熟练即可。

二、Android 架构

Google 提供的5层架构图很经典,但为了更进一步透视 Android 系统架构,本文更多的是以进程的视角,以分层的架构来诠释Android 系统的全貌,阐述 Android 内部的环环相扣的内在联系。

系统启动架构图

图解:Android 系统启动过程由上图从下往上的一个过程是由 Boot Loader 引导开机,然后依次进入 -> Kernel -> Native -> Framework -> App,接来下简要说说每个过程:

关于 Loader 层:

  • Boot ROM:当手机处于关机状态时,长按 Power 键开机,引导芯片开始从固化在 ROM 里的预设代码开始执行,然后加载引导程序到 RAM;
  • Boot Loader:这是启动 Android 系统之前的引导程序,主要是检查 RAM,初始化硬件参数等功能。

2.1 Linux内核层

Android 底层便是 Linux内核。例如 Android Runtime (ART 即 ART 虚拟机 )  最终调用底层 Linux 内核来处理线程和底层内存管理等底层功能。使用 Linux 内核可让 Android 利用 Linux 内核的安全机制为 Android 提供相应的保障,也允许设备制造商为内核开发硬件驱动程序。

随着Android的完善,随着产品完善,很多时候,应用级App简单调用系统提供API已无法满足我们开发需求,那么这个时候,我们就不得不硬着头皮去深入底层,了解NDK,学习JNI等等一些高级编程技术了。

什么是 NDK ?

  • 定义:Native Development Kit,是Android的一种开发工具包
  • 作用:快速开发C、 C++的动态库,并自动将so和应用一起打包成 APK 即可通过 NDK在 Android中 使用 JNI与本地代码(如C、C++)交互
  • 优点:运行效率高、代码安全性高、跨平台

什么是 JNI ?

  • 定义:Java Native Interface,
  • 作用:通过 JNI 能使 Java 调用 C++

本文标签: 系统架构图android