- 博客(430)
- 资源 (4)
- 收藏
- 关注
原创 Input模块作业成果分享:手把手带你实现按键一键启动Activity
这个需求也像学员朋友群里的说的,属于做机顶盒相关的开发的常见需求,所以整体的作业需求的难度算一般,既然一般难度的需求,那么更需求各位学员朋友可以进行实战实现啦。上面主要对系统进行整编,然后安装apk(注意不要点击启动这个app),点击音量上按键,但是发现没有任何的反应,只有log输出,并没有Activity的跳转。–主要负责解析global_keys.xml中定义的keycode和对应的broadcast的component,方便后续处理时候有重要的依据。可以看到有我们mKeyMapping相关的数据。
2025-07-21 09:29:19
577
原创 重学Framework Input模块:如何实现按键一键启动Activity-学员作业
近来vip群里学员朋友有问道一个需求,大概需求就是他们做TV的Framework开发,想要遥控器有一个新定义的儿童节目按键,想要实现这个按键按下后就跳转到儿童节目的Activity。3、需要考虑儿童节目app进程,接受到了按键事件后,需要考虑拉起Activity,注意这里有可能儿童节目app压根没有任何的可见窗口。1、针对按键事件的全局监听和处理,建议大家可以采用2种方案进行实现,这里的儿童按键,大家可以使用其他现有按键进行模拟既可以。1、按键部分,需要全局对事件进行监听,而且可以处理相关的响应逻辑。
2025-07-20 00:11:25
291
原创 aosp15实现SurfaceFlinger的dump输出带上Layer详细信息踩坑笔记
但是在aosp15版本上这个mLayerLifecycleManagerEnabled值一直都是true,所以根本不会进入执行这块的mDrawingState.traverse,也就是说在aosp15版本的SurfaceFlinger已经弃用了这个mDrawingState.traverse。给大家布置了一个小作业,那就是需要实现dumpsys SurfaceFlinger相关输出中可以携带上所有的Layer的详细信息需求,今天来带大家详细实现一下这个需求。在总的dump方法最后,加入如下代码。
2025-07-19 22:11:24
639
原创 aosp15上SurfaceFlinger的dump部分新特性-无Layer相关详细信息输出如何解决?
上面Input list输出内容可以看出,这里重点展示的触摸相关的区域信息,而且还会有当前input layer没有visibility的原因显示,因为layer虽然可以成为InputDispatcher中的传递对象,但是他不一定显示,最经典的就是ActivityRecordInputSink这种。虽然有了上面几个新特性的亮点功能,但是也发现aosp15版本把一些比较重要的信息进行了删除裁剪,这里最明显是再也没有详细的Layer信息。这块就留给学员朋友们的一个小作业哈,难度较低,希望大家积极踊跃完成哈。
2025-07-19 22:08:36
723
原创 千里马直播通知:高阶WMS显示相关疑难问题自由窗口/黑屏/部分黑问题案例
有了aosp可以复现的步骤,那么这个问题其实本质上就是aosp的原生问题,大家一旦修复那就是帮助google改了相关的重大bug哈,很多同学都对这类原生的疑难问题修改,非常感兴趣,当然啦这个难度肯定也是最大的,所以这里把这个疑难问题整理成学员作业,让广大vip学员们可以有更好的实战解决问题锻炼。针对自由窗口相关需求,学员们在学习了课程后,也经常使用会用于公司的实战开发项目。刚开始还以为这个自由窗口产生部分黑的问题和以前课程讲的一样,但是学员认真观看后反馈两个问题场景是完全不一样的。下面学员请教的详细情况。
2025-07-13 10:17:25
360
原创 SurfaceFlinger中有Layer泄漏一直增长超过4096问题如何排查-实战问题分析排查
有学员在vip群里反馈一个SurfaceFlinger相关的报错群里讨论也非常激烈。问题如下:sf的报错信息大概可以看出这个是创建的Layer数量已经大于4096个,sf端有保护机制,为了让内存不会永久持续增大,只能报错异常,不然在创建新的。对应的代码如下:那么出现这种问题一般是什么原因呢?正常的系统要展示窗口时候创建layer,不展示时候肯定就会销毁layer,这样layer肯定不会只增不减,所以4096在长期经验来说已经足够大了,一旦会超过4096这个数量,那一般就是有泄露。
2025-07-10 11:03:08
1027
原创 User手机上如何抓取界面的布局uiautomatorviewer
android studio上下载那些插件等,使用过程中都发现有需要设备是user-debug的,如果是user版本那就无法进行抓取。那么有没有什么方法课可以在user版本也进行抓取和进行相关的分析呢?uiautomatorviewer工具使用介绍在sdk中其实有一个自带的布局展示和抓取工具uiautomatorviewer,所在路径如下:如果安装了sdk,在~/Android/Sdk/tools/bin下面的uiautomatorviewer可执行文件.这里大家可以尝试执行一下:明显会报错哈,这里报
2025-07-09 14:41:33
592
原创 提升系统开发效率:Android 系统编译及搜索内容命令
jgrep Java/Kotlin 文件 grep -R --include=*.java jgrep “extends Activity”sepgrep SELinux 策略文件 grep -R --include=*.te sepgrep “allow system_app”mgrep Makefile 文件 grep -R --include=Makefile mgrep “LOCAL_MODULE”cgrep C/C++ 源文件 grep -R --include=-i:不区分大小写搜索。
2025-07-09 11:43:47
461
原创 Winscope在aosp 13/14/15版本的使用总结
这里说的是一般并不是绝对,其实本质就是只要各个版本之间设备上抓取的Winscope的数格式差异不大可以兼容就可以,但是一般aosp13以后几个版本这块数据格式都有修改,所以13版本Winscope不支持抓取展示14,15设备版本数据。因为Winscope这个网页软件肯定是会考虑老版本兼容的功能,所以一般Winscope网页是新的,是可以兼容抓取老版本安卓设备的Winscope数据,比如aosp 15版本Winscope支持抓取展示aosp13设备的数据。3、Winscope的版本直接兼容原则是怎么样的?
2025-07-05 00:07:13
972
原创 如何解决AndroidStudio自带的LayoutInspector工具无法抓取到布局/StatusBar布局如何抓?
针对Android Studio的版本不一样,对应LayoutInspector无法抓取布局解决方法也不一样,解决方法本质就是寻找一个合适替代插件Plugin工具,上面展示了两个版本Android Studio的插件安装方法,大家注意尽量大家用Android Studio的插件市场搜索方式下载,这样可以最大程度减少插件兼容问题,每个as版本插件不一定相互兼容。更多framework实战干货,请关注下面“千里马学框架”
2025-07-02 15:06:00
895
原创 学员作业:高阶WMS显示相关疑难问题黑屏/部分黑问题案例
有了aosp可以复现的步骤,那么这个问题其实本质上就是aosp的原生问题,大家一旦修复那就是帮助google改了相关的重大bug哈,很多同学都对这类原生的疑难问题修改,非常感兴趣,当然啦这个难度肯定也是最大的,所以这里把这个疑难问题整理成学员作业,让广大vip学员们可以有更好的实战解决问题锻炼。针对自由窗口相关需求,学员们在学习了课程后,也经常使用会用于公司的实战开发项目。刚开始还以为这个自由窗口产生部分黑的问题和以前课程讲的一样,但是学员认真观看后反馈两个问题场景是完全不一样的。下面学员请教的详细情况。
2025-06-30 14:36:01
193
原创 学员作业:如何让车载CarLauncher的TaskView正常运行于手机系统?
相当于需要把CarLauncher如何显示TaskView这套流程代码理解清楚,然后把这块的业务整体进行移植到一个全新的系统app,然后这个新的系统app可以实现不依赖car相关东西也可以正常运行。上面的属于基于AAOS的CarLaucnher直接自带的功能,但是大家是否想过,如果没有CarLauncher情况下该如何实现这个Activity的嵌入功能呢?1、普通的手机Activity,有一个FrameLayout,专门用于装载TaskView。安卓设备为手机类型也可以phone类型的模拟器。
2025-06-26 11:29:42
281
原创 Input事件处理引起卡顿
例如高通基线上在2018年左右就有一笔提交,优化应用进程侧的Input事件处理流程,大概思路就是识别应用UI线程中收到第一个ACTION_DOWN的Touch事件后,调用sendMessageAtFrontOfQueue接口在应用UI线程的消息队列的最前面插入一帧doFrame绘制任务,这样界面不用等待下一个Vsync的信号的到来就能直接上帧显示,从而减少整个Input触控事件的响应延迟。从微博应用对应的“wq”队列可以看到,应用进程一直有没有完成处理消费的Input事件,说明问题在微博应用进程侧;
2025-06-21 10:50:00
832
原创 面试福利3:安卓系统framework开发面试题目-某公司真题带面试者答案
他还给大家记录了当时如何回答面试题目的,大家可以看看下面的详细面试题,当然学员的不一定回答的非常全面和百分百正确,这里大家可以进行讨论留言等,后期整理更加完善的汇总到vip群中。-运行时可以查看到CPU的信息,已经线程在CPU中的优先级 Priority 一般应用都是110,当前CPU执行时大核小核,以及CPU频率。3.判断需要显示的窗口,是否提交到合成中,以及相关属性是否异常,经常查看都就是透明度,裁剪crop,Visible,覆盖,父节点。
2025-06-17 08:56:46
973
原创 补充讲解perfetto/systrace的CPU Trace信息详解和抓取方法
前面讲解perfetto的查看信息时候,没有重点讲解cpu区域的内容,今天本文将补充讲解perfetto/systrace的CPU Trace信息详解,同时以前有讲解如何抓取开机时刻的perfetto/systrace的方法,但是也有同学反馈使用了对应config后,没有抓取到对应的cpu相关信息,本文针对上面两个知识来进行补充讲解。相比perfetto而言,systrace对cpu展示内容还多了,不过其实多的地方相对不那么核心,主要内容还是cpu的执行片段内容和cpu频率最重要。
2025-06-12 23:56:51
1266
原创 安卓15开机启动Fallbackhome去除--成果展示
大家都可能为了提高开机启动速度,或者说不想让用户看到Fallbackhome画面也好,都会有想办法去除Fallbackhome的需求或者想法,但是大家需要注意的是android以前也是没有Fallbackhome的,也是指导出现了CE加密才出现的,本质上Fallbackhome就是作为系统还没解锁前作为launcher的Activity进行启动,不然系统啥Activity都无法启动的话,就会一直处于开机动画,无法进入系统。那么最后是否可以去除Fallbackhome呢?
2025-06-11 12:20:08
663
原创 安卓首次启动Fallbackhome是否可以直接去除?--学员作业
的Fallbackhome本身好像没有干啥啊,它也只是等待检测设备解锁后启动Launcher,Fallbackhome本身自己又没有调用啥解锁,属于被动,所以普遍认为系统会自己解锁,解锁后自然会触发系统重新进行Launcher的启动。针对这个去除Fallbackhome去除后是否可以正常进入Launcher的问题,学员们也进行了激烈讨论,很多学员朋友都猜想肯定还是会进入Launcher的,只是可能时间会长一点,那么真实的情况是真的会吗?然后运行模拟器:emulator。aosp 15 编译模拟器。
2025-06-10 12:18:22
1115
原创 干货笔记:安卓系统开发工程师必须掌握常用命令汇总二(不断更新)
经常做系统开发,经常会与Settings进行打交道,一般我们可能大部分去设置app里面找相关开关ui进行操作,但是经常有一些情况下一些新加的settings或者不常见的settings无法使用,这种可以直接使用命令进行调试就不要每次编写demo代码进行测试。本节在这个基础上进行额外增加一些实战工作提效命令,方便新手vip学员查阅,后续熟悉了其实也就不在需要查阅,大家一定要多在实际工作学习中多使用文章中命令,用这些命令来提升你的工作效率等。一般需要把cpp的如下屏蔽的define进行开放。
2025-06-09 12:17:25
490
原创 perfetto抓取方式汇总官方英文文档:Quickstart: Record traces on Android
【代码】perfetto抓取方式汇总官方英文文档:Quickstart: Record traces on Android。
2025-06-07 12:18:44
841
原创 性能优化:手把手教你perfetto抓取直接用chrome浏览器踩坑笔记
上面其实看出,本质上就是下载个tracebox文件,然后执行这个tracebox文件既可以,但是下载这个tracebox文件一般国内网络都不行哈,所以这里可能又会阻碍一批人,不过这里马哥给大家提供一个 ubuntu 64位可以直接执行的文件。最后发现确实模拟器设备用WebUsb方式无法发现设备,原因暂时没有追究,不过尝试实体机手机确实是可以发现的,插上实体手机后就会有相关提示,当然前提需要手机需要开启usb调试相关。点击这种“ADB + WebSocket”方式后,发现有一堆错误提示,无法链接发现设备。
2025-06-05 12:07:43
572
原创 车载开发之aaos 13/14源码环境之模拟器编译详细步骤
在前面学习android framework开发时候,搭建ubuntu系统上源码环境时候都是以手机为主,还没有专门针对车机模拟器的编译进行详细的介绍,虽然二者其实差异就一个lunch目标及一个emulator的差异点,所以前面也没有针对aaos的车机模拟器编译专门写文章,但是近来比较多学员朋友都有问到了车机模拟器的编译相关文章有没有,这里干脆给大家拿老文章修改一下专门针对车载aaos相关模拟器编译。更多framework干货请关注“千里马学框架”修改根目录的~/bin/repo文件。
2025-06-03 00:01:37
590
原创 android系统framework的几个新面试题目(涉及binder,input,SurfaceFlinger带答案)
今天给大家分享几个学员朋友面试过程中带回来的几个新面试题,这些面试题目属于比较独特一些,一些不属于1+1=2直接有标准答案,但是需要对模块熟悉后有一些自己的理解和思考答出的开放性题目,比如问题1和问题2就属于这种,所以这种题目可能面试官自己也没有明确的面试答案哈,我这里也整理了一些答案,有的也有ai一些整理归纳功劳哈。在 binder_proc 结构中,这些字段记录了进程中线程的信息:max_threads,requested_threads,requested_threads_started。
2025-05-28 12:25:23
1003
原创 学员投稿:华为,ov等手机主流大厂桌面未读计数角标更新接口汇总
不过最简单方法当然是去网上搜人家现成开源的,当时我们就有参考github上一个开源的角标适配库,用它就可以实现大部分主流手机桌面的角标功能。有一个学员朋友就积极联系马哥,说他原来做第三方应用的,有负责过app在各个手机桌面显示角标功能,对这个角标适配深感麻烦,也非常希望google官方可以完全统一这一块的桌面角标功能各个手机厂商各自为战的情况。学员朋友也分享出来的了他以前适配各个手机厂商的桌面角标的相关详细接口调用,当时适配有10种手机的桌面角标功能。下面学员朋友开始分享app适配各个手机厂商的桌面角标。
2025-05-26 10:30:00
752
原创 想一想android桌面的未读计数角标应该如何设计呢?
角标是华为桌面提供给各应用一种展示未读信息的操作,以未读信息的数字合成一张图片并绘制到该应用图标的右上角。角标是华为桌面提供给各应用显示未读消息用的,会在应用图标右上角绘制一张消息条数的图标。
2025-05-25 08:30:00
910
原创 重学input:为什么要进行二次拦截?interceptKeyBeforeQueueing和interceptKeyBeforeDispatching 区别
最开始的事件拦截,也就是拦截的优先级最高,系统级“紧急开关”,确保全局按键(如电源键)立即生效,无需等待应用响应,事件也压根不会传递给应用。如果interceptKeyBeforeQueueing方法不拦截该事件,那么就开始准备派发给应用,会先获取当前的FocusWindow,在派发应用前进行事件相关事件拦截。应用级“筛选器”,根据当前窗口状态决定是否将事件传递给应用,比如HOME按键按下时候,就会考虑当前是否为锁屏画面。
2025-05-22 08:00:00
1141
原创 面试福利2:安卓系统framework开发面试题目汇总(不断更新)
背景:经常有学员出去进行framework相关的面试,他们都会给马哥反馈一些面试题目,今天给大家整理一下方便大家进行面试前的准备列出的面试题目大部分都是有答案的,答案可以vip群获取,有的是没有答案的,毕竟是去人家公司面试的,面试官也不是马哥,当然也就没有相关的答案,不过看到题目大家一般都可以有自己的答案,大家不确定的可以vip群中丢出来讨论。
2025-05-21 12:44:32
1176
原创 重学wms:你知道什么是AdjacentTask吗?分屏模式的判断方法
但是大家注意哈,正常情况下确实一般分屏模式的两个task是mode为multi-window,但是大家注意mutilwindow却不一定为分屏模式哈,比如以前的车载桌面那个Activity嵌入显示的模式,也是multiwindow但不是分屏模式。这里的AdjacentTask属于熟悉而又陌生的方法,熟悉在于你经常见到它在framework代码中,陌生在于你可能没有本质理解它什么意思,想不到它的实际场景。简单说就是Task1和Task2分别设置对方成为自己的AdjacentTask,形成如下图的依赖模式。
2025-05-20 08:30:00
1015
原创 开机性能优化时间对比法-通过events日志部分实战
在很多同学做开启时间性能优化相关工作时候,经常用的比较多的方法肯定是抓取开机的perfetto或者systrace方法,这种方法当然是比较准确,一般抓取这个时候都是开始准备比较细微的局部优化。AMS启动完成后开始屏幕,从此以后屏幕才能响应用户的触摸,它在WindowManagerService发出退出开机动画的时间节点之前,而真正退出开机动画还会花费少许时间,具体依赖animation zip 包中的desc.txt。上面都是毫秒为单位,有了这个时间指标就可以拿来作为优化前后对比,或者各个机器之间的䶏。
2025-05-19 14:52:57
719
原创 面试福利:安卓系统framework开发面试题目汇总
列出的面试题目大部分都是有答案的,答案可以vip群获取,有的是没有答案的,毕竟是去人家公司面试的,面试官也不是马哥,当然也就没有相关的答案,不过看到题目大家一般都可以有自己的答案,大家不确定的可以vip群中丢出来讨论。5、binder通信中不同进程的指向同一个Binder服务的客户端请求服务端时使用的handle是否是相等的呢?12、判断权限的时候,经常会传入一个uid,这个uid跟多用户的userId有什么联系吗?3、既然后黑屏冻屏的问题,你说说你分析的这个几个问题,是怎么分析的?
2025-05-16 12:58:24
430
原创 aosp14/15官方Freeform工具栏CaptionWindow显示不同步bug修复方案总结
成果展示:明显上图可以看出在拖动自由窗口过程中,已经没有出现工具栏和Activity显示宽度不一致的问题了。问题本质原因修复方案总结:核心问题就在于CaptionWindow在systemui中进行刷新,而Activity是在应用进程单独刷新,在拖动时候会不断修改Activity和CaptionWindow相关的bounds大小,但是二者又处于两个进程单独刷新,导致没有掌握好刷新节奏,这类问题在分屏课程,ShellTransition课程中其实也是有详细讲解的。
2025-05-15 11:06:19
930
原创 重学安卓14/15自由窗口freeform企业实战bug-学员作业
但是近来有学员朋友在对自由窗口进行相关的拖拽操作时候,有遇到这个工具栏相关的一个bug,刚好aosp上面也确实可以复现,这里就拿出来分享给各位学员朋友,刚好可以拿来尝试练手,从而巩固在aosp14/15上自由窗口相关的实战经验。明显看到上面的工具栏的大小在拖拽过程中和自由窗口Activity的宽度不一样大了,看起来就有错位现象,抓取出其中一帧有问题的看看。在aosp14版本及以后版本上,安卓的自由窗口部分的工具栏部分都有了较大的更新。1、课程的freeform相关知识。2、课程的Winscope的相关。
2025-05-12 16:41:08
599
原创 android使用uinput节点任意注入鼠标事件-重学安卓input子系统
但是明显只使用命令还是有以下问题,命令注入事件性能不够块,注入的事件需要提前准备好,相当于只能实现录制事件,然后播放录制事件这种,所以基于这个背景那就需要有一个非常灵活的方式通过uinput来实现对事件的自由控制,那么需要使用代码来实现对/dev/uinput节点直接进行相关的事件写入,这样事件发什么都是由代码自由控制,灵活性大大提高。下面就用代码实现注入鼠标设备,而且鼠标可以在拨号盘上面进行点击的功能。对应的Android.mk文件。
2025-05-08 10:17:20
481
原创 手把手教你uinput命令的使用方式-重学安卓input子系统
要使用uinput命令一共需要2个步骤:1、录制好相关的 evemu-record文件,这里需要使用。
2025-05-06 20:01:02
868
原创 重学input知识之探索uinput相关内容--学员作业
uinput通过创建一个虚拟的输入设备接口,允许用户在没有物理输入设备的情况下模拟输入操作。它允许开发者在软件层面模拟硬件设备的行为,这对于开发和测试涉及输入设备的软件非常有用。uinput支持多种输入事件,包括键盘按键、鼠标移动和点击等,使得开发者可以方便地测试和调试相关的应用程序。
2025-05-06 12:27:22
390
原创 安卓陌生知识点:IntentFirewall组件启动“防火墙”实战方式
源码位置:组件IntentFirewall的作用IntentFirewall是Android框架中的一个组件,它可以根据XML文件中定义的规则来控制Intent的发送和接收。Intent是Android中用于组件间通信和启动的一种消息对象,它可以携带动作、数据、类别等信息。IntentFirewall可以根据Intent的属性和调用者的信息,决定是否允许或拒绝Intent的传递,从而增强系统的安全性和灵活性。
2025-05-02 01:14:38
877
原创 aosp系统定制之如何高效的裁剪系统?
经常在企业做一个设备产品时候,都会有需要对原生的aosp进行相关的定制,定制中有一个很重要功能就是裁剪掉系统的很多没有用的模块,只留下自己最核心的一些模块。核心思路就是确定要删除的目标名字,去相关的devices或者build目录进行grep名字,然后找到对应的PRODUCT_PACKAGES列表,从列表中删除对应的目标。接下来的核心部分就是在mk中读取txt中这些要删除的目标,然后把这些目标赋值给一个全局PRODUCT_DEL_PACKAGES变量的变量。正常原生代码有很多个模块都集成的情况。
2025-04-28 00:33:36
535
原创 干货笔记:安卓系统开发工程师必须掌握常用命令汇总(不断更新)
经常在做系统开发需要使用一些命令来查看某个模块相关的信息,根据这些信息来清楚了解模块当前状态,比如常用的dumpsys activity,dumpsys SurfaceFlinger等命令,这些命令其实用多了自然就熟悉了。属于非常高频命令,主要用来展示当前设备上展示的画面,图层信息,一般用于调试,定位一些显示异常等疑难问题,属于做系统窗口和显示开发必须会的命令。这个命令内容太多,一般在想要展示所有信息时候使用,但是因为输出内容太多,一般会用他的子命令,更有目标性。1、某个apk是否安装,apk的安装路径。
2025-04-27 13:16:01
1093
原创 system.img无法打包非PRODUCT_PACKAGES目标解析
不过在文件查找发现并没有我们新编译的目标没有加入PRODUCT_PACKAGES的文件,所以基本上我们就可以断定,aosp15相比aosp14就是在打包img时候,多了这个file_list.txt文件作为过滤依据,在打包img文件时候就是只会打包只有在file_list.txt文件中的,不在文件中也就不会打包。明显多了了个文件file_list.txt和file_list.txt.rsp,这里其实主要就是看file_list.txt文件既可以,可以看看它的内容。c.通过前置过滤机制保障输入目录纯净度。
2025-04-25 10:10:19
795
千里马android framework学习课程资料下载
2023-06-28
Android Framework学习资料,系统开发,Framework开发
2021-05-21
新加一个app源码到packages/apps编译Android.mk
2022-04-16
haxm-windows_v7_5_1新版本github.zip
2021-06-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人