Android 系统开发做什么?
题外话
18 年我从 Android 应用开发转 Framework 层开发了,从此开启了 996 幸福生活,博客技术文更新基本停滞了,被工作占据了过多的精力,实在没时间像以前一样拟稿、写作,实践、反复修改去精心准备文章,另外也不知道该写什么了,很多经验心得都会涉及到项目本身,公司内部倒是写了不少总结文档,然而工作的事不便公开分享出来。我是一个在乎别人的看法,之前被很多人骂“江郎才尽”,其实我是很难受的。
在转 Framework 其实一开始我是很不适应,适应新环境也并没有想象当中那么容易,因此变得更不自信了,对自己的定位更加模糊,每半年换一个模块,从一开始做性能开发、转系统应用开发、又转通讯开发,刚有点感觉,因为工作调整,被安排做其他,技术没沉淀,总感觉虚的很。
Android 系统架构
这是来自官方 Android 系统架构,从上往下依次为应用框架(Application Framework)、Binder IPC proxies、系统服务(Android System Services)、硬件抽象层 (HAL)、Linux 内核。
Application Framework
从旧版架构图可以看出 Application Framework 大概有:
Binder IPC proxies
Binder 作为 Android 系统提供的一种通信方式,
Binder IPC 层:作为「系统服务层」与「应用程序框架层」的 IPC 桥梁,互相传递接口调用的数据,实现跨进层的通讯。
Android System Services
Android System Services 是专注于特定功能的模块化组件,如进行窗口相关的操作会用到窗口管理服务WindowManager
,进行电源相关的操作会用到电源管理服务PowerManager
,还有很多其他的系统管理服务,如通知管理服务NotifacationManager
、振动管理服务Vibrator
、电池管理服务BatteryManager
等。应用框架 API 所提供的功能可与系统服务通信,以访问底层硬件。
Android 包含两组服务:“系统”(诸如窗口管理器和通知管理器之类的服务)和“媒体”(与播放和录制媒体相关的服务)。
硬件抽象层 (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 系统开发涉及知识点非常多,需要潜下心来学习,目前我做的是多媒体显示服务模块,已经有段时间了,还只是知道的皮毛,路漫漫其修远兮,吾将上下而求索,想成为该领域的专家,还任重道远。
版权声明: 本文为 InfoQ 作者【吴小龙同学】的原创文章。
原文链接:【http://xie.infoq.cn/article/e9ee88f7f3669b1fa0cddff40】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论