自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Vsync之app层面深入分析

前面文章和视频课程都是直接从SurfaceFlinger层面开始讲解Vsync部分的,当然vsync的主要核心逻辑也确实在SurfaceFlinger,但是一般vsync都是由app层面发起请求的,这一部分也还是有必要带大家了解清楚。createDisplayEventConnection方法,这个方法app发起跨进程调用后会到服务端BnSurfaceComposer,这个SurfaceFlinger是继承这个BnSurfaceComposer的。

2024-04-23 23:37:47 879

原创 System Alert /Overlay系统悬浮窗口被隐藏原理剖析

在使用系统悬浮窗口时候发现有一个问题,那就是悬浮窗口在其他应用上面显示的好好的。一旦打开设置界面后,就发现悬浮窗口直接被隐藏了,退出设置画面后悬浮窗口又展示了

2024-04-20 08:00:00 381

原创 安卓投屏延时数据如何测试,测试工具如何写?

这种跨设备的投屏场景,流畅的体验是最重要的,这里就会要求投屏中最重要的一个性能指标,那就是投屏的延时。说到了有延时,那么如何科学的评估或者测量延时到底多少呢,人的感觉其实是最不靠谱的,因为我们一般很难感知几十毫秒的差异,除非有几百毫秒以上的差异才可能可以感知到?针对延时测量,首先的知道一个测量延时的数量级,这个延时其实一般都是在毫秒级别,所以测量工具开发时候就需要有一个毫秒表进行展示。2、进入复杂的游戏画面,比如王者荣耀,和平精英等画面,这里需要把毫秒表变成一个悬浮窗口,然后测量延时。

2024-04-18 11:02:28 543

原创 aosp13/14命令行进入分屏相关实战

明显可以看出这个代表移动taskId到分屏的sideStagePosition,注意了,这个命令只需要指定一个taskId和他的position既可以,那么这里大家会有疑问那么另一个分屏该显示谁?代表成对显示的意识,即吧taskId1和taskId2进行成对显示,即分屏,但是这个分屏和桌面进入的分屏是不一样的,核心不一样的点就是层级结构树都不一样,具体看如下实战。当前task层级结构树的最顶部符合分屏要求的task,一般就是最顶端的task。这个时候就需要有一个可以直接通过命令行拉起分屏的需求是最好的。

2024-04-16 18:35:11 1070

原创 车机手机互联模拟Overlay屏幕竖屏显示适配分析

这里setMatrix和setPosition一般都是客户端进程的Transaction相关对SurfaceControl进行的设置,所以这里可以考虑去对应的SurfaceControl加入对应追踪,这个课程已经讲解很多遍了,就不需要多讲解。横屏情况比较好理解,因为只需要对录屏的数据进行等比例缩放既可以,但是竖屏数据就明显需要额外处理,让竖屏居中显示,不然直接等比例缩放,肯定会产生形变。大家可以看到手机屏幕自身是竖屏,但是模拟屏幕是横屏情况,这里看到会有一个自动的竖屏数据放到横屏中间,然后两边啥也不显示。

2024-04-12 11:00:00 713

原创 车机手机互联不同屏幕尺寸大小解决方案成果展示

