目录
一、Android系统架构
- 最底层是 Linux Kernel 层。Android OS 的基石是 Linux Kernel
- Android Framework:中间两层由下到上是 Native Framework 层和 Java Framework 层。这两个是 Android 独有的 (Android OS)。
- 应用层:最上层是应用层。正是基于 Android Framework
分为四层:
1.应用层
2.应用程序框架(FrameWork)
3.系统运行库
4.内核层
重点讲Android FrameWork层
- Android Framework 有很多功能模块的。
- 功能模块有可能是放在 Java Framework 里,也有可能是 Native Framework 里。
- 功能模块可以分布在多个进程中,彼此之间,或对应用层以 Binder 方式进行进程间交互。
应用程序框架(FrameWork)
帮助程序员快速的开发程序,并且该应用程序重用机制也使用户可以方便的替换程序组件。(框架的安全性限制)
系统运行库(Libraries又称 Native Framework)
- 程序库
- Android包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过Android应用程序框架为开发
- 媒体,2D图片引擎,SQLite等
- Android 运行库
- 该核心库提供了JAVA编程语言核心库的大多数功能。
- Dalvik虚拟机的一些逻辑
上述四个层次中,Kernel 历史最悠久,到今天就剩下大概 Windows,Linux、macOS 三个巨头了
以上唯有 Linux 不归某个公司独有。所以,Android 使用 Linux 是必然的选择。如果我们要搞国产自主 OS 的话,最大可能性也是基于 Linux,比如现在的优麒麟,以前的红旗都是这样。
Android各个 层级之间的交互关系
1.App 和 Java Framework 有交互。某些情况下也可以和 Native Framework 模块交互(图中并未画出相关的箭头线)。
应用层只与FrameWork层有交互
2.Native Framework、Java Framework 均有和 Linux 交互。
3.Java Framework 中的部分模块和 Native Framework 中的部分模块有交互。
Linux是宏内核,Android OS是微内核(Windows 和Mac也是微内核)
微内核:内核只做一些基本的服务(比如操作 CPU,进程调度,内存管理、设备管理等)。然后将其它功能独立为除内核之外的多个进程。
缺点:其它进程和内核之间的交互属于进程间通信IPC,开销比较大。
宏内核:把上图中的所有东西都塞到内核里。这样大家都运行在一个进程里(主要是指共享同一个内存空间——内核地址空间),
优点:极大减少模块间交互的开销
缺点:但问题就是一旦有一个模块出问题,整个 kernel 都可能挂掉。
Android Framework 中的功能模块并非都挤在一个进程里,而是分散在不同进程中,功能模块之间通过进程间通信的手段交互。所以,从应用的角度看,Android OS 肯定是一个微内核。
Android为什么能成为OS:
FrameWork层为android定制了一套开发及交互规则
1.Activity启动时候 FrameWork会更加定制的Activity的规则去控制Activity的流程
2.Android 上,一个应用要播放视音频的话,依赖 MediaPlayerService、SurfaceFlinger、AudioFlinger、硬件编解码模块等。这套东西也不是 Linux 带过来的,而是 Android 搞出来的。编解码,播放功能均由系统提供了,应用程序再也不用操心这些东西。这无疑是一个很大的进步。
结论,基于Linux之上为应用层设计了FrameWork层,
1.制定了四大组件的一些交互规则
2.为应用层使用一些Linux的基础功能做了一层封装(音频那套)
Android 可以称为OS
二、Android生态链
Android与苹果生态的区别
安卓的生态链有(从上到这)
1.Google发版 2.芯片厂商定制功能 3.设备厂商设计特性 4.运营商
苹果没有 1到3都是自己,没有各种分支的定制,运营商也不太考虑
优势:
- 发版本快(1到3是一步到位)
- 没有各种定制(1到3是一步到位)
缺点:通信芯片是苹果的大问题,所以老有人吐槽 iPhone 的信号不好
Android手机发布更新的过程:
①Google首先发布版本,AOSP原生代码。AOSP原生代码只支持极少数几款手机。
②芯片厂商(高通、华为、MTK)在 AOSP 基础上发布自己的版本。
1.芯片厂商会在 AOSP 原生代码上叠加自己的功能,比如以前 AOSP 没有双卡双待功能,这些功能有一些是芯片厂商自己加的。
2.针对自己发的版本做测试。
③终端厂商(华米 OV 等)使用芯片厂商提供的 Android 代码。然后,设备厂商还得魔改一下,加上终端厂商自己的特性。
这就是 MIUI、EMUI、ColorOS 等的功能。
④现在大部分终端厂商使用芯片厂商的 Turnkey 方案,主要是 CPU+通讯模组,芯片+软件打包卖给终端厂商。少数公司比如魅族使用的 CPU 是三星,而通信模组不知道哪一家,那么魅族就需要把三星的 CPU 和别家的通讯模组整合到一起,难度比使用 Turnkey 方案得大一些。
⑤终端厂商集成完后,还需要考虑运营商定制的情况,然后加上对应的运营商定制功能,并做对应的测试。
--------------
以下不需要深挖
再说下我对国产自主 OS 的一些看法和判断。
不出意外的,中长期(十几年之内,如果量子计算机还没有普及的话)看,依然会以 Linux Kernel 为核心(这里不考虑那些特殊场景的 OS,比如工控机用的实时 OS 等)。只要使用 Linux Kernel,绝大部分硬件厂商都能适应。否则来个新 OS,硬件厂商又得开发驱动,还要做大量测试,这个所需的时间和金钱成本都非常巨大。
如果国产自主 OS 兼容 Android 的话,说明原有 Android 的功能等大概率会保留。这是从应用角度来看的。当然,也可以魔改 Android Framework,把内部实现都换成自己写的代码。但是要做到兼容的话,就必须对应用没有影响——这就回到软件界的一句老话,如果一个东西叫起来、走起路来都像鸭子的话,那它就是鸭子。从这个角度看,自主实现只是为了开发一套看起来和之前系统类似的话,意义并不重大,这种自主也很难被认可。当然,如果能提升原有系统的性能则另当别论,这属于优化和改善,和我们讨论的不是同一个东西。
所以,国产自主 OS 要么像 Android 一样基于 Linux 开发,但是套路和 Android 完全不一样的,比如像 Meego、Tizen 这样的。要么就是拓展 Android OS,开发出类似一个 H5 OS 之类的。
最后,如果抛弃 Linux 的话,可参考 Google 的 Fuchsia 了。Fuchsia 据说是一个微内核的新 OS 架构。不过,目前 OS 的前途并不明朗。OS 从来就不是一个纯软件的事情,还涉及到海量硬件厂商。它们甚至是一个 OS 生死存亡的决定者。