引用:https://mp.weixin.qq.com/s?__biz=MzA4MjA0MTc4NQ==&mid=504090090&idx=1&sn=eba182e0b1d4fe373c1d81041d67461d#rd
读在最前面,工欲善其事,必先利其器。但是在你利其器之前,你需要的知道,“器”的内部结构,了解以后你开发学习利“器”的原理。
Android负责人Dan Morrill说:“ Android并不是传统的Linux风格的一个规范或分发版本,也不是一些列可重用的组件集成,Android是一个用于连接设备的软件块。”
整理笔记的时候 发现以前划分的Android系统底层架构有点小变动,相比较之前的划分来说,更加的细致。层次结构更合理。
Android 是一种基于 Linux 的开放源代码软件栈,为广泛的设备和机型而创建。
ps:附赠一个中文版的
(这里是参照安卓开发文档写的,另外补充一点以前的笔记,相当于一个笔记总结)
相比较旧的,新的划分添加了一层 HAL层(硬件抽象层 (HAL)):
硬件抽象层 (HAL):
提供标准界面,向更高级别的 Java API 框架显示设备硬件功能。HAL 包含多个库模块,其中每个模块都为特定类型的硬件组件实现一个界面,例如相机或蓝牙模块。当框架 API 要求访问设备硬件时,Android 系统将为该硬件组件加载库模块。
Linux内核 设备驱动程序层(Linux Kernel):
Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,例如线程和低层内存管理。使用 Linux 内核可让 Android 利用主要安全功能,并且允许设备制造商为著名的内核开发硬件驱动程序。
该层主要包括:驱动、内存管理、进程管理、网络协议等组件。
原生 C/C++ 库:
许多核心 Android 系统组件和服务(例如 ART 和 HAL)构建自原生代码,需要以 C 和 C++ 编写的原生库。Android 平台提供 Java 框架 API 以向应用显示其中部分原生库的功能。例如,您可以通过 Android 框架的 Java OpenGL API 访问 OpenGL ES,以支持在应用中绘制和操作 2D 和 3D 图形。
如果开发的是需要 C 或 C++ 代码的应用,可以使用 Android NDK 直接从原生代码访问某些原生平台库。
1. Java不能直接访问硬件,要访问硬件,必须使用NDK。NDK是由c/c++语言编写的库(.so文件),该层是对应用程序框架层提供支持的层。
2. SSL:Secure Sockets Layer安全套接字层
3. libc:C运行时库
4. WebKit:负责浏览器支持(Chrome和Safari都使用该库来支持浏览器)
5. FreeType:负责字体支持
Android Runtime:
对于运行 Android 5.0(API 级别 21)或更高版本的设备,每个应用都在其自己的进程中运行,并且有其自己的 Android Runtime (ART) 实例。ART 编写为通过执行 DEX 文件在低内存设备上运行多个虚拟机,DEX 文件是一种专为 Android 设计的字节码格式,经过优化,使用的内存很少。编译工具链(例如 Jack)将 Java 源代码编译为 DEX 字节码,使其可在 Android 平台上运行。
ART 的部分主要功能包括:
预先 (AOT) 和即时 (JIT) 编译
优化的垃圾回收 (GC)
更好的调试支持,包括专用采样分析器、详细的诊断异常和崩溃报告,并且能够设置监视点以监控特定字段
在 Android 版本 5.0(API 级别 21)之前,Dalvik 是 Android Runtime。如果您的应用在 ART 上运行效果很好,那么它应该也可在 Dalvik 上运行,但反过来不一定。
Android 还包含一套核心运行时库,可提供 Java API 框架使用的 Java 编程语言大部分功能,包括一些 Java 8 语言功能
应用程序框架层(Application FrameWork):
该层一般都是开发人员直接调用的API。该层主要由Java语言编写。
应用程序层(Applications):
由运行在Dalvik虚拟机上的app组成。(Dalvik是Google公司为Android专门设计的Java虚拟机,运行Java程序的速度比JVM更快,以此来克服手持设备在内存、处理器速度和功率等方面上的限制)。该层由Java语言编写。
a. Dalvik是冰岛一个小镇的名字。Dalvik VM获取生成的java类文件,将它们组合为一个或者多个、Dalvik可执行文件(.dex)。Dalvik VM的目标是找到所有可能的方式来优化JVM性能、内存及电池寿命。
b. 采用Dalvik VM的一个结果是,Android中最终的可执行程序代码不是java字节码,而是.dex文件。这意味着无法直接执行java字节码,必须得到java的类文件,然后将它们转换为.dex文件。
———————————————————————————————————————
Java API 框架:
您可通过以 Java 语言编写的 API 使用 Android OS 的整个功能集。这些 API 形成创建 Android 应用所需的构建块,它们可简化核心模块化系统组件和服务的重复使用,包括以下组件和服务:
丰富、可扩展的视图系统,可用以构建应用的 UI,包括列表、网格、文本框、按钮甚至可嵌入的网络浏览器
资源管理器,用于访问非代码资源,例如本地化的字符串、图形和布局文件
通知管理器,可让所有应用在状态栏中显示自定义提醒
Activity 管理器,用于管理应用的生命周期,提供常见的导航返回栈
内容提供程序,可让应用访问其他应用(例如“联系人”应用)中的数据或者共享其自己的数据
开发者可以完全访问 Android 系统应用使用的框架 API.。
学习安卓的路线图
- 学习Android要具备的基础知识
- JavaSE基本知识:集合、IO操作、线程
- WEB开发知识:HTML、jsp、servelet
- 服务器开发知识:jdbc数据库操作(Mysql)
谈点个人的小想法,很多人在之前学习安卓的时候觉得很多需要学习的东西,但是在实际开发过程中,你需要的不是所有的技能,只是部分,现在的学习过程只是一个基础的过程。希望能好好理解。