自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 如何改进车载三分屏SplitScreen启动交互方式?

上面这2个需求其实在真正的车机分屏中也是非常常见的哈,所以这里马哥收到学员的疑问后立即就给大家针对课程的三分屏进行相关的交互改善,实现了三分屏的动态进入,三分屏的Task内容的动态控制等。还有三分屏的各个Task是否可以不通过最近任务进行操作,有没有更简单的进入三分屏方式?这里面的componentName1,componentName2,componentName3就是三分屏的每个Task的对应Activity的名字。进入后发现第三屏Task内容就是设置的我的文件对应的FilesActivity。

2026-01-09 11:50:30 119

原创 性能优化提效方案:App冷启动优化成绩测试干货分享(一)

大家做公司的性能优化部分工作时候,有一个非常关键的指标那就是和竞品对比系统各个app的冷启动优化时间,特别是针对一些主流的第三方App,因为他们Apk一般都是同一个,所以参考各个第三方app的冷启动时间,确实可以反应出手机的一个性能如何,一般情况下冷启动时间越短肯定就是性能越好。对于我们开发人员来说,最常用的肯定是方法1,2,不太可能每次优化都用摄像机来拍摄的。其实这个肯定是可以有的,方法大家应该也都可以想到,可以借助脚本进行测试,脚本进行测试结果报告对比分析等。-W参数:列出启动过程中统计到的具体数据;

2026-01-06 16:39:12 675

原创 车载AAOS系统实现三分屏SplitScreen功能专题

这个三分屏功能效果一上线后基本上很多网友都感觉到很惊艳,特别是做车机相关开发的同学都说自己想做这个几年了,老板也一直想要做,奈何自身实力不够一直拖到马哥的课程出来后,才敢有勇气和老板说可以做车机三分屏功能了。不过有的同学在后台也提出马哥这个三分屏都是在phone平台进行实现的,但是自己公司用的都是AAOS系统,这块是否有啥差异,是否可以帮忙看看AAOS上如何运行马哥的三分屏给你。千里马手把手带你从0开始做一个车机的三分屏功能,最后做出来一个和市场上主流的小米su7 三分屏体验相当的三分屏成果。

2026-01-04 14:11:38 810

原创 安卓14-16车机手机仿小米su7三分屏实战项目专题

从简单的产品背景,产品设计开始学习,实战带大家简单开始改造原生二分屏,循序渐进做出最初版本三分屏,逐步完善DividerView,落点设计,核心的Task部分拖拽放大等逻辑。去年在小米su7上市后,很多学员朋友就一直对它的车机三分屏非常感兴趣,学员朋友们都很想知道人家是怎么实现三分屏的,其实最希望的是马哥可以手把手教一下如何从0做出一个类似小米su7的三分屏功能。千里马手把手带你从0开始做一个车机的三分屏功能,最后做出来一个和市场上主流的小米su7 三分屏体验相当的三分屏成果。

2026-01-01 21:45:05 990

原创 你不知道的Input知识:长按Key事件实现原理剖析

在平时使用安卓设备过程中经常也会需要用到Key事件,比如手机音量上下键,或者Tv遥控器等,只要涉及到了按键相关事件,就不得不提出一个key事件“长按”的场景,这里的“长按”相对于“短按”来说的。可以看到确实在InputDispatcher层面就有长按的log频繁打印,完全不是和驱动上报的event一样只有一个down一个up,这里有若干个repeatCount增长的down类型的key事件派发,第一次repeatCount =1,间隔400ms,而且每个repeat事件间隔事件大概为50ms上下。

2025-12-30 15:20:44 718

原创 车机AAOS系统开发调试:将 Pixel 设备用作开发平台

如果您尚未执行此操作,请启用开发者选项。依次转到“设置”>“系统”>“关于手机”,然后点按“build 号”七次。以下设备受支持,但未进行有效测试。您必须使用 Android 14,build 为 android-14.0.0_r30。在设备上,选择“解锁引导加载程序”。Pixel 6、Pixel 6a 和 Pixel 6 Pro。Pixel 7、Pixel 7a 和 Pixel 7 Pro。平板电脑不支持 GPS,位置需要“模拟位置应用或类似应用”您可能会导致设备变砖,请谨慎使用!

