自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(505)
  • 资源 (3)
  • 收藏
  • 关注

原创 安卓自带实时帧率展示的2种方式详细剖析

但是大家注意,这样修改后发现后续进行setprop debug.fps.show 1后,新打开的app(也就是完全一个新的进程,这种我们常规理解是新的类要重新加载)也发现没有任何的变化,永远都是保持为DEBUG_FPS false。新版本的aosp15版本在看ViewRootImpl相关类代码时候,发现系统居然自带了各个图层的FPS相关的打印功能了,以前没有这个功能时候我们都是自己做的fps功能,今天一起来看看原生自带fps的2种方式哈。后续应用进程fork自Zygote,继承这些"固化"的值。

2025-11-25 11:33:13 650

原创 安卓系统fw工程师面试福利10:近期收集学员某大厂FW面试真题

为什么用Socket不用Binder呢(答的是zygote启动得太早了(其实Binder需ServiceManger,zygote起来的时候还没有,当时没讲清楚))flutter的渲染引擎,怎么将视图渲染上屏的。有没有接触linux系统。

2025-11-24 09:00:00 271

原创 上帝视角看App是如何绘制一帧画面的到Surface的?结合Perfetto/Systrace分析

以前讲解时候,为了方便都是以native程序进行分析,绘制数据等都是最简单填充rgb颜色数据,但是vip学员们反馈能否补充一些关于Activity这种普通apk绘制的流程。今天刚好找到一篇老同事们写的一篇blog刚好是讲解Activity的view绘制流程的,这里就稍微进行一些修改整理,给大家进行分享。

2025-11-21 12:44:56 952

原创 Google官方介绍Android 16 新特性都有哪些

通过使用新的 PRIORITY_SYSTEM_NAVIGATION_OBSERVER 注册 onBackInvokedCallback,您的应用可以在系统处理返回导航时接收常规的 onBackInvoked 调用,而不会影响正常的返回导航流程。在 Android 16 中,我们引入了一个新 API JobScheduler#getPendingJobReasons(int jobId),该 API 会返回作业处于待处理状态的多种原因,包括开发者设置的显式约束条件和系统设置的隐式约束条件。

2025-11-20 11:06:08 644

原创 学员作业:安卓15系统应用的开机广播为什么无法收到?

针对这个样的疑问其实还是比较有意思,虽然也有学员朋友群里分享一些相关的blog进行解答剖析,但是很多学员朋友哪怕看了blog也一样有相关疑问,请问这个blog作者是怎么分析出来的,不想要直接看结论,也想要自己学会来分析这种问题。所以马哥今天就给大家布置这样一个作业,大家尽量不要再去看相关的网络blog,而是完全靠自己现有的fw技能去探索分析出原因,及制定相关的修改方案。3、通过第2步定位的代码,进行相关的深入分析找出无法接受根本原因,而且说明为啥手动启动后就可以接收到。1、写到系统app中进行测试。

2025-11-17 11:16:20 439

原创 Android Automotive 16车载源码下载及编译模拟器成功运行

如果是第一次repo清华大学镜像情况,会出现repo到google地址等情况,建议大家窗口下面文章进行修改相关的repo进行解决。其实无论是手机还是车机都是使用一套的aosp源码进行开发,所以这块repo部分和手机开发时候没有任何差别。aosp版本为android-16.0.0_r2。电脑内存:建议大于32G。

2025-11-14 10:17:33 842 1

原创 android系统开发必会技巧:手把手教你framework层面依赖第三方静态jar

重点在看看这个bp。

2025-11-14 08:55:13 835

原创 分屏SplitScreen干货技能:如何监听分屏Task进入退出及上下分屏位置

***//***//***/aidl接口主要有两个接口:onStagePositionChanged --代表分屏的stage位置有变化的时候回调,正常都是main side stage 值一般为0,1onTaskStageChanged --代表分屏task的有变化时候回调,比如退出分屏,进入分屏和2个参数stage,visible。stage代表当前taskId处于main还是side stage的位置,值一般为0,1上下分屏,如果-1就是退出分屏。

2025-11-13 11:48:06 856

