- 博客(85)
- 资源 (1)
- 收藏
- 关注
原创 通过反汇编解析crash问题
delegate_对应的类,发现我们有新加一个虚函数,所以定位问题可能是客户拿到我们的sdk后,替换了so,但是未替换头文件导致。从上面的反汇编代码可以看出,首先是调用了ParseDeviceControlResponseParams函数,然后调用了notify,然后做了一系列处理,最终出错。用户反馈的问题,有时候我们拿到log,发现有crash问题,有堆栈打印,能看到具体出错的函数,但是无法定位具体出错的行数和内容,这个时候就需要用到反汇编辅助我们定位问题。所以,出错的原因就是。
2024-08-16 10:35:22
284
原创 asound.conf 模版
pcm.!defaulttype asymtype plugtype plugslave {pcm.patype plugtype plugtype plugtype plugtype plugtype plugtype plug# }#}type multicontrol {card 0max_dB 0.0type dmix!!!slave {channels 2bindings {0 01 1!!!slave {channels 2。
2024-07-09 16:00:14
296
原创 Android - RadioGroup中多个radiobutton同时被选中问题
解决radiobutton没有button id导致的同一radio group中多个button被同时选中的问题。
2024-06-06 10:19:13
437
原创 git push出错: src refspec dev/xxx does not match any
可能是因为本地有多个head?git commit 之后没有push然后又git reset到别的commit。为什么之前同样的本地分支和远程分支使用git push origin 远端分支名 就没问题?
2024-03-19 10:00:58
592
原创 Qt信号槽函数没有响应问题
我自己写的信号槽函数,信号函数在read线程,槽函数在主线程。函数的参数类型是uint16_t。通过如下方式连接信号槽,发现信号函数被调用后槽函数无法响应。尝试调用别的信号槽函数(参数为int类型),发现调用ok。unsigned short参数ok,使用uint16_t无法响应,所以应该是uint16_t参数类型问题,尝试注册uint16_t到qt,修改之后信号槽函数响应ok。搜了网上资料,可能是槽函数操作耗时,可以设置连接类型为Qt::BlockingQueuedConnection。
2024-03-05 16:23:44
1126
原创 Andoid - 设置和获取系统属性
上面adb命令设置的方法重启手机后之前设置的参数就会失效,有些在开机过程就要读取的参数就无法调试。这时候就可以直接修改本地文件进行调试。
2023-05-25 16:54:50
846
原创 996 log抓取过程
1. log抓取方法*#*#996996#*#* 开始抓取*#*#996996#*#* 结束抓取2. log文件和存储存储位置: sdcard/diag_logs文件:1. 81cf12e6-b266-eefa-cd8e-8676e8ff3684.qdb2. diag_log_20220329_1558111648540691565.qmdl23. diag_qdss_log_mpss_adsp_audio_pd_20220329_1558231648540703019..
2022-03-30 11:42:50
3663
原创 Android-绝对音量和相对音量设置
前言:绝对音量: 手机端不处理音量,只把当前音量告诉耳机,耳机端处理音量。相对音量: 手机端处理,耳机端不确定是默认最大,还是有一个默认音量还是按照之前设置的绝对音量的值处理的。手机音量转换绝对音量,此处会有一个计算过程,大致就是手机侧计算出当前音量和最大音量的百分比然后设置给耳机,耳机端收到百分比去处理。不然每个手机的音量范围不同,不做归一化就很难适配。当通过音量按键调节音量时,会通过input事件分发,input把event分发给mediassesion, mediasession调用a
2022-01-25 11:03:48
7872
1
原创 Android-蓝牙sco通话
APP调用AudioManager::startBluetoothSco()// frameworks/base/media/java/android/media/AudioManager.javapublic void startBluetoothSco(){ service.startBluetoothSco(mICallBack, getContext().getApplicationInfo().targetSdkVersion);}//
2022-01-25 10:55:42
7078
原创 头文件定义static变量
记录一个问题:在头文件test.h中定义了static变量如下:static char* str;然后在a.cpp和b.cpp中都包含了test.h,并在这两个cpp中使用了str,然后发现,运行过程中str的值一直变,看了半天发现,str的指针,在a.cpp中是一个,在b.cpp中是另一个。然后查资料发现:定义全局变量时使用static,意味着该变量的作用域只限于定义它的源文件中,其它源文件不能访问。既然这种定义方式出现在头文件中,那么可以很自然地推测:包含了该头文件的所有源文件中
2021-09-18 17:25:40
3562
原创 Android-AudioFlinger thread讲解
1. 都有什么thread,有什么区别class RecordThread; // 录制线程类,由 ThreadBase 派生class PlaybackThread; // 播放thread的基类 class MixerThread; // 混音回放线程类,由PlaybackThread派生,负责 // 处理标识为 AUDIO_OUTPUT_FLAG_PRIMARY、
2021-09-08 20:36:57
2136
原创 Android-audio playback/record Monitor
前言:安卓在Q上支持了多应用同时录音,当两个应用试图捕获音频时,它们都可以接收输入信号,或者其中一个可能会受到静默处理。当多个应用同时捕获音频时,只有一个或两个应用处于“活动”状态(正在接收音频),其他应用则处于静音状态(接收静音)。当活动应用发生更改时,音频框架可能会根据以下规则重新配置音频路径:每个活动应用的音频输入设备可能会更改(例如,从内置麦克风更改为已连接的蓝牙耳机)。启用与最高优先级活动应用相关联的预处理。其他预处理都将被忽略。当优先级较高的应用处于活动状态时,活动应用可能会受到静默处理
2021-08-31 17:59:57
2587
3
原创 Android-binder通信详解
1. binder是什么?binder是安卓系统的进程间通信方式。2. 为什么安卓要用binder?Android内核是基于Linux系统,linux本身就有很多种进程间通信方式: 内存共享,消息队列、信号量等,为什么安卓还要用binder呢?传统ipc(进程间通信):共享内存,不需要内存拷贝,但是控制繁琐。管道通信,需要两次内存拷贝。binder通信:Binder只需要一次拷贝是因为安卓的内存映射方法,也就是mmap。a进程发数据给b进程,a进程把数据拷贝给m.
2021-08-21 16:56:30
5402
2
原创 SSH访问远程服务器
安装和卸载ssh:确认是否已经安装SSH:dpkg -l | grep ssh安装SSH:sudo apt-get install openssh-clientsudo apt-get install openssh-server口令登录远程服务器:普通登录:ssh ldz@192.168.0.1如果需要调用图形界面程序可以使用 -X 选项ssh -X ldz@192.168.0.1如果客户机的用户名和服务器的用户名相同,登录时可以省略用户名。ssh 19
2021-07-09 10:33:37
3041
原创 linux解析so信息
命令:readelf -a libxxx.so -a表示打印全部信息,其他可选信息命令如下: -a --all Equivalent to: -h -l -S -s -r -d -V -A -I -h --file-header Display the ELF file header -l --program-headers Display the program headers --segments An ali
2021-06-28 12:07:17
1064
原创 Android-adb shell am broadcast发广播
命令举例:adb shell am broadcast -a android.media.AUDIO_RECORD_STATE_CHANGED_ACTION --es string_pkg "com.tencent.mm" --ei int_state 3 --ez boolean_open true com.miui.test参数解释:-a: action, 具体的action--es: string类型extra data--ez: boolean类型extra data--e.
2021-03-18 18:16:03
969
原创 Android-普通按键和蓝牙耳机按键处理流程详解
前言: 普通按键目前都会走input event的流程,蓝牙耳机按键目前高通都是走AVRCP里面的逻辑,不走input event流程。input evnet流程:手机开机时就会注册一些设备节点专门用来上报某些事件,比如触摸屏幕、开关屏幕、手机音量条等。也会有动态注册的设备节点,如果数字耳机插入就会注册一个节点。每当有对应节点的事件时就会上报事件给input driver,input driver调用到AP侧的input server。input server会把事件Dispatch到...
2021-03-16 21:22:57
3793
原创 Android-app打包报错Execution failed for task ‘:app:mergeExtDexDebug‘解决方法
记录一个app打包报错:报错内容:> Task :app:mergeExtDexDebug FAILEDjava.lang.ArrayIndexOutOfBoundsExceptionFAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':app:mergeExtDexDebug'.> A failure occurred while executing
2021-03-10 11:11:57
10322
1
原创 Android-音频配置文件详解
前言: Android P 引入了一种新的音频政策配置文件格式 (XML),用于描述音频拓扑。新的 XML 文件支持定义输出输入流配置文件、可用于播放和捕获的设备以及音频属性的数量和类型。但是每个项目的代码里面都有很多音频配置文件,具体使用的是哪个文件呢?本文将详细讲述。1. 查看运行时具体使用的xmladb shell dumpsys media.audio_policy | grep -iE "Config source:"结果如下:Config source: /vendor
2021-03-03 21:02:11
3057
2
原创 Android-APP调用mediacodec录像详解
前言: APP录制视频一般调用mediarecorder或者mediacodec接口。mediarecorder的优势就是简单。几行代码就可以搞定。相比于mediarecorder,mediaocdec的优势就是自由度更高,app可以加一些自己的前处理、后处理等算法。所以一般app都会选择mediacodec接口。 本文将介绍app调用mediacodec录像的调用过程:代码实现:实现方式一: 异步方式调用mediacodec,输入为非surface:private Me...
2021-02-03 20:17:45
2636
原创 ubuntu 安装/ 卸载 / 破解 Beyond Compare
参考简书: 很详细,且实测可用https://www.jianshu.com/p/93303b9fb21aps: 如有侵权,请联系删除。
2020-12-11 16:34:51
1261
1
原创 Android-初识SDK
前言: 作为一名C/C++程序员,基本对java义务所知,前段时间偶然的机会开发了一款APK,算是对java有了一个初步的认识。然后最近又有需求给别的APK做一个SDK,底层有两套vendor方案,APK希望自己和底层解耦,不关心底层用的哪家方案只管调用统一的接口。于是,APK让我们提供SDK给他们统一接口,然后在SDK里面我们可以自己去判断底层的方案,然后对APK的调用做不同的处理。 听到这里,整个工作内容已经很清楚了,方案的接入和区分也很简单,唯一让人懵逼的就是SDK…… 以...
2020-11-20 20:14:35
339
1
原创 Android-fastboot -w报错: Cannot generate image for userdata的解决方法
1. 问题:fastboot -w Erasing 'userdata' OKAY [ 0.112s]/usr/bin/make_f2fs failed with status 1fastboot: error: Cannot generate image for userdata2. 解决1.打开终端执行which fastboot (eg: /usr/bin/fastboot)2.打开fastboot所在目录 (cd /usr/bin)3.检查目录下是否存在m...
2020-11-16 15:24:02
6602
2
原创 Android-setMicrophoneMute学习
1. APP调用AudioManager mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);mAudioManager.setMicrophoneMute(true);2. java层调用// frameworks/base/media/java/android/media/AudioManager.javapublic void setMicrophoneMute(boolea
2020-11-12 21:03:36
2381
原创 c++ reinterpret_cast报错: casts away qualifiers
具体代码:process(reinterpret_cast<INT_PCM *>(view.data()), view.capacity());// 其中view.data() 是 const unsigned char * 类型// process函数: void process(INT_PCM* data, uint32_t size);编译报错:error: reinterpret_cast from 'const uint8_t *' (aka 'const unsi
2020-10-29 16:12:29
8266
原创 Android-视频录制中yuv数据传输的两种方式
前言: 目前有很多APP都有视频录像的功能,eg: 微信、抖音等。那么视频录制的时候yuv数据是怎么传输的呢? 视频录制(单指video流)其实就是两部分,第一部分是从camera获取yuv流,第二部分是对yuv流进行编码。那么yuv数据的具体传输是怎么样的呢? 目前安卓框架支持两种yuv数据的传输方式: 第一种是APP从camera获取录制的yuv,然后一帧帧再送给codec去做编码。 第二种是APP设置好camera和enco...
2020-09-24 20:59:22
2181
原创 Android-安卓AMessage怎么打印
在deubg的时候想要打印AMessage的信息,研究了半天……记录下打印方法:sp<AMessage> &msg;ALOGI("AMessage : %s\n", msg->debugString().c_str());msg->debugString().c_str()
2020-09-17 20:03:45
472
1
原创 Android-Nuplayer播放视频怎么获取对应的extractor
1. 每个extractor生成对应的so2. so怎么注册到media.exreactor服务里面3. nuplayer怎么从media.extractor获取对应的extractor第一步:frameworks/av/media/extractors下每个目录都会生成对应的so,eg: libmp4extractor 、 libaacextractor 、 libmpeg2extractor 等等第二步:这些so最终都在frameworks/av/apex/And...
2020-09-17 15:10:14
897
原创 Android-APEX化之后如何替换对应的文件
1. APEX简介 (APEX)Android Pony EXpress google为了使低层次的系统组件,能够像应用模块那样可以独立的更新升级,不受大版本升级的限制,才有了APEX方案。2. APEX文件生成 在低版本的安卓系统中一些链接库是可以独立编译和替换的(eg: libmp4extractor), 之前改动了相关的代码只需要编译这个so,然后push到手机对应的目录下并重启即可生效。 但是现在,google推出...
2020-09-11 20:12:33
5326
10
原创 Android-adb获取当前前台进程
背景: 安卓R版本在权限检测的时候对某些权限加了前后台的判断,如果是后台就默认不给权限。然后我们遇到了权限的问题,无法确实是否是前后台引起,所以想在运行过程中动态获取前台的进程。方法: adb shell dumpsys activity activities结果查看:dumpsys activity activities ACTIVITY MANAGER...
2020-08-12 17:39:16
4171
原创 Android-ACodec之allocatebuffers
ACodec的状态转移如下:UninitializedState -> LoadedState -> LoadedToIdleState -> IdleToExecutingState -> ExecutingState -> ……在LoadedState时需要allocatebuffers进入loadedtoidlestate。具体的allocatebuffers是怎么分配buffers的,接下来将具体介绍:先看代码:status_t ACodec::L
2020-08-06 16:15:50
1962
1
原创 Android-adb运行可执行文件
step1: 编译可执行文件step2: 把可执行文件push到手机中1) adb root2) adb remount3) adb push testbin system/bin 或者 adb push testbin vendor/bin4) adb shell sync5) adb rebootstep3: 运行bin文件方法1: adb shell testbin -w -h -f outputfile.txt (注意此处-w -h -f都是命令行输入的参数,就是ma
2020-07-14 11:58:03
4272
1
原创 c++ STL-vector详解
vector头文件 头文件:#include<vector>vector概述 vector的数据安排和操作方式与c++内建的array非常相似。不同之处就是array是静态分配内存空间,需要在定义array的时候就给定array的大小。vector是动态分配内存空间的,随着新元素的加入,系统会自动进行内存的扩容。vector内存详解 vector维护的是一个连续的线性空间。那么当新的元素加入时,如果内存不够用了,系统会怎么处理? 首先,ve...
2020-05-31 19:07:15
325
原创 c++ STL-STL概述
STL简介: STL(Standard Template Library),即标准模板库,是c++的标准程序库。里面包含了各种数据结构的具体实现,具有很高的可复用性。对程序而言,熟练掌握这些用法写代码将会事半功倍。STL六大组件:1. 容器(Container) 各种数据结构,例如: vector、list、deque、set、map等。STL容器实际就是一个class template(模板)。2. 算法 实现各种常用算法,例如sort、s...
2020-05-30 16:51:39
307
原创 Android-安卓四大组件详解及代码示例
Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器。Activity:通常用于显示一个单独的界面,例如从app A点击某个按钮,跳到app B的某个界面,在此界面可以设置某些功能,设置完成之后这个界面就没有其他用途。这种场景就适合用activity。具体实现就是app A在按钮响应事件中发送intent,app B中对此intent做响应,启动activity。app B中Activi
2020-05-22 19:50:29
1841
原创 c++11中的匿名函数(lambda表达式)
最近在学习安卓播放的omx的代码,在allocateNode的时候发现有个函数很奇怪:status_t LWOmx::allocateNode( char const* name, sp<IOMXObserver> const& observer, sp<IOMXNode>* omxNode) { ...
2020-04-27 20:05:00
632
1
原创 Android-检测目录是否存在,不存在则创建
java中检测目录是否存在,不存在则创建1. 判断一级目录是否存在,不存在就创建import java.io.File; // 首先需要import jar包private void creatfile(){ String dir = "/sdcard/download/"; // 需要创建的目录,sdcard目录一定存在,所以只用判断一级目录 File file = ...
2020-04-24 19:36:43
4116
原创 Android-MediaRecorder之setAudioSource
上一篇文章介绍了怎么通过MediaRecorderlu录制音频,详见(https://blog.csdn.net/cheriyou_/article/details/105544086在创建MediaRecorder之后第一步就是设置AudioSource,那么audiosource具体是做什么用的?下面我们一步步分析。1. 首先看看setAudioSource的过程stat...
2020-04-20 20:19:03
3747
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人