- 博客(328)
- 资源 (3)
- 收藏
- 关注
原创 aosp15上winscope离线html如何使用?
文章中也说明在aosp15如果直接使用编译好的离线html是有问题的,无法正常显示抓取的Winscope文件。针对这样一个问题对于有些同学来说还是很不友好,因为很可能他们不想搭建node相关的环境,那么针对 aosp15上Winscope离线的html是否真的不可以使用呢?不过我们可能不关心原因,因为这块毕竟属于前端的知识,我们更关心应该怎么解决。
2024-12-10 23:14:23 211
原创 请收藏:如何确认uid对应的包名和进程-android系统必学小技巧干货分享
这里面就有这个from uid 10108,即看到uid = 10108,但是这个uid = 10108到底是谁呢?u0_a108 分为两部分,前面u0中的0代表就是userId = 0这个用户,除了0设备还有可能有其他用户比如常见的分身10,后面a108的108就是代表基于10000的累积是108,预先判断uid的值大小,一般普通的apk程序等,uid的值一般大于10000,这种uid大于10000情况确定可以使用直接计算法。那么就用这个108前面加上字符a,即a108去ps -A中进行搜索。
2024-12-10 11:36:42 384
原创 fallbackhome黑屏闪黑问题修改方案1:开机动画延迟退出时间-framework实战开发
核心思路:既然是因为开机动画退出后,fallbackhome显示期间有黑屏,正常launcher显示时候没有黑屏,那么就考虑把开机动画的退出时间延长,延长到正常桌面显示以后才退出。一般每个Activity显示后会回调onWindowsDrawn方法,所以可以在这里进行检测是不是launcher已经绘制了,如果绘制了既可以启动调用相关的开机动画结束的属性设置。2、上面屏蔽了正常开机动画结束流程,但是开机动画具体哪里进行合适的结束呢?答案就是:在Launcher显示以后要触发正常开机动画结束的属性设置。
2024-12-09 10:03:11 349
原创 学员作业:aosp14上黑屏/闪黑问题的分析及解决案例
但巧合的是前天有学员朋友在解决他们公司疑难bug时候,也有问道和这个fallbackhonme场景闪黑,黑屏问题,群里也进行相关答疑等讨论,后来认真确认后发现复现的场景就是一样的。有对aosp上模拟器有没有开机向导进行了深入的剖析,但是发现在第一次启动安卓模拟器时候,发现开机动画结束进入桌面时候,有大概3-5s的黑屏时间,这个问题当时因为我们重点关注是开机向导相关日志抓取,没有认真分析。aosp14-r5(其他aosp13,15应该也可以,但是没有确认哈)那下面来告诉大家黑屏问题复现步骤,及相关作业要求。
2024-12-06 10:39:41 210
原创 如何命令查看安卓设备上多核cpu的大小核情况
近来有学员朋友询问到了一个他做性能优化时候的一个疑问,那就是他不知道自己的手机设备上的一个cpu情况,他想要知道目前的平台哪些是cpu的大核哪些是cpu的小核,问马哥有没有啥命令或者方法进行查看,这样就可以不需要通过问其同事了,每次问都容易忘记,而且每个平台也不一样。一般平时常说的cpu大小核情况,其实说的是cpu一般情况下都是有多个核心的,和我们电脑上cpu是一个情况,但是多核心为了综合性能和功耗上都兼顾,就不能说所有核心都是大核或者小核,一般都是大小核都是共同存在的。cpu的4-7属于大核。
2024-12-05 10:28:49 257
原创 被“边缘化”的程序员应该如何破局??
上面就是程序员在工作过程中遇到“边缘化”的一些情况及如何面对解决“边缘化”问题,总结就是:面对“边缘化”任何时候都不要自暴自弃,一定要积极面对工作,因为你其实为自己工作,你提升自己工作业务能力才是核心,让自己在市场变得更加值钱,自身能力和修为提高了,你才可以不需要担心焦虑在当前公司被“边缘化”。
2024-12-03 11:13:02 179
原创 Winscope中抓取window相关数据的原理剖析
因为Winscope是一个动态的过程,属于数据是不断变化的而上面只是开始抓取时候有往mBuffer中添加,那么是什么地方可以触发这个WindowTracing源源不断的打入log,即添加到mBuffer中?可以看出来这里会有一个很重要的 mRoot.dumpDebug,mRoot就是RootWindowContainer,它会迭代dump出来整个wms层级结构的所有数据的详细信息,这样也是浏览器上可以绘制层级结构详细信息的关键。然后主要看看WindowManagerShellCommand的相关的方法。
2024-11-30 12:02:34 606
原创 Winscope中抓取Transaction相关的原理剖析
首先这个service call就是直接调用到SurfaceFlinger这个service的onTransact方法,1041代表是code,i32代表是data的int类型,1和0代表就是值。那么选着Transaction选项后抓取Winscope,看看winscope_proxy.py程序的相关输出,看看有没有线索可以查到是如何获取系统的相关Transaction数据。在使用Winscope过程经常会有如下的一些选项供我们进行选择,不同的选项最后就会展示不同的数据项出来。具体这些数据是哪里来的呢?
2024-11-28 12:11:15 979
原创 CallStack相关的编译报错undefined symbol正面解决方案
可以看到这里确实在编译InputDispatcher.cpp:356时候发现引入ld不到libutilscallstack库,所以导致无法找到符号表报错,但是明明我们确实cpp编译的bp中加入了相关的libutilscallstack,那这种应该怎么解决呢?注意这里如果模拟器整编还是报错,只能回退再编译,但是可以保存单编译libgui.so覆盖回退的,然后再触发打包既可以。这些编译都不是在编译libgui.so时候报错的,都是编译media相关库才报错的,也就是说其实单独编译libgui是可以成功的。
2024-11-26 09:00:00 960
原创 libgui中的BufferQueueProducer加入堆栈CallStack编译报错问题-大厂企业实战项目难题
这个也就是为啥会报错的原因,那么清楚了原来libstagefright_bufferqueue_helper,libstagefright_bufferqueue_helper_novndk对这个有依赖,那么是否可以直接在这个bp加入 libutilscallstack呢?针对调试和分析某个模块的源码时候,经常需要对某个方法进行堆栈的打印,java相关的代码都没啥问题,大家都可以很正常的打印出来,但是一些native的模块就不是那么顺利了。一看到这些报其实大家可能都一脸懵,不知道为啥会有这种错误。
2024-11-23 11:59:23 879
原创 记录app多年老司机如何快速上岸framework系统工程师-学员投稿
今天特别感谢学员朋友小菜鸡的投稿,该学员朋友前一两个月才找到马哥报名的framework课程,前些天和我报喜说成功找到framework相关的工作,在这里再次恭喜他成果上岸framework工程师,马哥这边特别邀请他给大家分享一些学习framework的经验。下面开始学员朋友的学习framework的经验分享:-----------------------------------------------投稿开始--------------------------------------自己学习frame
2024-11-21 12:19:30 759
原创 aosp14/15上的针对单app录屏原理探索及自实现的方案讨论
时候,有给大家讲解过一个实战项目是针对某个app进行单图层进行截图方案,是不是和这个很类似,大家可以考虑一下是否可以进行简单的修改就可以实现对这个单app录屏功能。新版本的单独app进行录制视频功能的交互大概就是上面的,整个过程就是让用户可以选择一个app,然后启动这个app到前台,在进行单独录屏处理。这里针对aosp上实现单app录屏的进行一些代码的剖析,本篇不进行详细的源码分析,主要把核心原理给大家讲解清楚。如果针对单app进行录屏的功能要我们完全自己实现会如何实现呢?大家是否有相关的方案呢?
2024-11-20 15:33:08 394
原创 车机车载氢桌面的画中画功能技术调研部分
看到这里大家心里应该也是大概知道了氢桌面画中画的一个原理,本质上实现的方案就是采用了多个虚拟屏,也就是和原来的ActivityView是一个原理,一个ActivityView上面就装载一个虚拟屏幕,这些要并行的Activity都是启动到对应的虚拟屏幕上面既可以。这些信息也可以再次确定其实就是创建了对应的虚拟屏幕,这些虚拟屏幕就是ActivityView自带创建的,然后其他的Activity就可以启动到这个虚拟屏幕上,从而实现画中画等Activity并行功能。他的实现原理是什么呢?
2024-11-18 11:17:13 518
原创 Winscope重要干货知识点RelativeLayer相关的查看方式
实际查看明显发现SurfaceView位于Activity图层下面,和上面winscope的看着是有冲突的,那么这个到底是winscope不准确有问题,还是我们有啥知识点遗漏呢?这个部分就是相当于图层顺序的核心哈,其实winscope就已经有针对这个相对图层有明显的标识。这里winscope明显可以看到SurfaceView图层上相比其他图层还有一写标识上的差异,多了一些RelZ,和RelZParent这样的标识。Background for SurfaceView其实是位于Activity图层的下面。
2024-11-17 12:11:36 605
原创 安卓aosp15手机上如何离线获取winscope文件
哈哈当然不是哈,只是aosp15新版本的手机上离线抓取已经一起整合到了perfectto部分了,不和原来一样抓取方式,所以自然原来按钮就去除了,接下来就重点给大家讲解aosp15上如何离线抓取winscope。这篇文章搭建的winscope的方式同样适用于aosp15版本,只需要使用最新的aosp15相关的源码环境的winscope依赖既可以完成编译。然后点击上面的Record trace按钮可以开始抓取了,点击结束抓取后可以看到如下路径data/local/traces已经有相关的文件。
2024-11-15 09:30:00 367
原创 安卓手机/平板等设备添加左右两边侧边栏需求项目-学员作业布置
近期有学员朋友求助一个给安卓设备的左右两边要加入侧边栏的需求,这个需求其实还和平时的系统自带的Navigationbar,或者StatusBar等窗口不一样。因为无论是Navigationbar,或者StatusBar都是属于和手机屏幕画面是一起的,而这个左右侧边栏的需求是想把主屏幕画面和侧边栏画面是独立的,二者互不干扰的情况。3、侧边栏的画面不会因为正常手机画面的页面跳转而被覆盖,侧边栏点击相关按钮可以让正常手机画面有页面跳转等操作交互。1、input相关的触摸知识部分。2、wms相关的知识。
2024-11-11 09:25:49 204
原创 aosp15系统窗口闪屏原生bug-dim图层相关-你会修改吗?
3、点击跳转复现问题 复现非常简单,MainActivity点击弹出DialogActivity后,再点击DialogActivity弹出第二个DialogActivity,再返回就必现。近期各个大厂已经开始准备aosp15的系统rom适配工作了,应该是想2025年初开发发布相关的新机型,所以慢慢的我们也要开始适应aosp15版本的相关问题的修改和研究哈。刚好千里马的学员朋友们非常期望有这样的一些窗口疑难类的bug,也刚好可以作为。后的一些实战扩展项目给大家进行企业级别的实战哈。
2024-11-08 23:32:01 694
原创 aosp安卓15新特性dump的wms窗口层级树优化的更加美观
明显可以看出以前的wms层级结构树看着不像一颗树,靠的序号和空格在区分,但是层级一多,而且相差不多时候,如果只相差一层空格就不明显了,经常可能需要对半天才对的清楚。近来在体验调试aosp15时候,使用了dumpsys activity containers时候,发现wms层级结构树有一个巨大的变化。更多framework实战干货内容资料,请关注下面“千里马学框架”
2024-11-05 11:46:13 518
原创 Input的Move事件相关的深入疑问/getHistorical剖析/批处理事件
近期有学员朋友在群里提出了关于input模块中的一个批处理相关的疑问点。针对这个批处理这块知识点,马哥不打算直接给大家blog输出干货给大家,即不准备直接给大家喂相关的知识点,而是采用给大家布置几个作业疑问点方式,让大家积极参与进来思考的方式。如果针对move事件不采用批处理方式,也和down事件一样,有事件来了就直接进行相关的派发主线程处理,那么可能会造成什么样的后果呢?为什么会需要有这个方法?好了上面就是留给大家关于input相关的思考作业哈,后续马哥这边会给大家进行剖析解答,更新到相关的vip群中。
2024-11-01 10:01:48 331
原创 性能优化/开机时间优化之开机动画部分讨论-学员讨论
针对开机时间优化,如果其他地方实在做不出来更多优化后,可以考虑看看自己开机动画是否有优化的空间,确定有优化空间后再考虑具体方案进行,这里注意一定要考虑交互体验等结合起来。不然优化后会引入一堆的闪黑,开机动画播放不完整等问题就得不偿失。
2024-10-25 11:19:39 728
原创 分享其他简单GMS全家桶预制方案
这个包已经帮我们干了所有的事情,比如预制apk,预制权限xml等,对于我们只需要无脑调用这个目录下的gms-vendor.mk既可以实现gms等整个打包和权限预制。上,文章发布后还是有很多学员朋友纷纷提出更多的更简单的一些方案,在这里也给大家分享一下其他更加简单的两种方案。明显看到这里gms的应用更加多,根本不需要整体预制根本不需要挨个下载apk这种方式,所以这个方法相对更加简单。这种方案就是直接刷入相关人家做好的img,自己基本上没办法来定制,灵活性很差,只能说拿来用的方式。
2024-10-24 10:38:50 645
原创 安卓高级系统工程师必备技能-技术大佬成长必备技能
简单说就是平时负责工作中经常会遇到一个全新的知识模块,这个全新的知识模块可能处于无资料,无人帮助的状态。无资料即互联网上搜索不到任何的内容,公司里面也没有任何文档等,属于全新的一个模块,这种情况其实还不少,比如google某个版本可能新增加了一个新模块,这种当然哪里都找不到资料。无人帮助因为很多时候公司里面就一个人负责一个模块,其他人也不会去深入研究你负责的相关模块,所以新出来的模块公司更不可能有其他人懂了。
2024-10-22 09:37:59 340
原创 aosp15上自由窗口入口无法显示aconfig等新知识剖析
这里最后只要可以通过getShortcuts走到底部的Collections.singletonList那就说明可以显示出来,所以这里显示不出来肯定是没有走到底部这个Collections.singletonList,说明是在前面的两个if返回了null,具体哪里返回了?哈哈,到这里大家是不是终于看到熟悉的Properties了,你是不是和马哥一样认为这里其实就是普通的prop,如果这样认为其实就是完全错误的哈,具体这里Properties是啥,这个就有需要了解新版本上使用的类似config机制。
2024-10-21 00:53:34 686
原创 Ubuntu20.04编译安卓aosp 15源码编译到模拟器运行
aosp15也开始悄悄在各个手机厂商开始酝酿了,感叹时间很快,今天也准备针对aosp15进行一下源码环境的搭建,整体aosp15的搭建和13/14其实没啥大的差别,只不过在lunch目标这个地方确实很大不同,还有就是模拟器启动后的大小不太合适。那么第一部分的Product是如何确定的,这里怎么就知道是sdk_phone64_x86_64,而不是以前的sdk_phone_x86_64。第一部分:aosp_cf_x86_64_phone这个是可变的,需要根据我们自己情况选择,具体怎么选稍后说。
2024-10-20 00:30:29 1395 1
原创 安卓窗口wms/input小知识NO_INPUT_CHANNEL剖析
NO_INPUT_CHANNEL主要给一些窗口完全不需要消费任何输入事件的情况,经典使用该flag窗口有SnapshotStatingWindow,ActivityRecordInputSink等。
2024-10-19 01:02:17 525
原创 android app执行shell命令视频课程补充android 10/11适配-千里马android
hi,有学员在学习跨进程通信专题课程时候,在实战app执行一个shell命令的项目时候,对课程本身的android 8.1平台没有什么问题,但是学员想要自己适配到android 11上,估计也是目前最新的android版本,因为普遍android S厂商都还没有发布,因为android 的大版本升级适配本身工作也不小,这里就对android app执行shell命令这一部分进行一个升级适配的补充,尽量让买课的学员可以直接用于最新的android版本。具体项目代码和详细视频讲解可以购买我的相关视频。
2024-10-16 14:39:30 929
原创 aosp14分屏分割线区域部分深入剖析-framework实战干货
核心看看这里的topPosition,bottomPosition是怎么计算的,刚好也可以解释为啥这里名字有16_9这个字符,其实本质就是计算个topPosition位置,拿竖屏来举例的话,这里因为想要屏幕宽度固定的,为了美观程度,所以一般topPosition这个区域要固定为一个16:9区域。上面已经分析出了分割线的几个SnapTarget,这些SnapTarget都是有固定位置的,那么接下来分析一下分割线如何到对应的SnapTarget。
2024-10-16 12:08:09 1090
原创 安卓疑难问题冻屏/黑屏深入剖析原因-全网独家framework实战
明显可以看出来这里正常情况有相关的finishRecentsAnimation操作,但是异常情况下没有finishRecentsAnimation,这个其实也可以判断出来异常冻屏的本质原因是因为没有进行相关的finishRecentsAnimation操作,即相当于动画在执行,但是因为某些异常没有得到良好收尾操作,从而导致问题。其实TaskBar的隐藏本身系统中有更好的方法,不应该自己做的这种隐藏TaskBar的主View即mDragLayer方法,完全可以源头 上进行规避。
2024-10-12 16:24:43 960
原创 安卓冻屏bug案例作业分享-千里马学员wms+input实战作业
近期有学员反馈在aosp14高版本上有了一个新窗口TaskBar,这个但是有需求就是对这个TaskBar进行隐藏,所以有一个需要对这个TaskBar进行进行隐藏需求。因为要实现一个对TaskBar隐藏需求功能,所以这里需要先实现这个需求,正因为实现这个需求后才发现可以复现这个冻屏问题。2、分析出来了冻屏原因,再考虑怎么屏蔽TaskBar就会用法该bug,为啥TaskBar存在就不会有该bug。这里普通的手机是无法看到TaskBar,需要进行相关density进行设置,变成平板设备才可以。
2024-10-11 14:22:05 625
原创 安卓系统属性persist类型prop深入剖析
近来学员朋友在群里问道了prop属性值进行持久化存储相关的问题,针对prop大部分情况下都是在代码端进行get获取读取操作,因为很多系统属性都是ro类型的,即不可以修改的,有一些debug可以修改的属性,但修改重启又变成了空,所以有是否可以持久化存储的prop,并且可读可写这种,那么就是今天要讲解的persist属性。可以看到只要是persist.sys. 开头的都是定义为了system_prop,所以system_server进程写入数据等都不需要额外编写,因为直接有的。2、selinux部分。
2024-10-09 14:35:10 1082
原创 安卓如何实现双击触摸唤醒点亮屏幕功能-源码分析linage os高通平台
实际上到这里就很清楚hal中干的事情,就是对/sys/class/touch/tpnode/synaptics/wake_gesture写入对应的值0或1,具体也可以通过设置中开关,然后验证/sys/class/touch/tpnode/synaptics/wake_gesture的值。可以看出这里会依次加载aidl,hidl等接口,正常有aidl就会直接返回,没有就再加载hidl接口,这里的就需要结合具体设备上power hal的提供情况。具体对DOUBLE_TAP_TO_WAKE的处理。
2024-10-08 16:05:03 1182
原创 安卓如何实现双击触摸唤醒点亮屏幕功能-Android framework实战开发
驱动层面实现方案为啥成为各个厂商主流方案,主要有以下几点:1、完全不需要修改任何的framework层面代码,不需要修改破坏任何的原生power逻辑2、驱动部分直接就识别了双击,然后上报的一个KEY_WAKEUP事件,非常简单的实现了唤醒设备更多framework详细代码和资料参考如下链接。
2024-10-07 11:57:55 1838
原创 Android.mk中宏定义的高级用法剖析-安卓framework高级实战
上面就是一个经典使用mk传递具体的系统的节点路径到cpp代码中,cpp代码中就可以方便根据mk传递进来的字节节点路径进行相关的设置。使用该方法可以大大提高代码的灵活性,大家可以设想一下,在一套代码需要适配不同的产品目标时候,可以使用同一套代码逻辑来实现,差异变化的路径部可以在Product.mk中进行定义,不同的Product也可以设置不一样的节点路径。
2024-10-05 23:16:11 612
原创 汇总binder相关一些常见面试题-安卓系统常见面试题
跨进程通讯一般都需要通过ServiceManager进行getService获取bpbinder,但普通app经常使用系统组件Service的bindService进行跨进程通讯也可以获取bpbinder,这个是啥原理?binder中有多个进程作为客户端通过servicemanager获取service的bpbinder,bpbinder都会有一个handle,那么多个进程获取同一个service对应的handle一样么?请描述一下binder通讯起来后,需要新开binder线程的创建是怎么一个过程?
2024-10-02 10:29:22 507
原创 android12/13/14版本wms最新面试题:dumpsys window和sf一定会一致么?
针对这个问题,其实就是说window结构树顺序依赖关系和sf的Layer结构树依赖关系居然不同,大家也知道正常情况下肯定要一模一样,因为Layer虽然可以新加入,但是不能说原来的window对应的Layer结构树顺序都乱了,这样可能会造成显示类的bug。基于上面这个2个面试题,其实本质上是对wms还有surfaceflinger相关知识的深入考察,而且问题属于难度等级层次分明,慢慢变大的情况,所以要完全可以拿捏对这问题,基本上wms部分的知识考察就可以得到面试官的高度认可打高分。
2024-09-29 00:22:53 1069
原创 android锁屏界面userActivity自动息屏深入剖析
一旦亮屏时候有用户触摸手机屏幕,那么肯定进入息屏的时间就需要从手机最后触摸时间开始计算,这里手机触摸后就会触发userActivity方法,跨进程到pms中进行统计时间的更新。、锁屏画面不停的点击触摸发现锁屏画面会一直常亮,这里他知道锁屏这个window比较特殊,正常其他window在InputDispatcher进行事件传递时候都会进行userActivity时间的更新,但是锁屏画面是有屏蔽userActivity操作,所以认为锁屏画面哪怕一直点击也不应该阻止息屏。这里的对于手机自动息屏部分有啥差异呢?
2024-09-27 00:37:23 1286
原创 安卓桌面Launcher负一屏如何实现各种方案比较设计
近来很多学员朋友有和我聊到负一屏如何开发设计,针对这个桌面的负一屏功能实现其实在国内厂商还有pixel产品版本都是有的,负一屏主要作用就是实现一些新闻,资讯,快捷服务,游戏宣传等互联网功能
2024-09-26 13:11:24 1123
原创 安卓系统常见问题如native crash,卡顿卡死定位工具命令技巧-android framework实战开发
有学员朋友近来有问到一些安卓系统开发过程中的一些核心小技能小技巧等,比如native crash在企业里面该如何准确定位具体代码函数,程序卡住,或者长时间没反应,想要看看卡在代码的哪里。针对以上的一些问题,我这边分享一些工作中常用积极该类问题的一些辅助工具命令技巧,帮助大家更好的在工作中定位这类问题。经常调试偶尔发现app可能卡住,没反应的情况,这个时候就很希望知道卡住这时候的进程的一个运行情况,希望可以得到一个和anr trace一样的文件来方便分析定位线程状态,即想要获取进程的backtrace。
2024-09-24 17:17:24 1025
原创 如何基于scrcpy改造实现大厂一键连招/触摸宏功能(带java源码)-千里马安卓framework实战
已经分享过如何实现这种大厂里面一键连招,触摸宏的功能,原理本身是对dev/input下面的节点进行读取保存文件,然后在读取文件进行写入dev/input下面的节点,从而实现了触摸事件的读取和写入,不过这个一定要root的手机版本。很多同学就提出是否可以考虑参考scrcpy的事件注入,即已经实现了触摸注入了,只需要再额外补充一个事件的录制保存文件既可以。可以看的出这里重点的方案就是scrcpy如何获取用户的触摸事件,即要监听到全局的触摸事件。通过上面几步骤就完成了监听触摸事件保存到文件的操作。
2024-09-23 11:09:30 826
原创 android编译make详细过程日志查看showcommands/verbose.log
这里注意verbose.log.gz是在out的根目录查看既可以,但这里需要注意一下,它一般是编译几次就有几个这种verbose.log.gz,末尾加了数字,比如verbose.log.1.gz,verbose.log.2.gz的方式。这样就直接有对应的apk,或者bin文件了,具体这些apk或者bin文件是如果生成的其实一点都不清楚,那么有没有什么方法可以看到这些bin文件或者apk的是如何生成的呢?第二步:处理AIDL文件,生成对应的.java文件(工程没有用到AIDL,那这个过程就可以省了)
2024-09-20 15:43:27 1385
千里马android framework学习课程资料下载
2023-06-28
新加一个app源码到packages/apps编译Android.mk
2022-04-16
haxm-windows_v7_5_1新版本github.zip
2021-06-04
Android Framework学习资料,系统开发,Framework开发
2021-05-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人