原创 AMS干货技能:如何监听Task前后台切换事件之TaskStackListener原理剖析

上面就是经典的监听系统task相关的情况的TaskStackListener,task变化的相关回调方法很多,它实际上是一个binder的实现端 ITaskStackListener.Stub,它的客户调用端,那当然是ATMS端。下面来展示一下上面的TaskStackListener监听的效果,这块我们就直接使用Launcher代码中TopTaskTracker类来进行实战测试,通过log打印既可以看出Task相关变化。什么时候Activity退出了?当前分屏的显示的是哪个Task,分屏是不是退出了?

2025-11-12 12:18:53 955

原创 面试题剖析:android全局触摸事件的前世与今生InputMonitor/SpyWindow

InputMonitor其实是直接在InputDispatch中有InputChannel,直接InputDispatcher的所有输入事件发送到这个InputChannel,没有任何的InputWindow的相关信息,完全是单独属于global monitor处理。这个同学回答其实还是比较认真的,他认为因为以前的Monitor是只有systemserver进程才可以进行监听的,所以要系统app可以监听全局触摸必须要sypwindow才可以,其实这个回答还是不那么准确哈。Monitor 的一些痛点问题。

2025-11-06 11:01:59 655

原创 安卓系统fw工程师面试福利9:近期收集学员手机车载FW面试真题

3、看你这边说了解protolog和各种log调试方式,请问你工作中一般怎么看log,main,events,system,kernel,protolog日志分别代表什么,可否详细说说具体场景,及你从这些log中有什么启发,如果要你为某个模块设计详细log你会怎么做。13、看你fw知识面都比较广,而且熟悉程度也还可以,请问你这边对framework知识技能掌握有啥方式方法,你这边如果在未来工作中会很忙,而且framework技术也发现成长有了瓶颈,有啥突破瓶颈想法?你思考过为啥新版本就要有Spy?

2025-11-05 11:31:21 353

原创 从Perfetto视角看Audio异常underrun问题的表现

但是数据buf不足正常那就不足,正常我们想象就一直等待数据满足了后再进行thread_write写入数据到hal,那这样只是说数据要过一会才播放,能理解听到的效果一卡一卡,但是AudioTrack发送过来的数据应该是是按照顺序写入应该是要正常的,没有数据就不进行写入,这样来看那么MixerThread导出的wav文件也应该要正常?我们知道,在Audio模块中数据采用的是生产者-消费者模式,生产者负责生产数据,消费者用于消费数据,针对AudioTrack和AudioRecord,其对应的角色不同;

2025-11-04 15:24:36 801

原创 google官方文档教你使用 Winscope 捕获跟踪记录

您可在本地运行 Winscope 或通过 Web 服务器访问它。您可以使用 Winscope 捕获跟踪记录以进行本地开发和调试。Winscope 使用 adb,后者支持通过 USB 或 Wi-Fi 连接设备。启动 Winscope 后,系统会显示 Collect Traces 界面。

2025-11-03 09:42:04 1070

原创 windows系统上aosp15上winscope离线html如何使用?

文章中也说明在aosp15如果直接使用编译好的离线html是有问题的,无法正常显示抓取的Winscope文件。针对这样一个问题对于有些同学来说还是很不友好,因为很可能他们不想搭建node相关的环境,那么针对 aosp15上Winscope离线的html是否真的不可以使用呢?所以核心就是要安装http-server,它的安装有多种方式这里主要介绍npm安装方式。

2025-10-31 23:46:18 871

原创 必学音频干货调试技巧:命令dumpsys audio相关信息剖析

其实在audio的开发中另一个命令dumpsys audio 也是非常常见的的,特别是在音频焦点,音量调节部分的调试,音频设备连接等等,那么下面就重点聊一下dumpsys audio这个命令。因为输出的信息很多,我们只对重要的,常用的几个部分进行讲解,比如音频音量相关,音频焦点相关,其他部分大家也完全可以自己去AudioService的dump方法中追一些既可以。Event日志详细记录了音量变化的操作记录,经常可以用于音量不知道被谁改变的一个依据,比如是音量键操作还是说设置的音量条滑动操作。

2025-10-31 11:33:14 718