2025-12-29 09:26:44 847

原创 系统面试必须要会的几个binder经典面试题(有解答)

Binder——用于精确控制、命令传递、权限管理,适合结构化API调用。Socket——用于大量数据流传输,适合实时性要求高的连续数据。

2025-12-27 12:13:25 868

原创 这个binder面试题你会吗?-学员作业

发起跨进程调用会执行到binder_transaction方法中,这里会创建对应的binder_transaction,而且会给binder_transaction进行相关的赋值,然后到目标进程的binder_thread_read进行使用。在目标进程binder_thread_read方法中,会读取上面的对sender_pid和sender_euid进行设置,返回到app层面。可以看到这里的赋值来源就是binder驱动中传递过来的sender_pid,sender_euid。

2025-12-25 11:50:24 683

原创 这个binder面试题你会吗?-学员作业

app调用wms接口,wms中处理又会调用到sf进程,请问说出在wms,sf中binder方法中getcalluid是谁?当时看着其实感觉也没啥问题,并没啥难度,所以在vip群里也有学员朋友积极的进行回答。可以看出确实在aosp16版本显示pid是0,但是对应uid是1000也就是system_server。这块代码确实看到有设置成0和正常pid的,但是这块代码排查后,两个14,16版本都是一样的调用方式。针对这个问题已经存在了各种争议,马哥也针对这个问题在不同的版本进行了验证,发现还确实是有差异的。

2025-12-25 10:39:21 849

原创 sf干货知识:SurfaceControl数据如何与Layer的bounds进行关联及Winscope如何查看?

其实看完Layer的computeBounds方法也完全可以理解,因为Layer的bounds其实是受到几个关键因素的影响,比如parent的bounds,自己transform,crop等,综合计算得出了自己的screenbounds显示区域。但是也有同学求助马哥,希望这个文章内容可以扩展一下和平时接触的WMS或者SurfaceControl设置bounds相关数据结合起来,而且经常在Winscope使用时候也需要看这些bounds数据,希望马哥也可以稍微补充一下这块。

2025-12-22 12:18:59 639

原创 google官方文档:深入剖析ProtoLog原理及Winscope的查看方式

在我们学习了wms相关课程后,都知道wms和systemui很多地方调用都有Proto相关的日志,有了这些日志可以大大方便调试相关窗口显示疑难问题。这些proto的日志默认都是不开放的,可以动态通过相关命令打开。但是说实话,使用命令有以下几个痛点:1、不一定知道具体要开放哪些Proto的TAG,从而导致经常可能没有开放到对应TAG2、每次机器重启,都需要重新执行wm命令打开Proto那么有没有什么工具可以解决上面痛点呢?那就是今天介绍的Winscope中查看Proto日志。Android 日志记录系统

2025-12-21 11:06:28 997

原创 重学SurfaceFlinger之Layer显示区域bounds计算剖析

通过这个简单案例,我们可以看到computeBounds的核心思想:通过逆变换将父边界转换到子层坐标系,以便在同一个坐标系中进行裁剪。子层的内容(源边界)先与自身的裁剪区域相交,再与父边界相交,得到最终在子层坐标系中的边界(mBounds)。然后通过有效变换将mBounds变换到屏幕坐标系,得到屏幕上的实际显示区域(mScreenBounds)。这样的设计保证了每一层都只显示在父层允许的范围内,并且可以方便地应用自身的裁剪。

2025-12-19 23:19:00 608

原创 如何使用豆包手机的READ_FRAME_BUFFER权限截图密码画面

READ_FRAME_BUFFER权限确实是需要系统签名才可以使用的,默认不设置setCaptureSecureLayers(true)那确实无法截图到手势密码等secure画面,但是如果设置了setCaptureSecureLayers(true)就可以截图到各个secure的内容。但是文章也给大家留下了一个疑问,那就是具有READ_FRAME_BUFFER权限到底是否可以截图到手机上secure画面,比如银行等密码手势画面。注释可以看出是可以截图安全的layer到sc。

