自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(71)
  • 资源 (5)
  • 收藏
  • 关注

原创 Android11 AudioTrack和Track建立联系

对于是客户端创建的内存,客户端使用 StaticAudioTrackClientProxy来管理,对于AudioFlinger创建的内存,使用AudioTrackClientProxy来管理。对于是客户端创建的内存,使用 StaticAudioTrackServerProxy 来管理,对于AudioFlinger创建的内存,使用AudioTrackServerProxy来管理。可以看出,共享内存可以由客户端申请,也可以由AudioFlinger申请。客户端通过mProxy来管理。

2024-06-03 17:20:43 469 1

原创 Android11 AudioTrack 创建过程

首先,通过声音属性,从mProductStrategies中找到strategy,然后根据strategy,找到对应的device。mOutputs中,支持该device的output可能有多个,通过getOutputsForDevices把它们找出来,然后调用selectOutput从中选择一个最符合的。综上,找到output的流程为: audio_attributes_t >>> strategy >>> device >>> output。2,根据device,找到output。

2024-06-03 15:12:04 384

原创 Android 11 Audio strategy配置解析

注释2处,创建ProductStrategy对象时,传入的名字就是gOrderedStrategies中各元素的名字,如:“STRATEGY_PHONE”,“STRATEGY_SONIFICATION”。注释3处,遍历前面得到的mVolumeGroups集合,根据名字进行匹配(用volumeGroup 的名字和“AUDIO_STREAM_VOICE_CALL”,“AUDIO_STREAM_BLUETOOTH_SCO”等进行匹配),找到匹配的volumeGroup。再来看一下图中各结构体的定义。

2024-05-31 11:33:34 839

原创 Android 11 AudioPolicyService 启动流程

在打开输出流的过程中,会得到HAL层的audio_stream_out对象,并将其保存在AudioStreamOut中,创建播放线程的时候,传入该AudioStreamOut,最后将播放线程保存到mPlaybackThreads中。在打开输出流的过程中,会得到HAL层的audio_stream_in对象,并将其保存在AudioStreamIn中,创建录音线程的时候,传入该AudioStreamIn。这个流程和上面的是一样的,最终调用到AudioFlinger的openInput_l处理。

2024-05-29 18:14:10 892

原创 Android 11 Audio音频系统配置文件解析

其中mHwModules保存的是modules标签下的每个HwModule,解析attachedDevices标签时,会根据其名字找到对应的DeviceDescriptor,然后根据这些DeviceDescriptor的type,分别放入mOutputDevices和mInputDevices中。注释1处,针对不同的Trait类型,就调用不同的子类的deserialize处理。回到modules的解析方法中,mixPorts标签解析完成后,调用HwModule的setProfiles保存解析的结果。

2024-05-28 18:43:54 851 1

原创 Linux Alsa驱动框架

注册声卡时(调用snd_card_register),会从list链表中取出snd_device,并调用其ops的dev_register 函数,也就是执行snd_ctl_dev_register函数。对于录音和播放节点,都会调用snd_register_device往snd_minors数组中放入元素,播放节点对应的f_ops为snd_pcm_f_ops[0],录音对应的为snd_pcm_f_ops[1]snd_pcm_f_ops[0]对应的是播放,snd_pcm_f_ops[1]对应的是录音。

2024-05-27 14:59:54 322

原创 Android11 monitorInput 介绍

接收触摸事件真的一定需要窗口吗

2024-05-23 17:24:35 868 1

原创 Android11重复事件上报流程

可以看出,这里取出的是上次保存的事件,并根据上次事件的各个参数的值,重新生成KeyEntry,去重复上报。后续的上报处理流程就和之前的流程是一样的。需要注意的是,后续重复事件上报的间隔默认为50ms。大多数的按键驱动,即使按键一直按着,也不会一直上报事件,而是只上报一个down事件,那对于事件的重复上报,自然而然就交给了Android 的输入子系统。上面的方法只是保存了当前事件,并设置了下次上报的时间间隔是400ms,那再次上报是在哪里上报的呢?

2024-05-23 11:19:03 533

原创 Android11 事件分发流程

dispatchTransformedTouchEvent的含义是如果child是ViewGroup的话,就继续调用ViewGroup的dispatchTouchEvent方法继续向下分发,如果child是view的话,则调用view的dispatchTouchEvent来处理事件。deliver方法的原理就是输入事件会经过这些InputStage依次处理(调用onProcess方法),如果事件已经被上一个消费处理了,后面的stage就不会处理了。

2024-05-21 12:19:42 1243

原创 Android 11 触摸小圆点显示流程