原创 aosp15版本InputReader事件如何通知到InputDispatcher的?

可以看到从最开始的是到的UnwantedInteractionBlocker对应的TracedInputListener的中notify方法,一步步到InputDispatcher的notifyMotion方法中。针对学员提出的新版本的事件通知notify部分,InputReader代码到底是如何调用到InputDispatcher的notifyMotion,notifyKey等方法的。这段代码展示了C++17中std::variant和std::visit的典型用法,实现了一种类型安全的访问者模式。

2025-10-28 11:11:52 1072

原创 学员投稿:wms优化改进dumpsys层级结构树显示具体层级数字

因为这里的Leaf:3:12本身属于一个范围节点,而且本身这个节点下面就一个子节点,也就是说3-12层都是最后都是只装了一个窗口,没有再细分其他层级窗口节点,所以你可以认为这个3-12是一个整体上的一层既可以。

2025-10-26 10:46:28 842

原创 aosp需求开发:java核心库libcore如何单编及打印log和堆栈

经常在aosp开发时候会使用很多的java本身的核心库,这个核心库的类本身就不是单独针对android开发的,而是各个平台都可以使用,就像我们电脑上eclipse编译运行java代码一样,完全不需要android部分的framework代码。那么这个时候系统开发可能经常就容易和app进行扯皮,所以需要考虑在System.exit等方法中加入相关的堆栈来证明app的退出是哪块代码触发的,所以就有需求在System.exit方法中加入相关的堆栈打印等。重点来了,请问写完这个代码后如何进行编译呢?

2025-10-24 10:41:53 705

原创 音频调试技巧分享:mediametrics::LogItem相关日志如何查看?

上面代码就是AudioTrack在创建过程中 AudioTrack::createTrack_l()方法中的mediametrics的日志打印,其实可以看得出这个mediametrics日志打印还很详细,AudioTrack创建时候需要的相关属性和参数都有,但是这个日志打印也不是我们普通的ALOGE这种,直接使用adb logcat可以看到。所以一般比较建议使用–prefix X,这里X可以认为是一直日志的过滤,比如你只需要audiotrack相关记录,就使用audio.track。

2025-10-23 15:59:36 471

原创 系统窗口黑屏疑难问题:aosp14自由窗口界面多次退出黑屏问题

从aosp14开始很多窗口相关的动画都开始使用ShellTransition了,针对自由窗口这块的学习如果是基于aosp14版本的话,可能就会遇到相比aosp13版本上多出一些疑难问题,这些问题有的是必现有的是偶现,今天给各位vip学员们分享一个高概率偶现的疑难问题作业,有给各位学员们增加了一个实战机会。4、退出自由窗口后,桌面又进行点击图库进入自由窗口模式,反复进行若干次操作就可以高概率复现如下现问题。4、对于整个黑屏问题的解决过程中,发现有哪些是比较低效的,对于这块黑屏问题的提效有啥好的建议。

2025-10-22 10:02:26 413

原创 干货分享:aosp13锁屏壁纸部分原理剖析

这里主要就是到DataSystem目录获取对应的目录/data/system/users/0,加上锁屏壁纸对应的文件名字wallpaper_lock_orig,wallpaper_lock,构造出对应的File文件对象。到此服务端返回了fd后就业务完成,下面就是跨进程传递fd客户端,客户端拿到了fd后进行数据写入,这块回到最开头的WallpaperManager.java的setStream方法既可以。这里在设置的壁纸中就有壁纸设置的入口,选择正确壁纸图片,然后可以选着设置锁屏还是桌面壁纸。

2025-10-21 12:10:47 697

原创 安卓系统中线程优先级Priority查看方式汇总

在audio相关模块开发时候,会有遇到一些优先级比较高的线程比如快速混音线程FastMixer,但是这个快速混音中的快到底是如何体现的呢?其实有一个部分就是线程的优先级,优先级直接会影响线程的cpu获取情况,本文主要来给大家讲解一下如何获取查看系统中相关线程的优先级情况。可以看到其实这里看到静态priority是 96和101,和上面top获取的是有一个转换关系。FastMixer线程优先级为96 (real-time)这里主要看到 PR NI这两个值。

