自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(255)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

转载 android app转framework应该如何选模块?

想入坑Framework开发,如果你之前没有比如上面的多媒体,和外设模块相关经验加buffer,那么强烈建议你选着Framework rom开发模块方向,这个方向相对就业比较好,岗位很多,公司绩效也较好,当然肯定比其他模块就累一些,但是属于公司核心业务自然发展比冷门边缘化模块好,比如其他wifi,蓝牙模块,那可能整个大公司就几个人在负责这块业务,因为这些业务其实新需求很少,大部分都是维护稳定性为主,很多时候还依赖芯片方案商。本文章更多详细代码和资料需要购买课程获取。

2024-05-20 15:38:13 4

转载 黑屏实战之横屏情况下分屏黑边问题bug-学员提供

hi,粉丝朋友们,学员们学习了wms、ams专题后,那么整个系统的闪黑,黑屏,部分黑等问题,说实话大部分这类问题对于大家来说都没有太大难度了。该问题其实属于比较常见的部分黑问题场景,这个比较好一点就是他可以在刘海屏幕下面是必现而且非刘海屏幕不复现,而且在稍微拖动分割线后,分屏又可以恢复正常,所以前后异常对比都很方便。大家自己尝试解决,找出原因哈,相关问题提供的学员,已经使用马哥课程的黑屏相关解决追踪方法找到了根本原因而且也修复,希望大家独立拿这个来练手哈,体验真正企业级别实战。环境aosp14 r15。

2024-05-20 15:36:36 4

转载 InputWindowHandle的token怎么实现和InputChanel的token一样?-学员答疑

token是在InputChannel创建时候就有构造----》传递给WindowState的InputWindowHandleWrapper中------》InputMonitor遍历传递给Sf---------》Sf传递给InputDispatcher本文章更多详细代码和资料需要购买课程获取私聊作者+v(androidframework007)其他课程七件套专题:点击这里。

2024-05-14 14:57:22 8

转载 framework工作中遇到陌生窗口怎么高效找代码?-vip学员疑问解答

经常在实际开发过程中会遇到系统中各个不同的窗口,特别是系统中的各个窗口,种类非常非常多,不同应用不同场景等,有时候需要对相关的窗口进行修改等需要,就需要找到对应的窗口代码,然后修改相关的需求。上面从window名字线索只获取了个popupwindow名字,这个window名字线索平时对于一些系统窗口有自己独特名字的是非常有作用的哈,但是今天这个明显不太行啊,因为popupwindow太多了,没办法靠window的名字就准确找到窗口的源码位置。那估计系统中这样的多如牛毛,如同大海捞针,下面来详细介绍方法。

2024-05-14 14:55:05 4

转载 perfetto结合源码分析input输入的iq,oq,wq部分

其实这个在input专题的源码分析时候就有讲解过,不过那时候是完全基于源码分析的,没有和systrace或者perfetto结合起来分析,今天马哥就来补充一下这块知识。同学们经常在分析systrace或者perfetto时候,都会面临一个分析iq,oq,wq的问题,这个iq,oq,wq,到底是指的什么呢?这里3个过程中,离我们app处理最近的当然是第三个步骤,经常说的iq,oq,wq其实也是属于InputDispatcher类里面的变量。注意啦,这里的oq是带着有具体的目标窗口的。

2024-05-10 08:38:58 14

转载 android.anim和android.anim.lf两个线程解析

在学员群中有学员朋友在分析systemserver的systrace和perfetto时候,提出了关于android.anim和android.anim.lf两个线程的相关疑问,主要是android.anim和android.anim.lf两个线程分别用于什么,有啥区别。其实上面的注释也讲的比较清楚了,核心就是为了动画更加流畅,改进成了动画不需要在单独依赖windowmanagerservice的大锁,所以独立出来了一个单独的动画独立线程android.anim.lf。android.anim还干些啥?

2024-05-10 08:37:04 7

转载 systemserver为啥很少同步跨进程调用app/DeadSystemException相关问题分析套路

基于上面分析那就基本上明白了导致系统死锁的直接原因,那就是因为systemserver发起了个同步的跨进程调用,这个跨进程调用半天没有得到对方回应,导致systemserver一直卡在这个同步调用这里。

2024-05-08 15:27:44 21

转载 Ubuntu 20.04上Android NDK编译FFmpeg 5.1全程笔记

