
安卓基础
文章平均质量分 69
cheri--
这个作者很懒,什么都没留下…
展开
-
adb install失败: INSTALL_PARSE_FAILED_NO_CERTIFICATES
这个错误表明在尝试安装 APK 文件时出现了问题,原因是 APK 文件中的 AndroidManifest.xml 没有签名证书。在 Android 系统中,所有的应用都必须经过签名才能安装到设备上。原创 2024-09-12 14:52:01 · 2097 阅读 · 0 评论 -
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 · 3935 阅读 · 0 评论 -
Android-绝对音量和相对音量设置
前言:绝对音量: 手机端不处理音量,只把当前音量告诉耳机,耳机端处理音量。相对音量: 手机端处理,耳机端不确定是默认最大,还是有一个默认音量还是按照之前设置的绝对音量的值处理的。手机音量转换绝对音量,此处会有一个计算过程,大致就是手机侧计算出当前音量和最大音量的百分比然后设置给耳机,耳机端收到百分比去处理。不然每个手机的音量范围不同,不做归一化就很难适配。当通过音量按键调节音量时,会通过input事件分发,input把event分发给mediassesion, mediasession调用a原创 2022-01-25 11:03:48 · 9352 阅读 · 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 · 8095 阅读 · 0 评论 -
Android-AudioFlinger thread讲解
1. 都有什么thread,有什么区别class RecordThread; // 录制线程类,由 ThreadBase 派生class PlaybackThread; // 播放thread的基类 class MixerThread; // 混音回放线程类,由PlaybackThread派生,负责 // 处理标识为 AUDIO_OUTPUT_FLAG_PRIMARY、原创 2021-09-08 20:36:57 · 2443 阅读 · 0 评论 -
Android-audio playback/record Monitor
前言:安卓在Q上支持了多应用同时录音,当两个应用试图捕获音频时,它们都可以接收输入信号,或者其中一个可能会受到静默处理。当多个应用同时捕获音频时,只有一个或两个应用处于“活动”状态(正在接收音频),其他应用则处于静音状态(接收静音)。当活动应用发生更改时,音频框架可能会根据以下规则重新配置音频路径:每个活动应用的音频输入设备可能会更改(例如,从内置麦克风更改为已连接的蓝牙耳机)。启用与最高优先级活动应用相关联的预处理。其他预处理都将被忽略。当优先级较高的应用处于活动状态时,活动应用可能会受到静默处理原创 2021-08-31 17:59:57 · 3049 阅读 · 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 · 5576 阅读 · 2 评论 -
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 · 1147 阅读 · 0 评论 -
Android-普通按键和蓝牙耳机按键处理流程详解
前言: 普通按键目前都会走input event的流程,蓝牙耳机按键目前高通都是走AVRCP里面的逻辑,不走input event流程。input evnet流程:手机开机时就会注册一些设备节点专门用来上报某些事件,比如触摸屏幕、开关屏幕、手机音量条等。也会有动态注册的设备节点,如果数字耳机插入就会注册一个节点。每当有对应节点的事件时就会上报事件给input driver,input driver调用到AP侧的input server。input server会把事件Dispatch到...原创 2021-03-16 21:22:57 · 4272 阅读 · 0 评论 -
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 · 11738 阅读 · 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 · 3411 阅读 · 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 · 2994 阅读 · 0 评论 -
Android-初识SDK
前言: 作为一名C/C++程序员,基本对java义务所知,前段时间偶然的机会开发了一款APK,算是对java有了一个初步的认识。然后最近又有需求给别的APK做一个SDK,底层有两套vendor方案,APK希望自己和底层解耦,不关心底层用的哪家方案只管调用统一的接口。于是,APK让我们提供SDK给他们统一接口,然后在SDK里面我们可以自己去判断底层的方案,然后对APK的调用做不同的处理。 听到这里,整个工作内容已经很清楚了,方案的接入和区分也很简单,唯一让人懵逼的就是SDK…… 以...原创 2020-11-20 20:14:35 · 399 阅读 · 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 · 7337 阅读 · 3 评论 -
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 · 2636 阅读 · 0 评论 -
Android-视频录制中yuv数据传输的两种方式
前言: 目前有很多APP都有视频录像的功能,eg: 微信、抖音等。那么视频录制的时候yuv数据是怎么传输的呢? 视频录制(单指video流)其实就是两部分,第一部分是从camera获取yuv流,第二部分是对yuv流进行编码。那么yuv数据的具体传输是怎么样的呢? 目前安卓框架支持两种yuv数据的传输方式: 第一种是APP从camera获取录制的yuv,然后一帧帧再送给codec去做编码。 第二种是APP设置好camera和enco...原创 2020-09-24 20:59:22 · 2360 阅读 · 0 评论 -
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 · 527 阅读 · 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 · 933 阅读 · 0 评论 -
Android-APEX化之后如何替换对应的文件
1. APEX简介 (APEX)Android Pony EXpress google为了使低层次的系统组件,能够像应用模块那样可以独立的更新升级,不受大版本升级的限制,才有了APEX方案。2. APEX文件生成 在低版本的安卓系统中一些链接库是可以独立编译和替换的(eg: libmp4extractor), 之前改动了相关的代码只需要编译这个so,然后push到手机对应的目录下并重启即可生效。 但是现在,google推出...原创 2020-09-11 20:12:33 · 6249 阅读 · 10 评论 -
Android-adb获取当前前台进程
背景: 安卓R版本在权限检测的时候对某些权限加了前后台的判断,如果是后台就默认不给权限。然后我们遇到了权限的问题,无法确实是否是前后台引起,所以想在运行过程中动态获取前台的进程。方法: adb shell dumpsys activity activities结果查看:dumpsys activity activities ACTIVITY MANAGER...原创 2020-08-12 17:39:16 · 4449 阅读 · 0 评论 -
Android-ACodec之allocatebuffers
ACodec的状态转移如下:UninitializedState -> LoadedState -> LoadedToIdleState -> IdleToExecutingState -> ExecutingState -> ……在LoadedState时需要allocatebuffers进入loadedtoidlestate。具体的allocatebuffers是怎么分配buffers的,接下来将具体介绍:先看代码:status_t ACodec::L原创 2020-08-06 16:15:50 · 2101 阅读 · 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 · 4615 阅读 · 1 评论 -
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 · 2025 阅读 · 0 评论 -
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 · 4374 阅读 · 0 评论 -
Android-MediaRecorder之setAudioSource
上一篇文章介绍了怎么通过MediaRecorderlu录制音频,详见(https://blog.youkuaiyun.com/cheriyou_/article/details/105544086在创建MediaRecorder之后第一步就是设置AudioSource,那么audiosource具体是做什么用的?下面我们一步步分析。1. 首先看看setAudioSource的过程stat...原创 2020-04-20 20:19:03 · 4010 阅读 · 0 评论 -
Android-audio之录音demo
由于项目需要我这个一直只做video的小菜鸟开始学习audio了,针对新需求,我们首先需要写一个测试demo……万丈高楼平地起,今天就介绍下录音demo的编写:talk is sample, show me the code:int main(int argc __unused, char **argv __unused){ // step1: 创建MediaRecord...原创 2020-04-15 21:01:09 · 1992 阅读 · 0 评论 -
Android-驱动学习-linux驱动的文件操作
1. 打开文档strcut file* filp_open(const char* filename, int open_mode, int mode);参数说明:filename: 表明要打开或创建文件的名称(包括路径部分)。在内核中打开的文件时需要注意打开的时机,很容易出现需要打开文件的驱动很早就加载并打开文件,但需要打开的文件所在设备还不有挂载到文件系统中,而导致打开失败。...原创 2020-03-09 20:24:14 · 549 阅读 · 0 评论 -
Android-驱动学习-入门
基础概念:设备号 : 分为主设备号和次设备号。设备号是16bit, 高8bit为主设备号,低8bit为次设备号。当我们创建一个设备节点时需要指定主设备号和次设备号。应用程序通过名称访问设备,而设备号指定了对应的驱动程序和对应的设备。主设备号标识设备对应的驱动程序,次设备号由内核使用,用于确定设备节点所指设备。你可以通过/proc/devices文件来查看系统设备的主设备号。设备节点:...原创 2020-03-09 19:55:55 · 1306 阅读 · 0 评论 -
git push: missing Change-Id in commit message footer的解决方法
这个报错的意思是commit信息里面缺失了change-id。解决方法如下:1. 根据报错时候的提醒完成如下步骤step1:gitdir=$(git rev-parse --git-dir); scp -p -P 29418 username@gerrit.pt.xxx.cn:hooks/commit-msg ${gitdir}/hooks/step2: git commit...原创 2020-02-26 10:40:00 · 6720 阅读 · 1 评论 -
Android-编译问题汇总
1. lunch时报错: "download cust apps failed"原因: 下载客户应用失败解决方案:step1:export SKIP_DOWNLOAD_CUST_APPS=truestep2:删除掉cust/apps/phone/customized下生成的所有文件step3: 重新lunchps: 一般情况下上面的步骤即可解决问题,但有时候也会翻车...原创 2020-03-03 19:55:49 · 1434 阅读 · 0 评论 -
Android-NuPlayer音视频同步之安卓Q新功能
概述: NuPlayer在播放视频时,当收到kWhatScanSources消息,即有数据需要播放时,会先把render置成paused状态。因为audio解码比video慢,audio已经有数据需要显示时,video可能还没解码出来数据,所以在开始解码前先把render置成paused状态,当video有第一帧数据需要显示时再把render置成resume状态。vidoe aud...原创 2019-12-27 14:35:45 · 1163 阅读 · 3 评论 -
Android-adb USB和无线互相切换
USB切无线:1. 确保手机和电脑在同一局域网2. 手机usb链接电脑3. adb tcpip 5555 设置tcpip端口4. adb connect 10.220.37.45:5555 其中10.220.37.45为手机ip地址,可从手机设置wifi链接里面找到,也可通过adb shell netstat获取。无线切USB:adb usb...原创 2019-12-20 20:40:39 · 401 阅读 · 0 评论 -
Android-dumpsys & dump backtrace
dumpsys:概述:dumpsys用来dump某系统组件的信息。注册在ServiceManager里的`Service`, 每个`Service`都可以通过实现`dump`接口来说明自己的信息。具体的dump内容由service自己的dump函数来实现。例如media.player的dump函数实现如下:status_t MediaPlayerService::Client::...原创 2019-12-10 14:17:32 · 1603 阅读 · 0 评论 -
Android-SELinux权限
1. 尝试如下操作:adb rootadb shell setenforce 0 // 不检查SELinux相关的内容然后尝试代码是否可以运行。如果可以运行即可确认是SELinux权限的问题。2. 确认了问题之后,就需要解决问题。关于SELinux权限,在/device/qcom/sepolicy目录下有很多.te文件可以修改。例如audioserver的权限文件就在: /...原创 2019-12-03 11:01:18 · 428 阅读 · 0 评论 -
Android-MediaScanner&MediaProvider学习一
前言: 安卓手机中有一个google原生的对媒体文件的操作-MediaProvider。这个服务是通过apk的方式运行的,开机自启动。这个服务的主要功能是维护一个媒体文件的数据库。但有新的媒体文件生成时将其插入数据库,当有媒体文件被删除时,从数据库删除相应的记录,当访问图库等app时从数据库读取响应的数据…… ps: MediaProvider是原生的服务,三方app可以直接调用进行插...原创 2019-10-16 15:11:06 · 1359 阅读 · 0 评论 -
Android-动态壁纸的实现
前言: 最近遇到了几个很恶心的问题,第一个是手机录制视频发现资源不够用,第二个是手机播放视频发现卡顿。找了半天两个问题的root cause都是手机动态壁纸。我们手机动态壁纸的实现是无论当前壁纸是否处于前台,video instance都是一直活跃的。不得不说,这个设计真的很过分,一是浪费资源,二是会引起很多video的问题。所以今天就了解下动态壁纸的具体实现过程,看看是否可以优化这个设计…...原创 2019-10-12 16:28:47 · 3475 阅读 · 0 评论 -
安卓基础-安卓底层针对不同APP做不同处理
前言: 安卓底层对于不同APP通常有不同的参数配置。这个功能可以通过接口实现,让APP自己决定具体的参数配置。但是在一些情况下,APP自己设置的参数并不一定符合所有客户的需求,所以需要厂商根据自己实际情况去做不同改变。 下面以设置vidoe的比特率为例介绍具体实现方法:方法一. 在native层获取APP name然后做不同处理1. 包含头文件#include <...原创 2019-05-12 12:05:12 · 1495 阅读 · 0 评论 -
安卓基础-ADSP/CDSP编译
ADSP/CDSP编译进入vendor/qcom/non-hlos-sm8150-la10下执行 ./build_adsp.sh or ./build_cdsp.sh ./build_nonhlos.sh生成的文件存放在vendor/qcom/non-hlos-sm8150-la10/common/build/ufs/bin/asic/pil_split_bins目录下。将目录下的对应...原创 2019-05-16 21:31:29 · 12116 阅读 · 4 评论 -
adb install apk问题
1. Failure [INSTALL_FAILED_VERSION_DOWNGRADE] 问题: 当前要安装的版本低于已经安装的版本 解决: adb install -r -d xxx.apk2. Failure [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user] 问题: 系统阻止安装此类应...原创 2019-05-24 09:50:37 · 2773 阅读 · 0 评论 -
Android-MediaScanner&MediaProvider学习二
前面我已经简单介绍了安卓中MediaScanner&MediaProvider的大概作用: https://blog.youkuaiyun.com/cheriyou_/article/details/102585977 本文将继续探索MediaScanner&MediaProvider的具体实现。视频扫描过程:1. app生成文件之后可能会将该文件加到对应的数据库中(app可以自己创建...原创 2019-06-04 16:21:36 · 1717 阅读 · 1 评论