题外话

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 系统开发涉及知识点非常多,需要潜下心来学习,目前我做的是多媒体显示服务模块,已经有段时间了,还只是知道的皮毛,路漫漫其修远兮,吾将上下而求索,想成为该领域的专家,还任重道远。

Android 系统开发做什么?相关推荐

  1. Android系统开发和性能优化——查漏补缺【建议收藏】

    做了这么久性能相关的工作,也接触了不少模块,说实话要做好性能这一块,真心不容易.为什么这么说? 是因为需要接触的知识实在是太多了, Android 是一个整体,牵一发而动全身,不是说只懂一个模块就可以 ...

  2. Android菜鸟如何学习Android系统开发?

    如何做好Android学习前的准备? 如果你已经确定了学习Android的目标,那么,应该提前做好哪些工作.先打下哪些基础呢? 首先,你最好先熟悉一门编程语言,现在大学里面和计算机相关的专业甚至理工类 ...

  3. Android系统开发:短信的号码拦截

    Android系统开发:短信的号码拦截 Code:Android源码 功能要求:针对某号码,短信的接收与发送的监听与拦截. 设备对该号码发送短信的拦截 实现思路 : 应用发送短信(无论是否是默认短信) ...

  4. 工作感悟之Android系统开发入门

    从离开学校到工作快两年了,这期间感悟良多,喜悦.悲伤.希望.失望...总的说来在曲折中不断前进,相信乘风破浪会有时,直挂云帆济沧海. 从事Android有些偶然因素,原始打算做WPF相关的开发,或是C ...

  5. Android菜鸟如何学习Android系统开发?(

    如何做好Android学习前的准备? 如果你已经确定了学习Android的目标,那么,应该提前做好哪些工作.先打下哪些基础呢? 首先,你最好先熟悉一门编程语言,现在大学里面和计算机相关的专业甚至理工类 ...

  6. Android系统开发 默认壁纸的定制 主题风格的开发及定制 DDMS 常用adb 命令 抓取Log

    Android系统开发             Android系统本身的功能在增加和完善过程中.在系统开发中如果涉及系统API的改动,则一定要慎重,系统的API的改动可能涉及Android应用程序的不 ...

  7. Android NDK开发之 Android系统开发中LOG的使用

    浅谈Android系统开发中LOG的使用 转自:http://blog.csdn.net/luoshengyang/article/details/6581828

  8. Android系统开发 ----- 系统服务开发

    系列文章目录 Android系统启动 ---- 主要流程类_MrDarly的博客-CSDN博客Android系统启动Zygote关系主要的类https://blog.csdn.net/weixin_6 ...

  9. Android系统开发:GMS包移植

    Android系统开发:GMS包移植 首先,我们拿到一份完整的GMS包应该是如下图所示: 简单介绍每一个目录的作用 1)apps以及apps_go : 这里面就是google释放的apk资源文件,其中 ...

最新文章

  1. python参数类型限定_python限定方法参数类型、返回值类型、变量类型等|python3教程|python入门|python教程...
  2. 把一个人的特点写具体作文_部编版五年级下册语文习作把一个人的特点写具体教案课件+范文...
  3. fatal: Unsupported SSL backend ‘“openssl”‘. Supported SSL backends:
  4. iphone,ipad,关于icon图标的那些事
  5. python 搭建ftp服务器
  6. 关于Java招聘那点事
  7. pytorch 查看gpu cuda版本
  8. ARC下的所有权修饰符
  9. 2013年第四季度总结报告
  10. OpenStack构架知识梳理
  11. xp系统web服务器搭建教程,Windows_XP配置WEB服务器教程(图)
  12. Azure认知服务之表单识别器
  13. Cloud一分钟 | 北京13部门召开座谈会,要求阿里京东等平台规范开展双11促销活动...
  14. android studio 1.2.1.1导入library project(以sharesdk为例)
  15. iOS 关于TouchID指纹解锁的实现
  16. 内容营销——网络营销的杀手级武器
  17. 从解放劳动力来看未来的科技进程
  18. 11 EDA技术实用教程【时序电路的Verilog设计2】
  19. JVM内存模型和java内存模型
  20. 基于linux 的 PCI PCIe 总线分析总结

热门文章

  1. 安装pr说找不到adobe服务器,Adobe 安装错误代码对照表及解决方案
  2. java编程语言的优点
  3. 帝国CMS仿《3641图库》模板/图片网站源码/带WAP手机站带数据
  4. codeforces Hello 2021
  5. 华为认证723(自用)
  6. 华为HCIP—Datacom(821新增)
  7. 显示IP属地之后,有的人慌了!而有的人却发了?
  8. lcd驱动分析(读书笔记)
  9. 独家:苏宁消费金融拟更换总经理
  10. 遗传算法的交叉算子:部分匹配交叉(PMX)、有序交叉(OX)、循环交叉(CX)、两点交叉等讲解