当SHOW_TOUCHES 这个key的值有改变时,调用updateShowTouchesFromSettings方法,在updateShowTouchesFromSettings方法中,是调用nativeSetShowTouches这个native方法,直接来看下这个方法。小圆点的图片资源已经被加载,并将其保存在相应的变量中了,接下来就需要将其显示出来了。在开发者选项中,打开 “显示点按操作反馈” 开关,当我们在触摸屏幕时,会显示一个小圆点,来分析下小圆点的显示流程。

2024-05-21 10:10:55 831

原创 Android 触摸事件分离原理

查找到window2窗口后,因为window2也支持分离事件,所以也是进入注释2处的分支将isSplit 设为true,然后就是window2加入到tempTouchState中,该事件可分发至window2窗口。屏幕上存在多个窗口时,多指触摸的情况下,多个手指的触摸事件可以分给不同的窗口,以下面的图为例,第一个手指按下,window1可以响应这个事件,第二个手指按下(第一个手指不松开),window2同样也可以响应第二个手指按下的事件,两个手指的触摸事件被分离到了不同的窗口,这就是触摸事件分离。

2024-05-16 11:43:05 568

原创 Andorid Input事件 注入方法及原理介绍

如果APP不是放在系统源码中编译,直接使用这个方法的话,肯定是编译不过的,这时候我们可以借助Instrumentation类来实现模拟一个输入事件,例如注入一个MotionEvent 的down事件。3,对于自己应用内的事件注入,是有权限的,但是如果想注入事件到其它的应用,是需要申请INJECT_EVENTS权限的,而这个权限是需要系统签名的应用才能申请。在Android系统中,除了真实的输入设备可以产生事件之外,我们也可以通过软件的方式,模拟一个输入事件,比如模拟一个点击事件,模拟一个按键事件等等。

2024-05-14 12:14:05 284

原创 Android finishInputEvent 流程分析

事件处理完成之后,InputDispatcher将事件从wq移除的逻辑

2024-05-13 09:46:41 460

原创 Android11 InputDispatcher 分发事件流程分析

介绍对应触摸事件,InputDispatcher的处理流程

2024-05-10 16:05:07 819 1

原创 Android 11 输入系统之InputDispatcher和应用窗口建立联系

本文介绍InputDispatcher和客户端进程建立联系的过程,核心是通过socketpair产生两个fd

2024-05-09 17:07:34 1238 1

原创 Android11 InputReader分析

多指触摸类型InputReader线程情景分析

2024-05-08 16:07:48 944

原创 Android11 InputManagerService启动流程分析

InputManagerService的启动流程

2024-05-06 17:04:15 740 1

原创 Android getevent命令详细分析

介绍getevent读取内核输入数据的原理

2024-05-06 14:11:26 492

原创 Android binder死亡通知机制

本文分析了binder的死亡通知机制

2024-04-30 15:18:57 860 3

原创 Android 11 bindService 流程分析

本文主要介绍bindService的内部流程,以及onServiceConnected是如何调用到的

2024-04-28 18:12:13 1104 1

原创 binder 双向通信时客户端没有joinThreadPool也能接收到服务端的请求

原来在客户端远程调用say_hello方法后,就会通过waitForResponse等待服务端返回数据,而刚好,我回调的方法又是写在say_hello方法中,这就导致服务端在该方法内发出BC_TRANSACTION,那在客户端就会收到BR_TRANSACTION,进而正确的调用到对应的方法。但是今天我在用C++写binder双向通信的代码时,发现,我客户端并没有调用joinThreadPool或者startThreadPool,也能接收到服务端的请求,而且能正确的调用对应的方法,这是为什么呢?

2024-04-26 15:44:22 144

原创 Andorid UNIX SOCKET c代码进程和java代码进程之间通讯

一文的实战中,服务端和客户端的代码都是用C语言写的,而Androidd的系统源代码以及APP大多数都是java写的,那么不同的语言写的进程之间,能不能互相通信呢?java代码也是一样的,在connect方法中也是调用socket和connect 来和服务端建立连接。对于UNIX SOCKET ,C代码和Java代码之间是可以相互通信的,并且可以相互作为客户端和服务端通信。需要注意的是,address的Namespace默认为ABSTRACT,在调用connect的过程中,对于ABSTRACT,有以下处理。

2024-04-25 17:47:43 266 2

原创 Andorid进程间通信之 UNIX SOCKET

UNIX SOCKET实现进程间通信

2024-04-24 16:49:43 561 3

原创 Android binder 匿名服务实现双向通信

binder 双向通信介绍

2024-04-24 11:39:36 670 1

原创 Android AIDL传递类对象

Android 跨进程通讯传递类对象

2024-04-22 11:44:37 357

原创 binder java层数据传输过程

介绍binder在java层数据传输的流程以及如何调用到自己定义服务里面的方法

2024-04-18 16:59:21 1018 1

原创 binder c++客户端处理流程

binder c++处理流程,主要是分析getservice的过程

2024-04-17 15:41:55 278

