题外话

18 年我从 Android 利用开发转 Framework 层开发了,从此开启了 996 幸福生活,博客技术文更新根本停滞了,被工作占据了过多的精力,切实没工夫像以前一样拟稿、写作,实际、重复批改去精心筹备文章,另外也不晓得该写什么了,很多教训心得都会波及到我的项目自身,公司外部倒是写了不少总结文档,然而工作的事不便公开分享进去。我是一个在乎他人的认识,之前被很多人骂“江郎才尽”,其实我是很好受的。

在转 Framework 其实一开始我是很不适应,适应新环境也并没有设想当中那么容易,因而变得更不自信了,对本人的定位更加含糊,每半年换一个模块,从一开始做性能开发、转零碎利用开发、又转通信开发,刚有点感觉,因为工作调整,被安顿做其余,技术没积淀,总感觉虚的很。

Android 零碎架构

这是来自官网 Android 零碎架构,从上往下顺次为利用框架(Application Framework)、Binder IPC proxies、零碎服务(Android System Services)、硬件形象层 (HAL)、Linux 内核。

Application Framework

从旧版架构图能够看出 Application Framework 大略有:

名称简介
Activity Manager用来管理应用程序生命周期并提供罕用的导航回退性能。
Window Manager提供一些咱们拜访手机屏幕的办法,如屏幕的透明度、亮度、背景。
Content Providers使得应用程序能够拜访另一个应用程序的数据(如联系人数据库), 或者共享它们本人的数据。
View System能够用来构建应用程序, 它包含列表(Lists),网格(Grids),文本框(Text boxes),按钮(Buttons), 甚至可嵌入的 web 浏览器。
Notification Manager使得应用程序能够在状态栏中显示自定义的提示信息。
Package Manager提供对系统的安装包的拜访,包含装置、卸载利用,查问 permission 相干信息,查问 Application 相干信息等。
Telephony Manager次要提供了一系列用于拜访与手机通信相干的状态和信息的办法,查问电信网络状态信息,SIM 卡的信息等。
Resource Manager提供非代码资源的拜访,如本地字符串,图形,和布局文件(Layout files )。
Location Manager提供设施的地址地位的获取形式,很显然,GPS 导航必定能用到位置服务。
XMPP可扩大通信和示意协定,前身为 Jabber,提供即时通信服务。例如推送性能,Google Talk。

Binder IPC proxies

Binder 作为 Android 零碎提供的一种通信形式,
Binder IPC 层:作为「零碎服务层」与「应用程序框架层」的 IPC 桥梁,相互传递接口调用的数据,实现跨进层的通信。

Android System Services

Android System Services 是专一于特定性能的模块化组件,如进行窗口相干的操作会用到窗口治理服务WindowManager,进行电源相干的操作会用到电源治理服务PowerManager,还有很多其余的系统管理服务,如告诉治理服务NotifacationManager、振动治理服务Vibrator、电池治理服务BatteryManager等。利用框架 API 所提供的性能可与零碎服务通信,以拜访底层硬件。

Android 蕴含两组服务:“零碎”(诸如窗口管理器和告诉管理器之类的服务)和“媒体”(与播放和录制媒体相干的服务)。

名称简介
PowerManagerService电源治理服务
WindowManagerService最外围的服务之一,负责窗口治理
ActivityManagerService最外围的服务之一,治理 Activity
PackageManagerService程序包治理服务
AccountManagerService账户治理服务,是指联系人账户
ContentServiceContentProvider 服务,提供跨过程数据交换
BatteryService电池治理服务
LightsService自然光强度感应传感器服务
VibratorService触动器服务
AlarmManagerService定时器治理服务,提供定时揭示服务
BluetoothService蓝牙服务
DevicePolicyManagerService提供一些零碎级别的设置及属性
StatusBarManagerService状态栏治理服务
ClipboardService零碎剪切板服务
InputMethodManagerService输入法治理服务
NetworkStatsService网络状态服务
NetworkManagementService网络管理服务
ConnectivityService网络连接治理服务
MountService挂载服务
NotificationManagerService告诉栏治理服务
DeviceStorageMonitorService磁盘空间状态检测服务
LocationManagerService地理位置服务
SearchManagerService搜寻治理服务
WallpaperManagerService墙纸治理服务,墙纸不等同于桌面背景,在 View 零碎外部,墙纸能够作为任何窗口的背景
AudioService音频治理服务
BackupManagerService零碎备份服务
AppWidgetServiceWidget 服务
DiskStatsService磁盘统计服务
SurfaceFlinger负责 Layer 合成(composer),创立 surface,治理 surface

硬件形象层 (HAL)

HAL 可定义一个标准接口以供硬件供应商实现,该接口使 Android 无需思考底层驱动程序的实现。应用 HAL 可使您实现性能而不会影响或批改更高级别的零碎。HAL 实现会被封装成模块,并会由 Android 零碎适时地加载。

Linux 内核

Android 基于 Linux 提供外围零碎服务,如显示驱动、Camera 驱动、蓝牙驱动、音频系统驱动、Binder (IPC) 驱动、USB 驱动、WiFi 驱动、电源治理等。

Linux 内核也作为硬件和软件之间的形象层,它暗藏具体硬件细节而为下层提供对立的服务。

开发

谷歌公布版本,就是 AOSP 原生代码。AOSP 原生代码只反对极少数几款手机,比方 Pixel。

芯片厂商如高通、MTK、展锐在 AOSP 根底上公布本人的版本,每个芯片厂商会在 AOSP 原生代码上叠加本人的性能,比方双卡双待性能。

咱们开发就是芯片商开释的代码,咱们工作大部分就是解 Bug,比拟低级,有局部需要定制,也根本是依赖芯片商反对。

从编程语言上来说,Android 零碎层有很大一部分是用 Java 开发的。另外还有一大部分是用 Native(C/C++)语言开发的,要想在这个畛域做到熟能生巧,对 Java 和 C++语言要理解。

Android 零碎开发波及知识点十分多,须要潜下心来学习,目前我做的是多媒体显示服务模块,曾经有段时间了,还只是晓得的皮毛,路漫漫其修远兮,吾将上下而求索,想成为该畛域的专家,还任重道远。