上面就是ndk编译ffmepg的64位库简单过程哈,同理32位库也是一样,只需要改动一点config参数既可以,具体也给出对应sh脚本。然后对它进行解压既可以,这里也可以使用as自带的版本,或者不是ndk的r22版本试试,最好就下载和这里一样的版本。这些库和include的头文件放好,然后开始编写对应的CMakeList进行相关的修改。一般上面脚本可以直接拷贝使用,只需要改如下两项和路径直接关联的。有了相关的so和include后,既可以把它们用于开发app啦。建立一个简单的native c++的工程。

2024-05-08 15:24:45 9

转载 Vsync之app层面深入分析

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

2024-05-08 15:17:52 4

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

在使用系统悬浮窗口时候发现有一个问题,那就是悬浮窗口在其他应用上面显示的好好的。一旦打开设置界面后,就发现悬浮窗口直接被隐藏了,退出设置画面后悬浮窗口又展示了,这个是为啥,为啥悬浮窗会被无故异常?明显设置Activity多了一个如下的属性HIDE_NON_SYSTEM_OVERLAY_WINDOWS,也就是这个属性flag导致了设置为啥看不到悬浮窗口。上图可以看出在进入设置Activity后毫秒表就隐藏,退出设置后毫秒表才展示出来了。这个权限必须添加,注意和原来添加的。权限要注意不是一个,所以不要偷懒。

2024-05-08 15:13:54 6

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

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

2024-05-07 09:14:04 8

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

手机用户可以继续操作手机画面,比如可以点击跳到各个应用比如微信,qq,但是投屏到车机的画面依旧可能是百度或者高德地图。手机用户可以继续操作手机画面,比如可以点击跳到各个应用比如微信,qq,但是投屏到车机的画面依旧可能是百度或者高德地图。这个主要实现是同一个屏幕大小尺寸的投屏情况,即和车载互联的屏幕显示手机镜像一样,以及很多市场上的投屏。这个主要实现是同一个屏幕大小尺寸的投屏情况,即和车载互联的屏幕显示手机镜像一样,以及很多市场上的投屏。1、input相关注入事件及相关权限。

2024-05-07 09:09:27 12

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

在针对线程无故卡死情况,日志方面也不打印输出情况,需要考虑多个手段来尝试定位分析出目前的线程状态,然后根据状态反推出程序中可能的疑点,最后尝试修改验证。本文章更多详细代码和资料需要购买课程获取私聊作者+v(androidframework007)其他课程七件套专题:点击这里。

2024-05-07 09:02:15 6

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

当然会问一下你期望的薪水,这里注意哈人家可能会给你压力,比如你凭啥要 这么多薪水啥的,大家也要从容应对哈,不卑不亢,注意人家只是问问你期望,不是和你具体聊薪水。到这里了那就恭喜你了,你已经通过全部的面试和流程,可以认为你已经是人家认可的合格人才,至于薪水方面那么大家就根据自己情况要啦,也没啥技巧,毕竟人家会要求你提供相关的薪水证明材料,切记不要作假哈,真实面对,人家定薪水啥的一般也还是ok的,会根据你的级别和能力考虑,当然啦原来的薪水肯定有一定影响。所以真实的机试是怎么样的呢?

2024-05-07 09:00:08 11

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

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

2024-04-11 15:58:48 62

转载 实时刷新率Fps实现相关知识讲解

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

2024-04-11 15:55:03 29

转载 安卓/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-04-11 15:52:29 50

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

这也是马哥最希望看到的,不希望大家拿着现成的代码或者patch,进行apply后编译通过,运行ok,就再也不管了。实际上这种直接拿代码运行对于学员是非常不好,我还是建议大家老老实实跟着敲一边代码,不要偷懒,毕竟跟着做你才可以有自己思考,才会想出改进方案。本文章更多详细代码和资料需要购买课程获取私聊作者+v(androidframework007)其他课程七件套专题:点击这里。

2024-04-11 15:50:17 19

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

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

2024-03-12 14:55:16 100

转载 ActivityRecordInputSink深入剖析全网独家分析

可以看到Activity的窗口显示大小就是touchableRegion=[0,0][1080,2160]即和屏幕大小一样,而ActivityRecordInputSink大小是touchableRegion=[-10799,-21599][10800,21600]明显比手机屏幕大很多,这种Activity大小和手机手机屏幕一样,触摸事件正常都不可能到这里。上图展示的Activity大小和手机屏幕大小一样,所以手机触摸事件根本到达不了ActivityRecordInputSink这个地方。

