Android
文章平均质量分 80
SherlockCharlie
这个作者很懒,什么都没留下…
展开
-
Android10.0 系统源代码编译
AndroidQ已改名Android10, 今天我们换一种方式来编译Android10。编译环境Windows10,VMware15,Ubuntu18.04, 虚拟环境。PC机,内存32G,CPU 16 核心,I7八代。Ubuntu18.04 虚拟机。源码下载下载 git :sudo apt-get install git配置PATH环境变量mkdir ~/binecho...原创 2019-12-19 14:22:39 · 12555 阅读 · 15 评论 -
Android9.0 系统源码编译
一个多月没写博客了,感觉不会再爱了。Android P 发布已经好久了,今天来尝一尝这块Pie。编译环境Ubuntu18.04, 双系统环境PC机,内存32G,CPU 16 核心,I7八代。源码下载镜像源 : https://aosp.tuna.tsinghua.edu.cn准备环境下载 git :sudo apt-get install git安装curl库:s...原创 2019-04-16 16:46:49 · 11682 阅读 · 5 评论 -
Android8.0 USB系统框架
USB(通用串行总线)主机模式向外设进行供电,使 Android 设备能够驱动 USB 总线,并且可以使用各种 USB 外设(包括音频接口,存储,MIDI),USB 和蓝牙低功耗连接都可以用于传输 MIDI 协议。USB配件模式,受外设供电驱动,包括数据传输,充电。USB开发模式,应用调试,唯一可见的外设功能是 Android fastboot 或 Android 调试桥 (adb)。fastbo...原创 2018-11-28 16:20:48 · 5580 阅读 · 2 评论 -
Android8.0 Rild守护进程
电话是一种开放的通信渠道,任何人都可以随时向任何电话号码致电或者发送短信,因此 Android 用户需要能够轻松屏蔽骚扰电话和短信。在 Android N 推出之前,Android 用户只能依靠下载的应用来限制来自骚扰电话号码的来电和短信。但是,由于没有适当的 API 来屏蔽来电和短信,这些应用大部分要么达不到预期效果,要么用户体验不佳。一些制造商可能会提供他们自己的开箱即用型屏蔽解决方案,但...原创 2018-11-13 14:05:47 · 1945 阅读 · 3 评论 -
Android8.0 存储系统
Android 一直在不断发展,可支持各种存储设备类型和功能。所有 Android 版本均支持配有传统存储(包括便携式存储和内置存储)的设备。便携式存储是指物理介质(如 SD 卡或 USB 设备),用于进行临时数据传输/文件存储。物理介质可以随设备一起保留更长时间,但并非固定在设备上,可以移除。自 Android 1.0 开始,SD 卡已可用作便携式存储;Android 6.0 增加对 USB 的...原创 2018-11-09 10:45:51 · 2163 阅读 · 1 评论 -
Android8.0 输入系统
Android 输入子系统名义上是由遍历系统多个层的事件管道组成,在最低层,物理输入设备会生成描述状态更改(例如按键按压和触摸接触点)的信号。设备固件以某种方式编码和传输这些信号,例如向系统发送 USB HID 报告或在 I2C 总线上产生中断。然后,信号由 Linux 内核中的设备驱动程序解码。Linux 内核为许多标准的外围设备提供驱动程序,特别是那些符合 HID 协议的外围设备。然而,原始...原创 2018-11-05 15:05:41 · 692 阅读 · 0 评论 -
Android8.0 蓝牙系统
Android 提供支持经典蓝牙和蓝牙低功耗的默认蓝牙堆栈。借助蓝牙,Android 设备可以创建个人区域网络,以便通过附近的蓝牙设备发送和接收数据,在 Android 4.3 及更高版本中,Android 蓝牙堆栈可提供实现蓝牙低功耗 (BLE) 的功能。要充分利用 BLE API,请遵循 Android 蓝牙 HCI 要求。具有合格芯片组的 Android 设备可以实现经典蓝牙或同时实现经典蓝...原创 2018-10-30 15:04:37 · 6745 阅读 · 0 评论 -
Android8.0 传感器系统框架
Android传感器属于虚拟设备,可提供来自以下各种物理传感器的数据:加速度计、陀螺仪、磁力计、气压计、湿度传感器、压力传感器、光传感器、近程传感器和心率传感器。下图显示的是 Android 传感器堆栈。尽管某些传感器可以绕过传感器中枢(如果存在)进行通信,但各个组件仅可与其上方和下方紧邻的组件通信。控制系统从应用向下流向传感器,数据从传感器向上流向应用。框架负责将多个应用关联到 HAL。HA...原创 2018-10-20 20:39:24 · 6292 阅读 · 3 评论 -
Android8.0 图形引擎与窗体管理服务
以上四篇从图形引擎的硬件抽象层,数据驱动,渲染,输出等方面来看Android的图形引擎,从引擎的输入这一角度来看,引擎数据输入端主要有UI, Camera, Media 等,今天我们从UI的角度来看,以Activity的setContentView为切入点,贯穿PhoneWindow, ViewRootImpl, WindowManager, WindowManagerService,直到引擎入口...原创 2018-10-13 11:19:02 · 1451 阅读 · 0 评论 -
Android8.0 图形引擎的核心 - BufferQueue
上三篇文章我们弄清了图形引擎的输出和动力泵,今天我们来看图形引擎的心脏。为了呈上启下,我们从Surface的创建开始看BufferQueue如何向SurfaceFlinger提供数据驱动这颗心脏跳动。1. Surface与Layer的创建窗体管理服务(WMS)通过SurfaceComposerClient创建Client与SurfaceFlinger交互,WMS负责窗体界面的优先级排序,剪切,...原创 2018-10-12 10:54:18 · 3882 阅读 · 0 评论 -
Android8.0 图形引擎的心跳 - Vsync信号
vsync是Android4.1黄油计划引入的三大核心元素之一,主要为解决用户交互体验差的问题。Android通过VSync机制来提高显示效果,通常这个信号是由显示驱动产生,这样才能达到最佳效果。但是Android为了能运行在不支持VSync机制的设备上,也提供了软件模拟产生VSync信号的手段。软vsync信号主要由闸刀控制线程EventControlThread,事件线程EventThread...原创 2018-09-23 11:12:06 · 2560 阅读 · 0 评论 -
Android8.0 HwComposer 硬件抽象层
图形引擎SurfaceFlinger作为图形系统的心脏,自然需要心跳动力,主要来自图形Composer。Composer有两种一种来自硬件驱动,一种来自软件模拟。今天我们来看Hardware部分。主要分析vsynct同步信号是如何产生传递的,为此我们将略过Fence机制(跨硬件同步),层级合成(硬件合成)相关的内容。1. DisplayHardware层frameworks\native\...原创 2018-09-12 16:47:38 · 10404 阅读 · 0 评论 -
Android8.0 帧缓冲硬件抽象层
之前用了一个月的时间去看Android对媒体系统,主要包括Audio,Media,Camera三个子系统;今天我们开始Android图形系统,图形系统在Android操作系统中的地位举足轻重,是用户最直接的交互界面,同时也是Android中最复杂的系统,近年来AR,VR,的发展使得图形系统变得越发复杂。我们将从图形系统的核心引擎SurfaceFlinger入手,一路往上到Framework层,从多...原创 2018-09-08 19:23:00 · 1570 阅读 · 2 评论 -
Android8.0 Camera系统架构(二)
上一篇我们从最新的Camera架构来分析Camera子系统,今天我们将从全局的视角从旧版本到新版本架构整体通览一遍,从Framework层的API(1和2)到硬件抽象层的HAL(1和3)。废话少说一起来看一下整体架构:...原创 2018-08-29 16:06:32 · 3158 阅读 · 2 评论 -
Android8.0 Camera系统架构(一)
随着Android系统的不断升级,相机子系统框架也在不断进化,由最初的API1和HAL1到现在的API2和HAL3,由最初简单的拍照,录制到现在的连拍,AI人像;可以说是架构上变动最大最频繁的子系统。整个架构可以从下面这张图看出来:Android 的相机硬件抽象层 (HAL) 可将 Camera 2 中较高级别的相机框架 API 连接到底层的相机驱动程序和硬件。相机子系统包括相机管道组件的...原创 2018-08-27 22:50:05 · 16639 阅读 · 0 评论 -
Android8.0 Media系统(二)
上一篇从MediaPlayer的创建,设置数据源,播放准备三个流程来看Media系统,今天我们继续来看initFromDataSource()函数,将创建数据提取器,数据提取器将读取数据源文件的元数据信息,将每一路数据流的比特率进行累加,分离数据流,音频/视频/字幕分离:设置视频源mVideoTrack ;设置音频源mAudioTrack;分离字幕等。废话少说直接上代码。1. 数据提取st...原创 2018-08-21 11:46:22 · 1999 阅读 · 0 评论 -
Android8.0 Media系统(一)
以上四篇对Audio系统的简要分析,由于Audio涉及的范围比较广,以后分析其他子系统时在做详细分析。我们继续Media系统的征程,Media系统任然是一个庞大的系统,以MediaPlayer为例,贯穿了Java,JNI,C++库,硬件抽象层,OpenMax驱动,涉及到音视频,编解码等内容。...原创 2018-08-20 21:18:48 · 4357 阅读 · 0 评论 -
Android8.0 Audio系统之硬件抽象层
经过以上三篇对AudioTrack,AudioFlinger, AudioPolicy的分析,发现音频数据经过AudioTrack,通过AudioPolicy路由,由AudioFlinger的各路线程混合输出到合适的Audio设备去。我们再分析AudioFlinger构造函数的时候涉及到音频硬件抽象层但是没有深入研究,现在,我们回过头来继续看看。1. Audio系统设备抽象AudioFli...原创 2018-08-14 15:52:48 · 4474 阅读 · 0 评论 -
Android8.0 Audio系统之AudioPolicy
上一篇我们跟踪分析了AudioFlinger,它是Audio系统的核心,但是AudioFlinger却不能脱离AudioPolicy工作。AudioPolicy模块承载着音频切换,音轨路由的重要工作,没有它,音频输出将乱套。在分析AudioFlinger的时候我们稍微涉及了AudioPolicyService,现在我们重新来看它。void AudioPolicyService::onFirst...原创 2018-08-14 11:43:43 · 8900 阅读 · 0 评论 -
Android8.0 Audio系统之AudioFlinger
继上一篇AudioTrack的分析,本篇我们来看AudioFlinger,AF主要承担音频混合输出,是Audio系统的核心,从AudioTrack来的数据最终都会在这里处理,并被写入到Audio的HAL。frameworks\av\services\audioflinger\AudioFlinger.cppAudioFlinger::AudioFlinger() : BnAudio...原创 2018-08-13 16:52:40 · 10811 阅读 · 0 评论 -
Android8.0 Audio系统之AudioTrack
继上一篇Android硬件抽象层和HAL层Binder框架,我们这次选择Audio系统来研究,之所以选择Audio系统,并非Audio系统简单,恰恰是因为Audio系统复杂。Audio系统与Media系统,Surface系统,通话系统,蓝牙系统…都有交互,可见Audio系统的复杂度。我们将从四个层面去剖析Audio系统:1. AudioTrack , 2. AudioFlinger , 3. Au...原创 2018-08-13 11:46:46 · 5870 阅读 · 0 评论 -
Android8.0 硬件抽象层实现分析
众所周知Android是基于Linux内核的开放性系统,我们可以看到Google开放的大部分操作系统实现代码。之所以说它是开放的而不是开源的,是因为Android系统代码不是完全开源的。这始于Linux内核开源协议和第三方厂商隐私安全的矛盾,为了绕过之一矛盾,Google构建了HAL,通过它在在遵守Linux协议的同时,又能保护第三方厂商的利益;既然能这么牛,那么Google是如何做到的呢,秘密就...原创 2018-08-07 15:30:26 · 2816 阅读 · 0 评论 -
Android8.0 Binder之面向HAL服务(二)
上一篇我们从Binder在系统native层的服务管理与提供机制,它与Framework的native层的实现大不相同,但是实现思想是一致的,都是需要借助Binder驱动来实现服务的管理与跨进程使用。只不过,由于业务层需要导致实现上的不同,比如HAL层的Binder框架并没有将通讯和业务绞和起来,所以在业务逻辑处理上更为复杂,当然复杂是为了更好的适应业务需求。那么我们不妨回到Java层看看Java...原创 2018-07-31 13:51:33 · 2868 阅读 · 1 评论 -
Android8.0 Binder之面向HAL服务(一)
前两篇文章我们简要分析了Android8.0系统下框架层的Binder框架,包括servicemanager, native和java层面的binder顶层框架。今天我们来看binder在HAL层是如何实现跨进程管理的,在Android8.0的HAL层,HAL通过Binder将各种硬件驱动抽象为硬件服务,以削弱快速的版本更新带来的影响,通过只更新Framework层来达到消灭系统碎片化。废话少说,...原创 2018-07-30 23:11:59 · 2967 阅读 · 0 评论 -
Android8.0 Binder之面向系统服务(二)
上一篇文章我们上一篇文章我们着重分析了: 1.Binder在Native层如何巧妙的将通讯与业务结合起来; 2.服务是如何路由的。原创 2018-07-24 20:56:34 · 543 阅读 · 1 评论 -
Android8.0 Binder之面向系统服务(一)
Android碎片化问题一直是OS更新的痛点,Google在Android8.0引入的Treble旨在解决Android长期以来碎片化严重的问题,Treble计划将Binder扩展为三角结构,分别对应dev/binder,dev/vndbinder,dev/hwbinder;其中binder和vndbinder 通过上下文区分的形式共用代码,hwbinder则独立出来;在Android8.0以前F...原创 2018-07-24 13:17:48 · 2489 阅读 · 2 评论 -
Android8.0 系统启动之孵化
上一篇讲到Android系统的孵化准备阶段,有了准备阶段的环境,接下来进入孵化阶段。frameworks/base/cmds/app_process/app_main.cppint main(int argc, char* const argv[]){ if (!LOG_NDEBUG) { //打印启动参数 String8 argv_String; for...原创 2018-07-18 08:38:27 · 883 阅读 · 0 评论 -
Android8.0 系统启动之孵化准备
在帕美尔省后面有一座金刚山,它有一小时路程高,一小时路程宽,一小时路程深。有一只鸟每隔一百年飞到这里来一次,在这座山上磨一磨它的小嘴。要等到这座山完全磨平,那么永恒的第一秒钟才算过去。 ———– 坚持Android系统启动过程较为复杂,主...原创 2018-07-15 17:40:57 · 1289 阅读 · 0 评论 -
Android8.0 系统源码编译
Android8.1系统源码编译编译环境:Ubuntu18.04 硬件环境:ThinkPad编译准备安装jdk sudo apt-get update sudo apt-get install openjdk-8-jdk sudo apt-get install openjdk-8-jre 安装依赖 sudo apt-get install -...原创 2018-07-07 18:00:49 · 3358 阅读 · 2 评论