2025-10-20 10:53:30 290

原创 安卓如何查看settings是被哪个进程更新的?相关dumpsys命令剖析

经常在开发中会使用settings来保存共享一些数据,方便各个进程进行直接读取,这样就不需要额外写跨进程接口了,但是settings值也是可以被多个进程进行修改的只要这些进程是有权限和系统签名的话。这里我们采用adb shell的settings命令来更新一下enable_freeform_support的值,然后看看他的pkg名字是否在更新后有变化。明显看到这里的pkg变成root,其实也就是我们的adb shell哈,明显pkg不是原来的settings了。那么有没有更好的方法呢?

2025-10-18 11:55:06 976

原创 aosp native源码基础: Futex同步机制实战剖析

Futex按英文翻译过来就是快速用户空间互斥体。Futex是一种用户态和内核态混合的同步机制。首先,同步的进程间通过mmap共享一段内存,futex变量就位于这段共享的内存中且操作是原子的,当进程尝试进入互斥区或者退出互斥区的时候,先去查看共享内存中的futex变量,如果没有竞争发生,则只修改futex,而不 用再执行系统调用了。当通过访问futex变量告诉进程有竞争发生,则还是得执行系统调用去完成相应的处理(wait 或者 wake up)。

2025-10-15 15:55:01 384

原创 如何让Perfetto像日志瞬时打印事件-重学Perfetto的ATRACE相关API

常见使用perfetto进行看方法调用时候,每个方法执行都是有一个个片段,因为代码中加入atrace时候都有对应begin和end方法成对出现,哪怕ATRACE_CALL这种宏其实也是一个临时对象进行构造时候调用atrace_begin,在析构方法中atrace_end。上面是我们的常用打印atrace方法情况,但是大家有没有想过我们打印日志其实是一个瞬时动作,直接调用一下ALOGE方法就可以这个时间点输出日志,完全不需要begin和end成对打印。可以看到最后就是调用到了atrace_instant。

2025-10-13 10:58:48 726

原创 aosp15 SurfaceFlinger打印ATRACE编译报错及ScopedTrace类剖析

首先大家可能下意识的会忽略掉前两个.h中错误,因为可能觉得这块代码都不是我们自己写的,所以很容易不理会,但是错误3因为属于自己加入代码并且报错就在加的哪一行,一般注意力都在错误3,这样看其实也算正常啦,毕竟大家下意识只关注自己加入代码。哈哈,那这里其实就清楚了,原理SurfaceFlinger对于ATRACE打印这块有自己做了全新的trace.h来定义相关的trace打印输出的宏,所以代码中一旦引入了SurfaceFlinger自己的trace.h就不可以再使用。那么到底是怎么回事呢?

2025-10-13 01:07:20 306

原创 学员作业:探索锁屏、桌面壁纸相关差异显示原理

系统中即可以设置桌面壁纸,也可以设置锁屏壁纸,而且二者还可以长得不一样,各自设置各自壁纸,请问这块原理是什么?锁屏壁纸和桌面壁纸是如何区分的差异显示,是同一个Wallpaper的窗口显示不同的bitmap还是说根本就是不同的Wallpaper窗口?简单说他们原来解决办法是锁屏壁纸是作为锁屏界面的一个背景图片bitmap,和锁屏窗口的view是一体的,当然这个解决方案具体还得复现问题尝试验证,这个方案表面理论上看着可行。但有学员朋友又私下问到了,锁屏壁纸和桌面壁纸的相关差异区别原理是啥?

2025-10-12 11:22:05 327

原创 android音频低延时设计:Fast Mixer官方文档

如果它决定传递该请求,则会使用 IAudioTrack 工厂方法 IAudioFlinger::createTrack() 的 track_flags_t 参数的 TRACK_FAST 位来实现。客户端可以选择性地在 AudioTrack C++ 构造函数或 AudioTrack::set() 的 audio_output_flags_t 参数中设置位 AUDIO_OUTPUT_FLAG_FAST。尤其是,快速混音器看不到 Binder 级别的操作,但它确实会访问客户端的共享存储器控制块。

2025-10-10 09:55:35 1084