2025-12-18 09:54:03 522

原创 豆包手机助手权限之READ_FRAME_BUFFER剖析

READ_FRAME_BUFFER真的只能截图普通图层,就不可以截取secure的窗口图层吗?

2025-12-16 12:30:58 798

原创 AI豆包手机权限文章补充:Mainfest中某个权限的protectionLevel具体是如何被系统定义的?

一般这里里面的关键signature,recents,role一般都是有在对应attrs.xml中有定义,是不可以随意对写一个字符signaturexxx,role1xxx的,这样写的不对会直接报错。上面xml其实也自带了相关的注释非常详细,大概意思就是protectionLevel中在xml中的只可以是上面这些,每个保护字符都是有自己的含义,具体含义可以看注释哈,这些字符都会变成一个个的int类型的数字。可以看到这里查找到了,原来是在attrs_manifest.xml中进行的定义。

2025-12-15 10:00:47 818

原创 系统开发必学技巧:安卓调试logcat/grep命令常用高阶技巧

在平常的安卓framework实战开发中经常会用到logcat来抓取分析相关的日志,同时也会结合grep进行过滤相关日志。但是这里明显只会过滤出带有TAG的关键字的日志,还有TAG1,TAG2,TAG3这些关键字呢?所以本文分析一些高阶常用的logcat和grep命令结合使用方法。命令,能高效过滤和分析Android日志,帮助快速定位问题。需要过滤日志中多个关键字应该如何呢?

2025-12-14 11:08:41 513

原创 聊一聊豆包AI手机助手高度敏感权限CAPTURE_SECURE_VIDEO_OUTPUT

近来手机界最火爆的话题莫过于豆包手机助手https://o.doubao.com/很多博主拿到豆包手机后也开始对豆包手机助手进行一系列的实现原理调研和猜想,比如调研时候就涉及几个我们系统fw和应用开发中常用的一些权限,CAPTURE_SECURE_VIDEO_OUTPUT(录取屏幕数据),INJECT_EVENTS(注入相关输入事件)。其实这两个权限在我们投屏专题和input专题课程都有介绍过,不过课程讲解抓取屏幕权限那时候是CAPTURE_VIDEO_OUTPUT权限,而豆包用的是CAPTURE_SE

2025-12-12 09:04:07 895

原创 开机启动优化:pixel,小米去除Fallbackhome相关调研

其实Fallbackhome出来这些年,各个手机厂商们也在不断尝试优化去除Fallbackhome的优化。从以前的压根不优化Fallbackhome显示到加入相关的美化版的过渡动画Fallbackhome,再到彻底去除Fallbackhome直接让Launcher进行运行,也可以发现虽然一直有尝试这块的优化,但是依然还是和我们最初的认知没有任何差异。依然是桌面不能未解锁启动是因为有其他很多第三方的依赖,也就是只要可以处理好这块的依赖,让他们进行延时解锁后进行启动,让桌面大部分功能可以在未解锁时候启动。

2025-12-09 11:43:33 774

原创 audio开发实战小技巧:获取系统当前活跃的录音和播放track相关api介绍