2024-03-12 14:53:17 92 2

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

是不是可以认为这里RefBase在incStrong of后面打印的this肯定和上面的LayerHandle打印的this一样?这种层级较多,不过层级多不影响分析,我们用java思维当然可以认为RefBase里面的this和LayerHandle类中使用的this是同一个。明显可以看到StrongClass的this地址 0x728c48faa700但是RefBase的地址是0x728c48faa708。为啥上面的LayerHandle的this就是和Refbase的this不一样呢?

2024-03-12 14:51:03 38

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

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

2024-03-04 12:03:30 56

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

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

2024-03-04 12:01:43 120

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

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

2024-02-26 14:39:41 104

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

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

2024-02-26 14:37:22 78

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

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

2024-02-22 15:39:50 39

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

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

2024-02-22 15:37:43 38

转载 BLAST深入源码剖析

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

2024-02-21 16:13:27 114

转载 Ubuntu上安装VMware+win11系统手册

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

2024-02-21 16:11:48 60

转载 SurfaceFlinger的commit/handleTransaction分析

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

2024-02-21 16:10:19 143

转载 OutputLayer的析构方法解读

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

2024-02-21 16:06:59 63

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

hal/surfaceflinger/perfetto专题,马哥经过若干天的努力,终于把sf最重要合成部分搞定,上传平台审核完成。私聊作者+v(androidframework007)1、surfaceflinger相关的实战小项目。2、补充一些selinux部分的基础。目前已经到课74节课时。

2024-02-21 16:04:59 19

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

总体思路就是上图所说的,需要对针对skia,或者opengl渲染时候进行hook,然后添加上自己的logo既可以,当然实现这个需求,必须要求你对surfaceflinger代码和framework的wms的代码非常熟悉才可以搞定,具体实现代码和详细方案可以看我视频哈。综上:不修改sf框架等基本上是不可能可以实现该需求的,针对很多新手小白同学不知道framework具体做啥,是不是上面这个需求就要求你一定要深入了解系统,修改系统才可以实现。2、需要在投屏,录屏时候有品牌logo。这种方案基本上明显不可行。

2024-02-21 16:02:29 45

转载 Hidl直通式Passthrough分析案例-Mapper模块

私聊作者+v(androidframework007)点击这里。

2024-02-21 15:59:21 42

转载 binder线程安全即读取线程池部分剖析

即只需要简单看看多个client 请求时候服务端onTransact的调用情况,如果说多个client请求onTransact方法还是按顺序一个个请求执行,那么就代表是线程安全的,如果onTransact方法出现多个同时执行,那么就代表非线程安全,这里需要针对onTransact的方法做一点特殊处理,即要在onTransact中故意加一个耗时延时,让onTransact执行时间久一点,那样方便验证,不然可能存在onTransact执行太快无法确认的情况。

2024-02-18 14:48:50 47

转载 多屏模式输入法可以正确切换屏幕展示原理剖析

整个多屏输入法的流程涉及到了3个进程---->焦点app发起startInputAsyncOnWindowFocusGain------>systemserver stop老的service,start新service-------->输入法进程创建新的service onCreate执行------->输入法创建带有display的context-------->创建对于输入法窗口带有新的display更多framework干货获取相关可以 私聊+v(androidframework007)

2024-02-18 14:47:34 93

转载 android framework实战之VNDK深入剖析

官方:解释:即给vendor分区的native程序提供的开发套件,包含了被vendor的native需要使用的一系列的库。

2024-02-18 14:45:20 217

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

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

2024-02-18 14:44:18 177

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

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

2024-02-18 14:43:30 67

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

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

2024-02-18 14:42:30 34

android framework高级实战视频课程相关课件

android framework高级实战视频课程相关课件 android高级进阶 android系统源码开发 android系统定制 android rom开发 安卓框架学习视频 安卓系统学习 android高级知识高级工程师 千里马android android framework 入门课 实战课 跨进程通讯专题 安卓触摸系统input系统专题课

2022-05-21

430仿真器固件烧录文件

砖头恢复烧写器能芯片的程序msp1612 仿真器,百分百可用,都为txt的烧录文件,救活仿真器

2014-07-30

单片机红外遥控代码

单片机红外遥控代码

2013-11-26

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

TA关注的人

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