原创 如何学framework?优秀学员学习和找工作经验分享

framework的技术门槛相比app开发等肯定要高一些,即想入framework开发这一行肯定相对没有那么轻松,但只要你可以静下心来跟着马哥课程学习,不要三天打鱼两天晒网,动不动想要一步登天的心态,我相信你只要坚持跟着我学习1-2个月左右,你绝对可以在framework技术领域有自己的成就和位置。学习的过程可能是辛苦的,但是你付出学习努力后,收获的知识成就感也是巨大的,这些成就感会让你感觉到学会了是多么的快乐。

2025-10-09 09:45:05 775

原创 音频audio播放两种方式:MediaPlayer和AudioTrack对比

当然两者之间还是有紧密的联系的,MediaPlayer在framework层还是会创建AudioTrack,把解码后的PCM数流传递给AudioTrack,注意这里的AudioTrack不是app进程创建的,而是MediaPlayer对应的服务端mediaserver进程创建的AudioTrack,AudioTrack再传递给AudioFlinger进行混音,然后才传递给硬件播放,所以是MediaPlaye内部r包含了AudioTrack。虽然都可以播放声音,但两者还是有很大的区别的。

2025-10-08 21:17:10 667

原创 音频焦点学习之AudioFocusRequest.Builder类剖析

当您的应用需要输出音频时,它需要请求获得音频焦点,获得焦点后,就可以播放声音了。其他应用可以请求焦点,从而占有您持有的音频焦点。主要用了声明app是如何对待Audio ducking的情况,因为app申请的类型是AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK时候,它成为了新焦点,但影响原来的焦点,这个时候就有2中处理方式。1、一种系统默认处理直接让原来音频焦点app不接受丢失焦点的回调,而是系统层面直接吧原来音频焦点app的声音进行音量减低,主要听到肯定是新焦点app的声音,

2025-10-06 19:26:37 881

原创 国庆中秋安卓面试福利8:大厂手机车载FW面试真题

一般你只要跟着马哥认真学了课程,这些题目其实都不是什么大问题哈,当然有一些题目也确实有一定难度哈。13、针对分配过来的一个问题,不涉及你当前负责的模块,请问你该怎么做?4、问题3是一个开放问题,在你的理解里面,你猜下这个频率是多少?

2025-10-04 10:17:02 370

原创 安卓官方文档之音频焦点AudioFocus相关

出现这种情况时,您的应用会收到对 AudioFocusChangeListener 中 onAudioFocusChange() 方法的调用,该方法是您在应用调用 requestAudioFocus() 时指定的。其他应用可以请求焦点,从而占有您持有的音频焦点。在 Android 8.0(API 级别 26)中,当其他应用使用 AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK 请求焦点时,系统可以在不调用应用的 onAudioFocusChange() 回调的情况下降低和恢复音量。

2025-09-28 23:07:38 855

原创 手把手分析no focused window疑难ANR详细视频+笔记-千里马实战wms专题课程

验证确实发现ANR的Activity窗口的flag是fl=NOT_FOCUSABLE ,所以这个anr可以确诊为属于app自身设置了NOT_FOCUSABLE的flag。可以看到都为false,自然就不会有上面的Focus request,那么为啥这里的canReceive=false,日志也有打印reason。先有新窗口Focus request,再有上一个窗口的Focus leaving,最后有新窗口的Focus entering。所以am_anr日志看到的时间点正确是anr真实发生时间。

2025-09-28 11:00:04 1007

原创 系统开发干货技能:系统广播broadcast调试命令汇总

这个命令模拟了一个应用内定义的动作,并传递了多种类型的参数。

2025-09-24 11:09:12 727

原创 安卓车机车载面试福利7:一线厂商车载系统开发相关面试真题(持续更新)

马哥这边也会对这些面试题目进行收集,整理一起分享给大家,当然很多framework的面试题目其实都是马哥平时framework入门到精通课程中有讲解的。6、针对不同的Activity启动模式,请问Task这块有什么不同的体现?

2025-09-23 09:50:14 396

原创 学习安卓audio疑问解答:物理按键调节声音设置界面的Seekbar为什么会跟着一起同步变化?