***/try {/***/try {解释如下:主要负责返回当前活跃的playback的相关信息主要负责返回当前活跃的录音trace的相关信息使用demo进行调用相关的api。

2025-12-08 11:50:53 360

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

马哥这边也会对这些面试题目进行收集,整理一起分享给大家,当然很多framework的面试题目其实都是马哥平时framework入门到精通课程中有讲解的。12、anr是什么,请从原理级别讲清楚,出现anr你是怎么分析的,请说说你的流程。

2025-12-05 10:43:39 372

原创 必学干货:Perfetto分析native内存泄露实战笔记

在android开发中经常会有需求来分析一些内存问题,比如内存泄露,内存过大等,针对java相关的进程其实内存都还比较好定位,因为大家app开发时候都会经常使用Android Studio抓取hprof内存快照,然后与MAT工具结合起来一起分析定位内存泄露相关的问题。这里使用一个demo来测试,使用在onCreate中进行Bitmap的构造,看看是否可以看到它的一个内存情况。这里就需要看你前面config设置的是哪个进程名字,然后去对应进程中找下面的Heap Profile。

2025-12-04 11:48:21 1018

原创 Perfetto官方文档教你看CPU Scheduling events部分

例如,调度器可能宁愿等待一段时间,希望当前 CPU 上运行的线程进入空闲状态,从而避免跨 CPU 迁移,这在开销和功耗方面可能代价更高。sched_switch 事件仅在线程处于 R(可运行) 状态且正在 CPU 运行队列上运行时发出,而 sched_waking 事件则在任何导致线程状态改变的事件发生时发出。表中的每一行显示了特定线程(utid)开始运行的时间(ts)、在哪个核心上运行(cpu)、运行了多长时间(dur),以及它停止运行的原因:end_state。那么cpu片段这块的信息到底如何看呢?

2025-12-01 09:54:54 911

原创 wms开发常用调试开发技巧之WMShell的实用命令

这里有几个WMShell下面还有若干个子命令compatui,protolog,splitscreen等,可以使用这些子命令进行更加精确的控制WMShell相关的一些给你,当然如果没有输入任何子命令情况下,那就是默认输入所有WMShell的内部dump输出。在wms窗口开发工程师日常工作中,经常需要和WMShell打交道,比如分屏,自由窗口,startingwindow等都移入到了WMShell中。我们比较熟悉的SplitScreen相关,Pip相关,单手模式等都有相关的dump信息输出。

2025-11-30 21:21:01 712 1

原创 Perfetto性能优化:卡顿检测之FrameTimeline官方文档详细剖析

NOTE: FrameTimeline requires Android 12(S) or higherA frame is said to be janky if the time the frame was presented on screen doesnot match the predicted present time given by the scheduler.A jank can cause:FrameTimeline is a module within SurfaceFlinger

2025-11-27 23:21:48 1125

原创 android图形绘制学习之从0写一个native层的绘图应用程序3种方式

在上面的示例中,几个关建点是,第一步,先创建出一个SurfaceComposerClient,它是我们和Surfaceflinger沟通的桥梁,第二步,通过SurfaceComposerClient的createLayer接口创建一个SurfaceControl,这是我们控制Surface的一个工具,第三步,从SurfaceControl的getSurface接口来获取Surface对象,这是我们操作BufferQueue的接口。更多framework实战开发干货,请关注下面“千里马学框架”

2025-11-27 09:13:44 866

原创 某学员framework的闭关学习2个月的过程分享

不过最后发现这个层级结构树要是懂了,也可以画出来后,学习wms后面的东西真舒服,他就像是一个重要理论基础,其他的所有窗口相关的操作都是在这个层级结构树上挂新的节点,换节点,去除节点等操作,还有就是窗口结构树要和SurfaceFlinger结构树要进行结合学习,也理解他们区分等。后来学了这课程后发现确实难得的实战项目干货,刚好把wms课程中学习的wms,sf层级结构树,Winscope分析闪黑等疑难问题,input专题等相关知识进行了综合实战,我更觉得这个是马哥故意给我们添加的实战项目作业题目。

2025-11-26 11:10:47 1271

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

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

2025-11-25 11:33:13 1161 1

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

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

2025-11-24 09:00:00 409

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

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

2025-11-21 12:44:56 1049

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

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

2025-11-20 11:06:08 769

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

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

2025-11-17 11:16:20 499

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

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

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

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

重点在看看这个bp。

2025-11-14 08:55:13 895

原创 分屏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 940

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

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

2025-11-12 12:18:53 1012

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

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

2025-11-06 11:01:59 695

原创 安卓系统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 385

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

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

2025-11-04 15:24:36 872

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

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

2025-11-03 09:42:04 1206

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

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

2025-10-31 23:46:18 1022

千里马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关注的人

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