![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
android源码
文章平均质量分 90
帅气好男人_Jack
找工作,求推荐成都地区的工作。
展开
-
音频Balance源码总结
顾名思义,Balance及平衡,平衡也就是涉及多方,音频左右甚至四通道,调节所有通道的音量比,使用户在空间内听到各个通道的音频大小不一,好似置身于真实环境中;博主分析的Balance源码在。原创 2024-06-27 19:02:30 · 1109 阅读 · 0 评论 -
音频焦点使用及原理
因为实际上就是通过这种流程触发的,假如我们第一个音乐App申请焦点成功后,在播放音乐music,此时它的FocusRequestor位于FocusStack栈顶,此时若有电话接入,电话App应用会申请音频焦点,电话App会位于FocusStack的栈顶,而music的app在电话App的下面,就会触发对于音乐App失去焦点的回调,当然还有其他焦点触发变化的情况,此处解释就是上述流程图的。这里主要分析上节的2和3步骤,申请焦点与焦点回调两个过程,在framework中是如何运作的?原创 2023-05-06 14:56:23 · 2312 阅读 · 0 评论 -
Android Audio音量设置原理流程分析
在改变音量时或插入耳机设备时,防止音量突变过大,对人耳造成伤害;如手机上music的音量设置到最大值,当我们插上耳机戴上时,如果音量仍不变保持最大输出,听力可能会受损,这时这个安全音量设备就其作用了,插入耳机时音量值变为安全音量值,保护我们的听力。以上代码关键理解点在于return这句,srcRange代表srcStream可调整的音量等级范围,假如[1, 10],同理dstRange,有可能是[10, 20],如传入的srcStream的index音量等级是5,对应到dstStream是都少呢?原创 2023-04-11 20:43:44 · 5132 阅读 · 1 评论 -
MediaPlayer框架总结
在GenericSource中,FileSource是与本地音视频文件直接连接的一个类,而MediaExtractor则是不同类型音频的解析类,如wav、mp3、midi等多达十多个的解析解析类,不同的音频文件会创建不同Extractor类,但是他们都集成MediaExtractor,拥有统一的操作API接口,而这些Extractor类使用类似链式的模式,最后都指向FileSourece,逐级解析音频,拿到文件里面的metaData元数据以及音频数据。暂用一幅图总结,待后续有时间了在细细补充;原创 2023-03-24 10:17:07 · 375 阅读 · 0 评论 -
Audio解析strategy配置文件
Audio解析strategy配置文件简介audio_policy_configuration配置文件配置了音频Audio的设备、数据流信息,而strategy相关配置文件则配置某种streamType的音频使用哪种音量曲线,如voice_call和music他们的音量曲线是不一样,后者这种关系叫做strategy策略.默认解析路径在/vendor/etc/audio_policy_engine_configuration.xml下,如果找不到可以去:char* POLICY_USAGE_LIBRA原创 2021-12-30 20:42:59 · 3873 阅读 · 0 评论 -
Android Audio混音实践篇
Android Audio混音实践篇简介本篇文章主要介绍Android Audio模块的MixerThread混音业务如何实现的?建议在阅读这篇文章之间先阅读混音理论基础篇,并且在分析源码之前:头脑里构想一个大致的混音过程,多路音频AudioTrack叠加在一起进行混音,多路音频混音的是数据对象是pcm数据,它如何叠加,混音后的音量又是如何处理?首先回忆一下单路AudioTrack的音频播放流程,如下:应用层创建AudioTrack,并配置播放音频的模式mode、采样率、format以及usag原创 2022-04-27 21:07:07 · 9001 阅读 · 23 评论 -
混音理论篇
混音基础理论篇什么是声音声音是由物体震动,从而对周围空气产生的一种挤压压力,形成的声音效果。可以在脑海中想象一下水波纹的效果图。并且声音在传输时需要介质,无介质如真空是无法传递声音的,由于声音从音源出来会经过各种反射如墙面,各种反射声音经过叠加混音后传入人耳,才是我们听到的声音,所以大部分情况下我们听到的都是混音,除混音外也有可能同一音源经过墙面反射后先后到达我们的耳朵,但当两次声音间隔小于0.1s时人耳是无法感知的。声音的基本属性从上图声波示图中,知道波有频率、振幅和波形等特性,频率代表音阶原创 2022-03-05 22:06:22 · 3645 阅读 · 2 评论 -
Android Audio播放音频之数据传递
AudioTrack之数据传递简介接上一篇AudioTrack播放音频之建立通道找到了通道的唯一句柄值output,这个output实质就是在AudioFlinger创建PlaybackThread后,以key-value形式上保存(output, PlaybackThread)的key值,通过output就可以找到播放音频将从哪个PlaybackThread线程传递数据,这个线程相当于一个中间角色,应用层进程将音频数据以匿名共享内存方式传递给PlaybackThread,而PlaybackThrea原创 2022-02-10 20:05:26 · 8418 阅读 · 4 评论 -
Audio播放音频 --- 建立播放通道
Audio播放音频 — 建立播放通道简介虽然文章标题是《建立播放通道》,其实播放通道早在AudioPolicyManager解析configuration配置文件时,openoutput业务逻辑就已经把输出通道打开并建立好了,而播放音频流程就是根据音频属性Attribute来决定使用哪个输出通道output而已,但是这个流程业务相对openoutput更加复杂,也涉及更多的音频专业知识;并且播放音频不只是选择输出通道,还涉及往这个输出通道灌音频数据,传送到设备去播放;本篇文章只涉及输出通道的选择,音频原创 2022-01-12 20:06:36 · 7881 阅读 · 5 评论 -
音频Open Output业务逻辑
open output顾名思义,你可以理解为打开一条输出通道,这条通道上跑着一定格式、采样率等特定的数据,通道的终点是一个音频设备,用于播放;所以这个open output业务就是初始化这条通道,为这个通道建立各种所需功能等。原创 2021-12-24 20:38:07 · 3774 阅读 · 0 评论 -
AudioFlinger、AudioPolicyService和AudioPolicyManager之间的关系?
AudioFlinger和AudioPolicyService属于binder服务,而AudioPolicyManager是AudioPolicyService服务进程下的一个独立功能模块,该模块可以由厂家自行实现(但必须遵循aosp的接口定义),最后提供so库,由AudioPolicyService服务load进来调用即可。原创 2021-12-22 20:40:49 · 5762 阅读 · 2 评论 -
audio_policy_configuration.xml文件解析
audio_policy_configuration.xml文件解析简介audio音频数据从一个源走到一个目的都是需要根据配置文件来决定,所以理解configuration配置文件中各个标签项转化为c++实体类的及各成员至关重要,本文先直接给出各标签和对应实体类的结果,后再简单分析其解析过程audio_policy_configuration.xml文件对应C++实体类configuration文件(audio_policy_configuration的缩写)为音频audio的设备、流以及路由等配原创 2021-12-16 20:26:18 · 9385 阅读 · 0 评论 -
枚举对比转换思路
枚举对比转换思路需求分析在Android系统开发中,我们经常会有这样的需求:a. 首先,我们会在代码中定义许多配置类型,如定义音频输出设备,耳机、扬声器、蓝牙音箱等等,你会想到用枚举,如下:enum audio_device_t { AUDIO_DEVICE_OUT_EARPIECE, AUDIO_DEVICE_OUT_SPEAKER, ....};b. 其次,我们在使用时会配置我们的输出设备,你可以在代码或者xml配置文件中配置,通常我们使用时,不一定和定义enum类原创 2021-12-16 20:23:29 · 1874 阅读 · 0 评论 -
Android 8.1高通msm8950平台Camera HAL层架构
Android 8.1 Camera架构及API解释基础使用先看看基础适用,然后以此为例逐步展开获取camera service服务CameraManager service = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);打开相机,并传入回调service.openCamera(cameraId, stateCallback, handler);private CaptureRequest.Builder原创 2020-12-04 17:51:22 · 1608 阅读 · 1 评论 -
解析高通vendor层mct框架
解析qcom mct module凡越底层的代码,更能体现代码的精髓所在 — 数据结构 + 算法模型,所以在研究其代码时,可以先重点关注其数据结构,能更好的帮助我们解析其背后的原理逻辑!今天来分析一下高通的camera vendor下与camera hal相关的部分,mct模块,mct算是其中一个基础模块,其他所有的sensor、isp、imagelib等都会使用mct,所以对它的理解至关重要,更能帮助我们理解其他模块基础数据结构体mct_module_tmct_module_t是mct的重要模块原创 2020-12-04 16:16:57 · 5122 阅读 · 1 评论 -
Android组件View绘制流程原理分析
Android组件View绘制流程原理分析android视图构成如上图,Activity的window组成,Activity内部有个Window成员,它的实例为PhoneWindow,PhoneWindow有个内部类是DecorView,这个DecorView就是存放布局文件的,里面有TitleActionBar和我们setContentView传入进去的layout布局文件Window类时一个抽转载 2017-02-06 17:55:39 · 1006 阅读 · 1 评论 -
Android进阶 --- ActivityManagerService模块分析
Android进阶 — ActivityManagerService模块分析简介作为一名合格的Android开发工程师,我们不仅要会使用四大组件,并且要知晓其背后运作的原理!当我们学会了其背后的运作原理,才能更好的帮助我们进行开发工作,知晓每个组件是如何与系统进行交互、数据传递以及调用逻辑,当遇bug难题,才能更好的对症下药及时解决。本博文是由android8.1.0源码分析后的结果AMS模块重点结构类解释四大组件如Activity的打开、关闭等操作都是由App进程通过Binder跨进程调用原创 2020-10-14 17:53:48 · 2627 阅读 · 2 评论 -
Activity屏幕旋转重建ViewModel不销毁问题分析
Activity屏幕旋转重建ViewModel不销毁问题分析ViewModel是数据与页面解耦的一大利器,使用ViewModel无须关系其与Activity的生命周期引起的问题,在Activity生命周期的尽头会自动移除掉ViewModel,切断与Activity的联系,及时后续有ViewModel的事件传递过来,也无法达到Activity,不会引起任何bug疑惑???但是在某种情况下,却出现这样一个情况!Activity配置横竖屏自动切换,当Activity屏幕切换时,其生命周期已经走到尽头,on原创 2020-10-12 18:27:29 · 2080 阅读 · 5 评论 -
android 源码部分API
android 源码部分API本文记录博主在阅读android源码过程中底层部分API!sp<Surface> android_view_Surface_getSurface(JNIEnv* env, jobject surfaceObj)参数:surfaceObj – java对象Surface返回:java对象Surface有一个long类型的mNativeObject成员,它表示java对象Surface持有Native层Surface的指针,该函数就是返回这个指针ANat原创 2020-09-04 13:02:32 · 369 阅读 · 0 评论 -
PMS
PackageMangerService源码阅读总结简介PackageMangerService(简称PMS)是Android系统中负责管理所有Apk的安装、卸载更新等工作,其运行在SystemServer进程,维护管理系统中所有的Apk包管理,那它是如何管理众多APK的呢?它怎么知道系统中有哪些APK应用,这些Apk在什么时候安装、卸载和更新,PMS如何感知?就算它知道了系统中所有APK的存在,如何去建立一个维护呢?带着以上诸多疑问,从源码的角度,来探寻这些问题,感悟PMS的精髓所在!浅析自己原创 2020-08-13 16:30:14 · 1071 阅读 · 0 评论 -
Android LocalSocket、LocalServerSocket原理分析
Android LocalSocket、LocalServerSocket原理分析查看Android源码会发现很多地方如Zygote就用到了LocalServerSocket来监听请求,它可以用用于本地进程、线程通信,也可以用于网络通信,LocalSocket底层实质用到了C++的Socket套接字,对其做了一定的封装;在此,理解其背后的运作原理,可以帮助我们在分析源码时,快速了解一些源码机制问题LocalSocket基本使用server服务端//创建socket并绑定监听 新创建的Local原创 2020-07-20 15:45:07 · 3920 阅读 · 0 评论 -
高通Android源码下载及相关问题
高通Android源码下载记录简介android源码一般最初是由Google发布,但是高通作为移动芯片厂商,占据了全球大部分手机芯片市场份额;所以,一般在Google发布Android源码后,高通都会根据自己的芯片如8950等进行适配,对android源码进行改造适配移植,形成自己的android源码以及ROM,可以说凡是用到高通芯片的手机厂商,一般都是基于高通的android源码进行修改的;高通Android源码下载同android原版源码下载一样,也是用repo方式下载,下载流程也一样,不同的是原创 2020-06-26 19:05:28 · 1722 阅读 · 0 评论 -
Android Binder浅析 --- Client获取CameraService
Android Binder浅析 — Client获取CameraService继前一章Android Binder浅析 — CameraService往ServiceManager添加服务后,我们现在要从客户端向ServiceManager拿到这个服务,查看一下客户端是如何拿到这个服务的!...原创 2020-06-16 14:42:37 · 595 阅读 · 1 评论 -
Kotlin之边学边做
Kotlin学习笔记什么是委托模式?以及委托模式的原理和使用场景koltin中声明的成员属性或者超类不在当前类中去实现,而是交给其他类去完成,叫做委托,使用by关键字来实现。其使用场景适合那些需要复杂计算并且可以重复使用的场景lazy懒惰性委托lazy委托模式不会在声明时就计算好值,而是在第一次使用时才会计算值;并且以后也是用这个计算好的值;lazy(() -> t)参数是一个高阶函数,其内部原理根据传入参数分为三种类型:LazyThreadSafetyMode.SYNCHRONIZED原创 2020-06-03 18:01:51 · 362 阅读 · 0 评论 -
Android Binder浅析 --- CameraService往ServiceManager添加服务
Android Binder浅析 — CameraService往ServiceManager添加服务为了更好的理解Binder添加服务的原理,请先阅读前一篇博文Android Binder浅析 – 开启ServiceManager服务添加服务Service简介通常Binder添加服务是以key-value形式将自己加入ServiceManager的服务列表list里面去,key是服务的...原创 2020-06-02 17:47:12 · 1123 阅读 · 0 评论 -
Retrofit精髓领悟进阶篇
Retrofit源码解析简介从事移动端开发的人应该都知道Retrofit库,作为一个第三方网络封装库,许多App都会用到它,他提供了注解方式的网络接口定义,自定义请求响应参数转换等等功能,大大提高了开发效率;今天我们尝试着来看看它背后的逻辑好在哪里Retrofit基本使用public interface NetApi { @POST("test/login") LiveData<Response> test(@Body Request request);}NetApi ap原创 2020-05-21 13:31:49 · 290 阅读 · 0 评论 -
Android暗中观察组件LiveData
Android JetPack组件之LiveData简介和上一篇Lifecycle组件一样,LiveData也是一个观察者机制的东西,订阅者订阅LiveData后,LiveData数据发生变化,就会通知到订阅者;使用步骤创建LiveData数据加入订阅者到LiveData中去改变LiveData的值触发通知到订阅者伪代码如下:6. val myLiveData = MutableLiveData<String>()7. myLiveData.observe(Lifec原创 2020-05-12 09:09:10 · 1152 阅读 · 0 评论 -
android生命掌控组件LifeCycle
android JetPack组件之LifeCycle简介Lifecycle组件是JetPack的核心组件之一,JetPack的其他许多组件都会用到Lifecycle这一组件,如ViewModel、LiveData等。LifeCycle是负责观测Activity生命周期变化状态,并同步给它的订阅者,使订阅者实时感知如Activity生命状态,在正确的状态做正确的事,如Activity的onDestroy时,切断订阅者与观测目标的引用链,防止内存泄漏等问题使用方法我们只需要实现上图订阅者接口类,原创 2020-05-11 16:21:10 · 407 阅读 · 0 评论 -
Android Binder浅析 -- 开启ServiceManager服务
C APIvoid* mmap ( void * addr , size_t len , int prot , int flags , int fd , off_t offset )文件映射函数,可以将文件或者对象映射到内存中,然后对映射内存进行读写操作,而不需要去read/write读写函数操作文件(这只是mmap其中一种使用目的)addr: 映射区的开始地址,设置为0时表示由系统决定映射...原创 2020-04-28 14:12:35 · 539 阅读 · 0 评论 -
Android Parcel为何如此高效?
Android Parcel浅析简介都说Parcel高效,android framework层大量使用Parcel,尤其是涉及Binder通信模块,大量的跨进程(IPC)通信,使用到Parcel进行数据传递,而且官方建议Bundle使用更换为Parcel,序列化方面也建议使用Parcelable替代,那为什么Parcel高效呢,今天我就试试从底层的角度来分析分析,如有不对的还望指正为什么B...原创 2020-04-08 15:42:30 · 657 阅读 · 0 评论