物理音量按键也可以调节声音,设置界面的Seekbar也可以调节声音,请问二者是如何进行同步的呢?物理音量调节后设置的画面的也seekbar会同步动起来,本文来剖析一下为啥可以进行音量进度条的同步。VolumeStreamState类的setIndex中会进行对应的音量变化的广播Setting端的同步更新部分剖析广播方式通知数据更新:音量调节后会广播发送由AudioService发送frameworks/base/core/java/android/preference/SeekBarVolumi

2025-09-22 22:45:41 940

原创 音量调节相关的一些问题解答之Active StreamType原理

刚开始stream=-2147483648,然后通过getActiveStreamType变成的默认的StreamType为3,也就是StreamType为music,后续都一直以StreamType为3进行音量条件,那么接下来主要分析一下getActiveStreamType方法。为什么系统在按音量上下键时候,就可以准确识别出当前的StreamType,调节的都是当前正在播放的StreamType?2、物理音量按键也可以调节声音,设置界面的Seekbar也可以调节声音,请问二者是如何进行同步的呢?

2025-09-22 11:12:28 1067

原创 aosp13/14/15/16如何实现窗口局部区域高斯模糊毛玻璃效果及Winscope原生重大bug发现

以前高斯模糊原理也分析过,知道是在SurfaceFlinger触摸绘制时候进行的高斯模糊,那么再来分析一下高斯模糊相关实现时候是否有相关区域设置参数,从而反推出相关接口。简单说学员就是想实现对状态栏等区域局部进行高斯模糊,以前方案是针对窗口layer所有进行模糊,那么是否可以实现窗口的局部高斯模糊呢?但是上面分享模糊都是针对整个窗口进行的,就是桌面窗口设置一下后面窗口进行模糊的标志位,然后针对桌面窗口后面的壁纸窗口进行整体模糊。那么接下来要去探索aosp原生系统是否有接口支持局部高斯模糊呢?

2025-09-19 10:17:56 672

原创 安卓车机车载面试福利6:一线厂商车载系统开发相关面试题

8.如果副屏显示了一个最近使用app的列表,主屏是你自己开发的 APP,我在最近列表中点击了 APP,希望把主屏中的 APP拿过来,怎么实现?4.双指拖动当前窗口的话,触摸事件会误触窗口中的activity吗,如果会,如何防止误触?

2025-09-17 10:30:47 604

千里马android framework学习课程资料下载

千里马android framework学习资料下载 车载车机系统开发,android 系统源码 aosp 11/12/13/ wms学习,android系统闪黑问题解决 车载多屏互动实战项目经验 surfaceflinger图层实战应用 input全局触摸实战 冻屏触摸问题分析实战 深入理解framework重点模块wms 胜任wms相关的需求开发 掌握系统闪黑,冻屏疑难问题解决 成为业界wms/ams模块专家打下基础

2023-06-28

Android Framework学习资料,系统开发,Framework开发

千里马android framework学习资料下载 车载车机系统开发,android 系统源码 aosp 11/12/13/ wms学习,android系统闪黑问题解决 车载多屏互动实战项目经验 surfaceflinger图层实战应用 input全局触摸实战 冻屏触摸问题分析实战 深入理解framework重点模块wms 胜任wms相关的需求开发 掌握系统闪黑,冻屏疑难问题解决 成为业界wms/ams模块专家打下基础

2021-05-21

新加一个app源码到packages/apps编译Android.mk

Android Framework开发之新加一个app源码到packages/apps编译Android.mk配置 hi,粉丝朋友们大家好! 近来有朋友反馈在看我的android framework实战开发合集课程时候 (https://download.youkuaiyun.com/combo/detail/2202) 需要购买可以参考直接找千里马最优惠:https://blog.youkuaiyun.com/learnframework/article/details/124086882

2022-04-16

haxm-windows_v7_5_1新版本github.zip

Enable VT-x in your BIOS security settings, ensure that HAXM is installed properly. Try disabling 3rd party security software if the problem still occurs.问的解决方法 原文链接:https://blog.youkuaiyun.com/learnframework/article/details/117537868

2021-06-04

空空如也

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

TA关注的人

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