原创 binder c++ 服务端处理流程

c++服务端的实现

2024-04-16 15:26:00 701

原创 binder驱动总结

binder驱动总结

2024-04-15 10:58:01 431

原创 binder 添加多线程支持

binder c语言实现添加多线程支持

2024-04-12 17:40:32 292

原创 binder 驱动情景分析-获取服务

客户端获取服务binder驱动分析

2024-04-12 15:10:17 601

原创 binder 驱动情景分析-注册服务

binder驱动分析之注册服务

2024-04-11 17:08:22 592 1

原创 Android 11属性系统初始化流程

属性系统初始化,创建共享内存

2024-04-07 17:58:21 939 1

原创 Android 11 添加系统属性

介绍各个属性文件的生成过程,并介绍如何添加自定义的系统属性

2024-04-07 12:22:18 1236

原创 初识Android 属性

bootanim进程需要通过检测改属性的值是否为1来退出开机动画,systemserver进程设置该属性来告知bootanim进程。这些函数是定义在libcutils库的properties.h中,使用时需要在Android.mk或者Android.bp中引入该库并添加头文件。在java中,使用SystemProperties类中的set和get方法来设置和获取属性。当然,除了上面文件中默认的属性,我们也可以通过命令或者方法来设置属性。比如获取SDK版本,获取系统语言其实都是通过系统属性得到的。

2024-04-03 18:08:38 706

原创 SeLinux 的编译逻辑

收集 PLAT_PRIVATE_POLICY和 PLAT_PUBLIC_POLICY 目录下的 文件,通过transform-policy-to-conf 进行宏展开,得到plat_policy.conf文件。一文中,我们知道,在init进程对Selinux的处理过程中,会将precompiled_sepolicy或者动态编译相关目录下的cil文件得到的compiled_sepolicy写入给内核。再来看一下cil文件的生成过程,以built_plat_cil 为例,其它的都类似。最终根目录系统结构为。

2024-04-02 16:57:51 756

原创 Android 11 init进程对Selinux的处理

查找的流程是 先找/odm/etc/selinux/precompiled_sepolicy,如果没有,再找/vendor/etc/selinux/precompiled_sepolicy (具体可分析FindPrecompiledSplitPolicy函数)。selinux_android_load_policy_from_fd在libselinux库中,源码路径是external/selinux/libselinux/src/android/android_platform.c。

2024-04-02 15:11:25 474

原创 SeLinux 常见的宏

意味着该声明是可以描述主体和客体的类型切换的, 比如客体文件类型切换, 或者主体进程域的type 切换(上下文切换), 注意:此时只是描述了从哪里切换到哪里的问题。注意:该宏只是申请允许切换,相当于为type_transition申请切换的权限。申请在某个domain(进程)在安全上下文为dir_type的目录下,创建文件,新文件的安全上下文为file_type的权限。允许domain(进程)对安全上下文为type的目录有r_dir_perms权限,文件和lnk_file 有r_file_perms权限。

2024-04-01 17:42:03 393 1

原创 Selinux安全策略文件

2,perm_set集合可以填写什么,需要看access_vectors文件对前面的object_class 的规定。类别,目标(客体)是哪种类别,主要有file,dir,socket, process, SEAndroid 还有binder 等,在这些基础上又细分出设备字符类型(chr_file),链接文件(lnk_file)等。而 file_type,data_file_type等也需要在system\sepolicy\public\attributes文件中定义。3,用type来定义一个新的类型。

2024-04-01 16:38:28 324

原创 SeLinux安全上下文文件

在Android中,常见的安全上下文文件有file_contexts、genfs_contexts、service_contexts、mac_permissions.xml和seapp_contexts。seapp_contexts,app的安全上下文,用于描述apk 安装之后的目录文件和/data/data 目录分配标签。根系统中所有文件的安全上下文, 如/system/bin, /system/etc 等文件。系统binder服务的安全上下文,在启动过程中,servermanger会读取该配置。

2024-04-01 15:08:16 566

containers窗口层级

containers窗口层级

2024-06-04

binder java端测试程序

binder java端测试程序

2024-04-18

binder通讯 c++源码

c++实现binder通讯

2024-04-16

c代码使用binder

c代码使用binder,添加多线程支持

2024-04-12

binder-c.zip

binder跨进程通讯C程序示例

2024-04-09

ST7701S_SPEC_ V1.1.pdf

ST77701S 转换芯片规格书

2021-02-25

1000Hz-0dB.wav

纯音乐,无增益,可用来测试喇叭的功率

2021-02-25

app-dev-release.apk

屏保apk,可以直接使用作为屏保

2021-02-25

RGB 接口波形图.pdf

rgb 屏的波形图,信号不对可参考

2021-02-25

readme.txt

px30 主板喇叭没声音排查方案

2021-02-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除