题外话
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 | 账户治理服务,是指联系人账户 |
ContentService | ContentProvider 服务,提供跨过程数据交换 |
BatteryService | 电池治理服务 |
LightsService | 自然光强度感应传感器服务 |
VibratorService | 触动器服务 |
AlarmManagerService | 定时器治理服务,提供定时揭示服务 |
BluetoothService | 蓝牙服务 |
DevicePolicyManagerService | 提供一些零碎级别的设置及属性 |
StatusBarManagerService | 状态栏治理服务 |
ClipboardService | 零碎剪切板服务 |
InputMethodManagerService | 输入法治理服务 |
NetworkStatsService | 网络状态服务 |
NetworkManagementService | 网络管理服务 |
ConnectivityService | 网络连接治理服务 |
MountService | 挂载服务 |
NotificationManagerService | 告诉栏治理服务 |
DeviceStorageMonitorService | 磁盘空间状态检测服务 |
LocationManagerService | 地理位置服务 |
SearchManagerService | 搜寻治理服务 |
WallpaperManagerService | 墙纸治理服务,墙纸不等同于桌面背景,在 View 零碎外部,墙纸能够作为任何窗口的背景 |
AudioService | 音频治理服务 |
BackupManagerService | 零碎备份服务 |
AppWidgetService | Widget 服务 |
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 零碎开发波及知识点十分多,须要潜下心来学习,目前我做的是多媒体显示服务模块,曾经有段时间了,还只是晓得的皮毛,路漫漫其修远兮,吾将上下而求索,想成为该畛域的专家,还任重道远。