大家好!上一篇文章分享了一个云手机车机互联实现的简单demo,文章链接如下:[https://mp.weixin.qq.com/s/lihQHSd-zBIPeVa0WiP1pg](https://mp.weixin.qq.com/s/lihQHSd-zBIPeVa0WiP1pg)这个主要实现是同一个屏幕大小尺寸的投屏情况,即和车载互联的屏幕显示手机镜像一样,以及很多市场上的投屏。

2024-04-11 11:03:15 247

原创 android投屏程序线程无故卡死不执行,如何分析?

在针对线程无故卡死情况,日志方面也不打印输出情况,需要考虑多个手段来尝试定位分析出目前的线程状态

2024-04-08 14:49:47 614

原创 某手机大厂安卓framework开发面试机试经验分享

大家好!刚好现在处于一个金三银四的时间,很多同学都希望找个好的工作,这边刚好也有相关同学近期拿到了某手机大厂,具体啥大厂这里就不透露了,哈哈大家也很容易知道,需要机试的手机厂商就一两个,不给自己找麻烦,文章里面统一用某手机大厂。这里因为和该学员朋友进行了深入的沟通,把相关的一些经验写成了文章blog分享给各位要找高薪水大厂工作的朋友们。符合条件兄弟们又想要去的赶紧冲。。。

2024-04-02 11:43:36 1067

原创 手把手教你aosp13/14上实现PRODUCT_BOOT_JARS/boot jar(有源码)-千里马framework

每个平台都会有不同的实现,但是对于Tv这个app来说并不关心,因为他只依赖一个公共接口jar就行,至于你这个接口jar具体实现自己根据平台自己来实现。类似依赖是中间件jar,中间层,apk只依赖中间层接口,具体差异中间层自己去平台对接。经常设备厂商可能开发一些功能时候会有一些和芯片厂商打交道,比如mtk,海思,amlogic,高通啥的。1、系统应用的情况,这种最为简单,因为不需要考虑相关权限访问的问题。

2024-03-28 00:16:51 614

原创 实时刷新率Fps实现相关知识讲解

1、利用FrameTimeLine来获取实时fps的数据2、直接使用SurfaceFlinger中的RefreshRateOverlay这个图层类来负责显示这个实时fps数据本文章更多详细代码和资料需要购买课程获取私聊作者+v(androidframework007)其他课程七件套专题:点击这里。

2024-03-25 23:39:29 754

原创 安卓/aosp14上userdebug版本无法进行as调试debug问题

模拟器其实并不是persist.debug.dalvik.vm.jdwp.enabled控制的,哪怕模拟器上这个属性设置0,也一样是可以见到debug的所有进程。这个就需要进一步看看,难道是14模拟器目标默认编译persist.debug.dalvik.vm.jdwp.enabled就是为1?注意啦,这个就是为啥aosp13上没有问题,14有问题原因,疑问这个ENABLE_JDWP变量属于新加入的,在13代码上并没有。为啥aosp13上面可以,aosp14不可以,还有为啥aosp14的模拟器可以?

2024-03-20 17:56:20 933

原创 SurfaceFlinger实战dump获取单个Layer图像方案学员改进成果

学员朋友们拿到后也进行了认真的实战开发,而且针对马哥提供方案也做了一些改进,下面就分享一下两个学员朋友等改进建议。

2024-03-20 00:18:11 760

原创 c++基础知识之父类地址和基类地址一定相同?

是不是可以认为这里RefBase在incStrong of后面打印的this肯定和上面的LayerHandle打印的this一样?

2024-03-11 13:53:50 938

原创 ActivityRecordInputSink深入剖析全网独家分析

dumpsys input可以看到一个ActivityRecordInputSink在Activity的下面

2024-03-06 12:56:26 944

原创 安卓14/aosp14相比安卓13录屏多了MirrorRoot深入剖析解密-千里马android framework实战开发

到这里,就把学员提出的录屏时候Mirror问题前后版本出现与不出现的原因搞清楚了,整体其实探索出来了结果后并不是很复杂,但是如果要自己去探索还是有一定的难度的。虽然有难度,马哥还是希望大家平时遇到相关的技术疑问时候不要轻易放弃或者完全不管,应该努力用自己学习知识应用起来,结合起来,去分析实际开发中遇到一些问题。只有这样不断探索,技术才会不断成长,成长到有一天你发现你对这个模块理解深入程度基本上也不输给任何人的时候,你就是这方面的顶级专家。本文章更多详细代码和资料需要购买课程获取。

2024-03-02 17:15:48 972

原创 lineageos 21/aosp14环境搭建小米,nubia手机差异补充

马哥这边也是一直密切关注着lineageos这边是否有及时升级到最新的android 14,今天去官网一看已经确实升级了,马哥这边也第一时间进行环境搭建编译,但是期间也发现了有一些差异相比原来的版本,这里就需要进行一些记录补充方便各位学员们参考,不至于无法搭建成功,有马哥在前面给大家采坑搭建就可以节省很多时间。访问的地址还是有比较大差别,那么这里尝试用老版本的vendor/lineage/build/tools/roomservice.py。2、从上一套编译通过的代码吧webview.apk拷贝。

2024-02-29 12:57:25 1087

原创 SurfaceFlinger实战dump获取单个Layer图像方案及成果展示-千里马学框架

今天来给大家分享一下如何实现单独获取某个Layer的图片,而不是整个屏幕的图片。

2024-02-27 16:52:15 1095

原创 android input命令支持多指触摸成果展示-千里马framework实战开发

hi。

2024-02-22 16:11:45 1198

原创 深入理解input命令只支持单指,是否可以修改实现多指?-千里马android framework实战开发

执行完成后手机画面一般就会响应一个click事件,这里发现一般都是一个手指,一直寻找看看input命令是否可以支持多个手指通过命令同时按下操作的情况,发现并没有这种多指的触摸的命令。pointId1 x y --pointId0代表具体手指索引,可以区分不一样手指,一般0开始,x,y代表是触摸事件的坐标位置。input tap命令只是进行传递了x,y坐标值,并没有传递多指相关的任何id,所以是不支持的多指的。考虑设置一个可以多指点击命令项,暂时命名叫做multiple-tap。看看这里sendTap。

2024-02-20 16:28:45 1041

原创 hal/SurfaceFlinger/perfetto实战需求问题探讨作业-千里马framework开发

截图分享可以选定某个特定窗口进行,这个和上面的录屏其实基本上类似一个场景,就是截图时候有会存在只需要截图固定窗口window的,不需要其他window的情况,同样游戏主播进行直播这个情况,截图时候希望只有游戏画面就可以,游戏画面上面的其他app的窗口不希望在截图中。经常分析一些显示问题时候,会想要dumpsys各个图层,但是dumpsys SurfaceFlinger命令一般来说只是有相关的图层信息,是文本类的信息,所以有时候黑屏或者显示 异常情况就比较难看出来是不是自己图层本身上帧有问题。

2024-02-19 12:03:00 880

原创 c++之function和bind详解-SurfaceFlinger学习必备语法基础

function是一个通用的函数对象容器,可以存储任意可调用对象(函数、函数指针、成员函数、成员变量、lambda表达式,任何function对象,比如一个类,定义了operator()),并提供了一致的接口来调用这些对象。通过function,可以将一个函数或函数对象作为参数传递给其他函数或存储在容器中,大大提高了灵活性。参数解释:Ret:代表调用function的返回结果的类型Args:代表是参数的类型。demo展示:1、function存储函数指针方式return a*2;

2024-02-16 20:10:13 929

原创 Ubuntu上VScode编译c++基础学习指南-SurfaceFlinger实战必备基础知识

1、使用vi、gedit等代码编辑工具进行编辑,然后使用命令gcc或者Makefile等进行编译,即编写代码和编译是分开的,一般编写代码也没啥代码错误提示等,只有命令编译时候才可以发现错误,这种方式相对来说适合少量修改代码,不适合大量写代码的情况。aosp相关native模块,比如input,SurfaceFlinger等,经常阅读会遇到一些陌生库函数或者类,可能这个时候想要查询这个库函数相关的详情进行学习,类似课程讲解linux库函数有个man手册一样东西。选着第一个GDB既可以,选着后又弹出如下。

2024-02-06 23:28:49 1054

原创 c++基础语法之future,promise,async详细讲解-SurfaceFlinger学习必备c++知识

std::promise用来包装一个值将数据和future绑定起来,为获取线程函数中的某个值提供便利,取值是间接通过promise内部提供的future来获取的,也就是说promise的层次比future高。这个问题回答其实可以考虑一下future的获取,future都是需要几个固定的异步线程调用方式,比如async这种,但是很多时候不喜欢用这种异步方式,那么自然也就没办法获取future,所以为了future的获取更加灵活方便,就需要有这个promise对象。

2024-02-05 23:52:25 1013

原创 MirrorLayer可以正常触摸屏幕原理分析

在多屏互动时候有一个屏幕的画面是一个MirrorLayer,另一个屏幕画面是真实的,即2个屏幕上有一个是MirrorLayer,这个时候疑问就来了,经过在aosp13上体验发现,两个屏幕画面都可以正常接受触摸事件进行正常的事件响应。到这里就可以理解为啥两个屏幕各自的mirrorlayer和正常layer都可以正常接受触摸事件的原因,因为在input派发选择窗口,遍历window时候,都对应是同一个windowinfo。这里的inputInfo就是最为关键的信息,也就是最后传递给input端的关键点。

2024-02-01 23:54:40 909

原创 skia实现动态差异录屏截图logo添加-千里马SurfaceFlinger专题实战项目背景介绍

大家好!因为前面一直忙于讲解surfaceflinger层面到的原理和源码分析部分,一直没有一个系统的项目来给大家练手实现,今天来实现一个sf层面的一个小项目。具体项目背景信息如下

2024-01-30 11:49:36 400

原创 HAL/SurfaceFlinger专题之HWC和GPU合成部分更新通知

hal/surfaceflinger/perfetto专题,马哥经过若干天的努力,终于把sf最重要合成部分搞定

2024-01-22 10:39:55 528

原创 OutputLayer的析构方法解读

看到了finalizePendingOutputLayers明显好像没啥啊,没看到有调用destroyLayer啊,但是Trace中确实有展示对应destroyLayer,这个是为啥?赋值时候就会导致mCurrentOutputLayersOrderedByZ析构,从而一系列的析构方法回调。执行collectVisibleLayers时候具体还会触发destroyLayer操作,还是个跨进程的。明显属于在finalizePendingOutputLayers触发的调用。堆栈打印出来就很明显啦,那就是在。

2024-01-11 12:33:46 404

原创 SurfaceFlinger的commit/handleTransaction分析

hi,粉丝朋友们:大家好!本节我们来讲解一下SurfaceFlinger主要合成工作的第一个阶段任务commit一般SurfaceFlinger端的合成工作主要有两个1.commit主要就是处理app端发起的一系列transaction的事务请求,需要对这些请求进行识别是否当前帧处理,处理过程就是把事务中的属性取出,然后更新到Layer中,偶buffer更新的还需要进行相关的latchbuffer操作。

2024-01-08 14:03:02 1481

原创 Ubuntu上安装VMware+win11系统手册

Linux 版下载地址:https://www.vmware.com/go/getworkstation-linux。再出现下面界面其实也没问题,等一会就行,然后会出现如下界面。剩下其他步骤一步步点击既可以,最后上传成功的图片。出现如下界面其实没有关系,等一会。按一下enter其实就可以继续。

2024-01-08 09:46:08 1251

原创 BLAST深入源码剖析

进行queue动作完成后,紧接着就是runInSync执行,这个方法参数非常关键,代表是一个同步事务等待同步后进行回调执行的部分,而且这个时候会有一个Transaction的参数,里面就包含了相关WindowContainer的绘制相关事务。注意对于prepareSync属于WindowContainer的基类方法,Task没有实现那就是默认WindowContainer实现的,所以一直会调用到有自己实现的WindowState的。

2024-01-04 15:43:40 972

原创 千里马2023年终总结-android framework实战

2023年开始全职做课程后,有了更多时间投入到framework的课程研发,可以把在公司里面的很多丰富经验都放到课程中来分享给大家。大专题课程都是经过非常严格的调研,主要调研因素有以下几个:1、这个专题课程马哥自己是不是有这方面比较深入的经验分享,比如马哥经常在公司里面处理wms闪黑等疑难问题,这类经验属于不太可能从网络学得到的,也基本上很少程序员知道也不可能外传的有用“绝招”,这种在我课程里会毫无保留地分享给大家。

2023-12-31 02:38:46 1736 2

原创 BLASTBufferQueue源码深入理解

updateActiveBuffer方法会对mPreviousReleaseCallbackId这个变量进行赋值,大家注意这里的为啥叫做前一帧的CallbackId,因为下面这个updateActiveBuffer就是赋值是先进行的mPreviousReleaseCallbackId赋值,然后才进行的新buffer的赋值,所以这个mPreviousReleaseCallbackId其实上一个的buffer的Id,不是当前这次的。这里的mPreviousReleaseCallbackId是哪里来的呢?

2023-12-28 17:11:32 1151

原创 Hal深入实战/perfetto-systrace实战/SurfaceFlinger合集-安卓framework开发实战开发

比如surfaceflingre模块深入分析需要用到hal相关的模块,比如mapper,hwc等,所以说去分析surfaceflinger就必须要有一定hal基础比较好,还有就是perfetto,大家可能会以为他只是个性能优化工具。核心思路就是讲解清楚perfetto相关的基础知识,学会怎么看perfetto的trace,及怎么自己加和打印tag和trace等,有了这些知识后再会结合相关的业务来练习怎么看perfetto,比如surfaceflinger就是一个学习实战看perfetto的很好案例。

2023-12-21 00:11:33 780

原创 SurfaceControl之Transaction事物深入剖析-android framework实战开发

layer_state_t结构体用来代表Layer图层的的相关信息,SurfaceControl与sf的Layer共用这个layer_state_t结构体,layer_state_t包括layer所有属性主要成员如下:可以看到常见的主要属性:坐标,长宽,变换矩阵,变化值what,flags,mask等,一般是一个图层就有一个layer_state_t结构体。

2023-12-19 12:40:25 1521

原创 手机大厂的自由窗口freeform功能基于aosp14/安卓14适配完成-千里马android framework实战开发

近期有个马哥学员刚好求助马哥一个关于以前马哥课程里面自由窗口项目,这个项目在android 13上做的,但是他们公司是aosp14,希望我能帮忙尽快升级到14。今年2023年已经块过去了,各个手机厂商已经开始适配aosp14,甚至有的是已经适配完成,明年市场就大部分手机出厂就都是android 14了。马哥课程中自由窗口效果可以看出来基本和国内手机各个大厂自由窗口效果是不是大体相同,课程实现是带大家手把手进行实现的。1、把原来的自由窗口自己的顶部栏显示等,独立成了一个窗口,移植到了如下目录。

2023-12-18 16:21:02 746

原创 SurfaceControl及SurfaceFlinger中的Layer创建过程深入剖析

其实Client本质是一个Binder对象的BpBinder即跨进程的代理,远端的BnBinder在SurfaceFlinger的Client.cpp。看下SurfaceComposerClient构造时候会与sf进行跨进程createConnection创建链接,返回的对象就是Client对象。SurfaceComposerClient对象是在哪里创建的呢?这里的SurfaceSession是在哪里创建的呢?sf端就是简单创建了一个Client对象,这里来看看。这里的mClient是谁呢?

2023-12-18 00:22:54 1099

原创 perfetto/systrace基础知识讲解-千里马android framework实战开发

一般perfetto看trace时候都会针对某一个进程进行查看其运行,因为perfetto/systrace都是以进程为单位进行划分的,每个进程又分为若干个线程,接下来又是主要看一个个的线程情况。比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的。这个部分和线程没啥关系,即不是说有单独一个线程在专门计数这个,可以理解为一个程序里面全局的一个变量值展示,比如在surfaceflinger的vsync时候就用到了。通常是低内存导致等待、各种各样的内核锁。

2023-12-15 18:09:57 1105

原创 StatusBar、NavigationBar窗口显示在Activity下面之aosp14窗口类bug线索征集

近来的国际学员又有个窗口类bug求助马哥。这次的bug现象就不是说什么黑屏啥的,是一个窗口有覆盖的情况。这个需要有代码详细打出相关的堆栈进行准确定位寻找根本原因,所以这里就需要各位有条件学员兄弟帮忙啦。不过比较遗憾是现在我们还没有aosp14的有源码的真机,因为这个bug还必须要真机。所以我这边暂时没有复现这个bug的条件,所以这里需要广大粉丝朋友们公司有aosp真机代码的兄弟可以帮忙提供线索。,都可以滴滴我哈,或者发群里,很多学员们就喜欢这种有难度和技术含量的bug来锻炼自己能力。国际学员提供复现视频。

2023-12-14 00:48:44 1220

原创 android hal aidl升级部分-android framework车载手机系统开发

第一版本的aidl没有指定版本,只有一个aidl_api下面current文件夹即默认就是版本v1,那么如果后面有相关的接口修改呢?大概就是修改时候一定要考虑老版本的兼容问题,一般不删除原来接口和修改。可以看到这里的版本多了版本1,而且还带有hash号文件。Android.bp需要把原来V1版本的库变成V2。执行后相关的aidl_api目录多个一个版本目录。MyTestImpl.cpp增加相关方法实现。可以看到out临时文件目录多了V2相关的库。MyTestImpl.h增加相关方法引入。

2023-12-13 21:36:13 556

原创 hal深入剖析之aidl实战-android framework车机车载手机系统开发

创建最重要的aidl接口文件,需要在第一步创建的目录下`-- mytest编写aidl内容:String key;int value;还是就是parcelable都是需要进行结构化,成员属性写清楚到aidl。

2023-12-12 17:11:41 1550

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

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

2023-06-28

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

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

2021-06-04

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

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

2021-05-21

空空如也

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

TA关注的人

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