- 博客(358)
- 资源 (3)
- 问答 (1)
- 收藏
- 关注
转载 漏学Input知识系列之“偷”走了其他窗口的事件pilferPointers
偷”走了其他窗口的事件,本质实现就是调用pilferPointers方法,实现让其他窗口收到CANCEL事件,同时派发的窗口列表中移除非token的window,后续事件派发时候,只派发给token对应的window。更多framework实战干货,请关注公众号“千里马学框架”
2025-01-17 16:24:32
11
转载 千里马社群学习初次尝试-如何解决安卓偶现类黑屏,闪黑等问题
一旦这类偶现问题频繁出现会给造成很差的用户体验,但是这类问题又是偶现的,对于测试或者开发来说都是基本上束手无策,测试不知道这类偶现问题什么时候出现,无法抓取设备对应有效分析现场资料,开发无法得到偶现问题的资料,也无法进行有效的分析。社群学习是指一群有共同学习目标和兴趣的人,通过线上或线下的形式,进行知识分享、资源互助和共同进步的组织。一个人学习某个知识可能认知和理解都会比较有限,一群志同道合的人在一起学习讨论某一个知识,分享各自的理解,观点和成果,这样可以大大扩宽知识面,提高学习效率等。
2025-01-17 16:20:46
16
转载 千里马2024年终总结-android framework实战
心里焦虑加大了,需要调节好平常心面对创业以来最大感受就是“创业艰难”,原本预想的很美好,终于可以有勇气为了理想和兴趣奋斗了,一定是每天满怀激情的干。实际情况是:当自己的兴趣与谋生的收入挂钩时候,一切变得不那么理想和美好。每天还是会有担心自己课程的销售情况,必然就会有焦虑,这种心态和上班兼职搞完全不是一回事。所以心态上确实是相比以前有焦虑一些,这个部分做的不够好。时间不够用创业初期,也没有很多资金搞团队,大部分工作都落到我的头上,比如一些售前咨询,课程研发录制,答疑服务等。
2025-01-09 10:30:51
28
转载 am trace-ipc使用小技巧之Binder服务端方法systrace打印剖析
这里的systrace打印跨进程的方法,不是针对所有接口都有哈,一般针对aidl文件实现的接口才有,因为都是会通过aidl工具进行编译时候植入相关trace,本质上要systrace可以看到更多完整的aidl接口相关调用,需要以下两步:2、抓取perfetto时候偶带上tag为aidlBinder通讯如何打印client调用堆栈即systrace查看对应方法
2025-01-09 10:29:38
12
转载 framework踩坑:aosp/lineageos系统apk签名导出到as进行使用
ps:这里最重要就是keytool使用的要和android studio对应的jre目录的一致,一定要注意这里的keytool要注意它对应的java版本,如果java版本不对会导致生成的platform.jks无法被android studio编译,会不断报错Invalid keystore format。经常做framework开发或者系统应用开发时候,都会有一个很熟悉的名词“系统签名”,因为有了系统签名才可以有比普通第三方应用更高的权限,很多核心函数才可以进行调用成功等。
2025-01-09 10:27:43
24
转载 安卓app/framework开发中meta-data数据剖析作用及实战
meta-data其实无论在普通app开发还是系统开发过程中都是非常重要的,可以在app的AndroidManifest中配置相关的自定义数据,然后在代码中可以获取到AndroidManifest配置的meta-data数据,不仅仅app进程自己可以获取到这个数据,其他进程也可以获取到这个meta-data数据,这样对于系统识别一些Activity特性时候就提供了重要的依据。更多framework相关技术干货,请关注公众号“千里马学框架”
2025-01-09 10:25:59
32
转载 学员作业:如何实现Android12版本以后Wallpaper设置以后Activity不会重启?
Android 12基于壁纸的主题设置工具“Monet”,将带来的全新主题设置工具可以从壁纸中选择颜色,并根据选择的颜色调整整个系统的配色,包括快捷设置、通知,还有设置菜单中的按钮和滑条等,这个新工具的代号为“Monet”.上面既可以看出,实际上壁纸切换后导致Activity重启其实属于一个功能,因为壁纸切换后会导致主题颜色等有变化,这样各个Activity相关的控件view等需要跟随壁纸颜色风格走,自然就会导致Activity要重新刷新。更多framework实战干货,请关注公众号“千里马学框架”
2025-01-09 10:23:36
13
转载 aosp15上winscope离线html如何使用?
文章中也说明在aosp15如果直接使用编译好的离线html是有问题的,无法正常显示抓取的Winscope文件。针对这样一个问题对于有些同学来说还是很不友好,因为很可能他们不想搭建node相关的环境,那么针对 aosp15上Winscope离线的html是否真的不可以使用呢?不过我们可能不关心原因,因为这块毕竟属于前端的知识,我们更关心应该怎么解决。
2025-01-03 20:48:38
20
转载 请收藏:如何确认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中进行搜索。
2025-01-03 20:46:19
48
转载 fallbackhome黑屏闪黑问题修改方案1:开机动画延迟退出时间-framework实战开发
核心思路:既然是因为开机动画退出后,fallbackhome显示期间有黑屏,正常launcher显示时候没有黑屏,那么就考虑把开机动画的退出时间延长,延长到正常桌面显示以后才退出。一般每个Activity显示后会回调onWindowsDrawn方法,所以可以在这里进行检测是不是launcher已经绘制了,如果绘制了既可以启动调用相关的开机动画结束的属性设置。(注意这里只针对设备没有锁屏的场景,有锁屏等考虑其他方案,不可以直接屏蔽)2、上面屏蔽了正常开机动画结束流程,但是开机动画具体哪里进行合适的结束呢?
2025-01-03 20:43:58
20
转载 学员作业:aosp14上黑屏/闪黑问题的分析及解决案例
但巧合的是前天有学员朋友在解决他们公司疑难bug时候,也有问道和这个fallbackhonme场景闪黑,黑屏问题,群里也进行相关答疑等讨论,后来认真确认后发现复现的场景就是一样的。有对aosp上模拟器有没有开机向导进行了深入的剖析,但是发现在第一次启动安卓模拟器时候,发现开机动画结束进入桌面时候,有大概3-5s的黑屏时间,这个问题当时因为我们重点关注是开机向导相关日志抓取,没有认真分析。aosp14-r5(其他aosp13,15应该也可以,但是没有确认哈)那下面来告诉大家黑屏问题复现步骤,及相关作业要求。
2025-01-03 20:40:29
13
转载 如何命令查看安卓设备上多核cpu的大小核情况
近来有学员朋友询问到了一个他做性能优化时候的一个疑问,那就是他不知道自己的手机设备上的一个cpu情况,他想要知道目前的平台哪些是cpu的大核哪些是cpu的小核,问马哥有没有啥命令或者方法进行查看,这样就可以不需要通过问其同事了,每次问都容易忘记,而且每个平台也不一样。一般平时常说的cpu大小核情况,其实说的是cpu一般情况下都是有多个核心的,和我们电脑上cpu是一个情况,但是多核心为了综合性能和功耗上都兼顾,就不能说所有核心都是大核或者小核,一般都是大小核都是共同存在的。cpu的4-7属于大核。
2025-01-03 20:38:02
21
转载 被“边缘化”的程序员应该如何破局??
上面就是程序员在工作过程中遇到“边缘化”的一些情况及如何面对解决“边缘化”问题,总结就是:面对“边缘化”任何时候都不要自暴自弃,一定要积极面对工作,因为你其实为自己工作,你提升自己工作业务能力才是核心,让自己在市场变得更加值钱,自身能力和修为提高了,你才可以不需要担心焦虑在当前公司被“边缘化”。
2025-01-03 20:36:33
13
转载 Winscope中抓取window相关数据的原理剖析
因为Winscope是一个动态的过程,属于数据是不断变化的而上面只是开始抓取时候有往mBuffer中添加,那么是什么地方可以触发这个WindowTracing源源不断的打入log,即添加到mBuffer中?可以看出来这里会有一个很重要的 mRoot.dumpDebug,mRoot就是RootWindowContainer,它会迭代dump出来整个wms层级结构的所有数据的详细信息,这样也是浏览器上可以绘制层级结构详细信息的关键。然后主要看看WindowManagerShellCommand的相关的方法。
2025-01-01 11:46:49
17
转载 Winscope中抓取Transaction相关的原理剖析
首先这个service call就是直接调用到SurfaceFlinger这个service的onTransact方法,1041代表是code,i32代表是data的int类型,1和0代表就是值。那么选着Transaction选项后抓取Winscope,看看winscope_proxy.py程序的相关输出,看看有没有线索可以查到是如何获取系统的相关Transaction数据。在使用Winscope过程经常会有如下的一些选项供我们进行选择,不同的选项最后就会展示不同的数据项出来。具体这些数据是哪里来的呢?
2025-01-01 11:44:05
31
转载 CallStack相关的编译报错undefined symbol正面解决方案
可以看到这里确实在编译InputDispatcher.cpp:356时候发现引入ld不到libutilscallstack库,所以导致无法找到符号表报错,但是明明我们确实cpp编译的bp中加入了相关的libutilscallstack,那这种应该怎么解决呢?注意这里如果模拟器整编还是报错,只能回退再编译,但是可以保存单编译libgui.so覆盖回退的,然后再触发打包既可以。这些编译都不是在编译libgui.so时候报错的,都是编译media相关库才报错的,也就是说其实单独编译libgui是可以成功的。
2025-01-01 11:42:15
74
转载 libgui中的BufferQueueProducer加入堆栈CallStack编译报错问题-大厂企业实战项目难题
这个也就是为啥会报错的原因,那么清楚了原来libstagefright_bufferqueue_helper,libstagefright_bufferqueue_helper_novndk对这个有依赖,那么是否可以直接在这个bp加入 libutilscallstack呢?针对调试和分析某个模块的源码时候,经常需要对某个方法进行堆栈的打印,java相关的代码都没啥问题,大家都可以很正常的打印出来,但是一些native的模块就不是那么顺利了。一看到这些报其实大家可能都一脸懵,不知道为啥会有这种错误。
2025-01-01 11:39:24
22
转载 记录app多年老司机如何快速上岸framework系统工程师-学员投稿
背景:今天特别感谢学员朋友小菜鸡的投稿,该学员朋友前一两个月才找到马哥报名的framework课程,前些天和我报喜说成功找到framework相关的工作,在这里再次恭喜他成果上岸framework工程师,马哥这边特别邀请他给大家分享一些学习framework的经验。下面开始学员朋友的学习framework的经验分享:-----------------------------------------------投稿开始--------------------------------------自己学习
2025-01-01 11:21:23
15
转载 aosp14/15上的针对单app录屏原理探索及自实现的方案讨论
时候,有给大家讲解过一个实战项目是针对某个app进行单图层进行截图方案,是不是和这个很类似,大家可以考虑一下是否可以进行简单的修改就可以实现对这个单app录屏功能。新版本的单独app进行录制视频功能的交互大概就是上面的,整个过程就是让用户可以选择一个app,然后启动这个app到前台,再进行单独录屏处理。这里针对aosp上实现单app录屏的进行一些代码的剖析,本篇不进行详细的源码分析,主要把核心原理给大家讲解清楚。如果针对单app进行录屏的功能要我们完全自己实现会如何实现呢?大家是否有相关的方案呢?
2025-01-01 11:19:03
23
转载 车机车载氢桌面的画中画功能技术调研部分
看到这里大家心里应该也是大概知道了氢桌面画中画的一个原理,本质上实现的方案就是采用了多个虚拟屏,也就是和原来的ActivityView是一个原理,一个ActivityView上面就装载一个虚拟屏幕,这些要并行的Activity都是启动到对应的虚拟屏幕上面既可以。这些信息也可以再次确定其实就是创建了对应的虚拟屏幕,这些虚拟屏幕就是ActivityView自带创建的,然后其他的Activity就可以启动到这个虚拟屏幕上,从而实现画中画等Activity并行功能。他的实现原理是什么呢?
2025-01-01 10:57:39
41
转载 Winscope重要干货知识点RelativeLayer相关的查看方式
实际查看明显发现SurfaceView位于Activity图层下面,和上面winscope的看着是有冲突的,那么这个到底是winscope不准确有问题,还是我们有啥知识点遗漏呢?这个部分就是相当于图层顺序的核心哈,其实winscope就已经有针对这个相对图层有明显的标识。这里winscope明显可以看到SurfaceView图层上相比其他图层还有一写标识上的差异,多了一些RelZ,和RelZParent这样的标识。Background for SurfaceView其实是位于Activity图层的下面。
2024-12-18 15:50:54
31
转载 安卓aosp15手机上如何离线获取winscope文件
当然不是哈,只是aosp15新版本的手机上离线抓取已经一起整合到了perfectto部分了,不和原来一样抓取方式,所以自然原来按钮就去除了,接下来就重点给大家讲解aosp15上如何离线抓取winscope。这篇文章搭建的winscope的方式同样适用于aosp15版本,只需要使用最新的aosp15相关的源码环境的winscope依赖既可以完成编译。然后点击上面的Record trace按钮可以开始抓取了,点击结束抓取后可以看到如下路径data/local/traces已经有相关的文件。
2024-12-18 15:47:15
23
转载 安卓手机/平板等设备添加左右两边侧边栏需求项目-学员作业布置
近期有学员朋友求助一个给安卓设备的左右两边要加入侧边栏的需求,这个需求其实还和平时的系统自带的Navigationbar,或者StatusBar等窗口不一样。因为无论是Navigationbar,或者StatusBar都是属于和手机屏幕画面是一起的,而这个左右侧边栏的需求是想把主屏幕画面和侧边栏画面是独立的,二者互不干扰的情况。3、侧边栏的画面不会因为正常手机画面的页面跳转而被覆盖,侧边栏点击相关按钮可以让正常手机画面有页面跳转等操作交互。1、input相关的触摸知识部分。2、wms相关的知识。
2024-12-18 15:43:01
14
转载 aosp15系统窗口闪屏原生bug-dim图层相关-你会修改吗?
3、点击跳转复现问题 复现非常简单,MainActivity点击弹出DialogActivity后,再点击DialogActivity弹出第二个DialogActivity,再返回就必现。近期各个大厂已经开始准备aosp15的系统rom适配工作了,应该是想2025年初开发发布相关的新机型,所以慢慢的我们也要开始适应aosp15版本的相关问题的修改和研究哈。刚好千里马的学员朋友们非常期望有这样的一些窗口疑难类的bug,也刚好可以作为。后的一些实战扩展项目给大家进行企业级别的实战哈。
2024-12-18 15:40:50
20
转载 aosp安卓15新特性dump的wms窗口层级树优化的更加美观
明显可以看出以前的wms层级结构树看着不像一颗树,靠的序号和空格在区分,但是层级一多,而且相差不多时候,如果只相差一层空格就不明显了,经常可能需要对半天才对的清楚。近来在体验调试aosp15时候,使用了dumpsys activity containers时候,发现wms层级结构树有一个巨大的变化。更多framework实战干货内容资料,请关注公zhong号“千里马学框架”
2024-12-18 15:37:58
14
转载 Input的Move事件相关的深入疑问/getHistorical剖析/批处理事件
近期有学员朋友在群里提出了关于input模块中的一个批处理相关的疑问点。针对这个批处理这块知识点,马哥不打算直接给大家blog输出干货给大家,即不准备直接给大家喂相关的知识点,而是采用给大家布置几个作业疑问点方式,让大家积极参与进来思考的方式。如果针对move事件不采用批处理方式,也和down事件一样,有事件来了就直接进行相关的派发主线程处理,那么可能会造成什么样的后果呢?为什么会需要有这个方法?好了上面就是留给大家关于input相关的思考作业哈,后续马哥这边会给大家进行剖析解答,更新到相关的vip群中。
2024-12-18 15:36:01
14
转载 性能优化/开机时间优化之开机动画部分讨论-学员讨论
针对开机时间优化,如果其他地方实在做不出来更多优化后,可以考虑看看自己开机动画是否有优化的空间,确定有优化空间后再考虑具体方案进行,这里注意一定要考虑交互体验等结合起来。不然优化后会引入一堆的闪黑,开机动画播放不完整等问题就得不偿失。更多请关注“千里马学框架”
2024-11-25 10:08:34
39
转载 分享其他简单GMS全家桶预制方案
这个包已经帮我们干了所有的事情,比如预制apk,预制权限xml等,对于我们只需要无脑调用这个目录下的gms-vendor.mk既可以实现gms等整个打包和权限预制。上,文章发布后还是有很多学员朋友纷纷提出更多的更简单的一些方案,在这里也给大家分享一下其他更加简单的两种方案。明显看到这里gms的应用更加多,根本不需要整体预制根本不需要挨个下载apk这种方式,所以这个方法相对更加简单。这种方案就是直接刷入相关人家做好的img,自己基本上没办法来定制,灵活性很差,只能说拿来用的方式。
2024-11-25 10:06:49
66
转载 安卓高级系统工程师必备技能-技术大佬成长必备技能
简单说就是平时负责工作中经常会遇到一个全新的知识模块,这个全新的知识模块可能处于无资料,无人帮助的状态。无资料即互联网上搜索不到任何的内容,公司里面也没有任何文档等,属于全新的一个模块,这种情况其实还不少,比如google某个版本可能新增加了一个新模块,这种当然哪里都找不到资料。无人帮助因为很多时候公司里面就一个人负责一个模块,其他人也不会去深入研究你负责的相关模块,所以新出来的模块公司更不可能有其他人懂了。
2024-11-25 10:05:15
23
转载 aosp15上自由窗口入口无法显示aconfig等新知识剖析
这里最后只要可以通过getShortcuts走到底部的Collections.singletonList那就说明可以显示出来,所以这里显示不出来肯定是没有走到底部这个Collections.singletonList,说明是在前面的两个if返回了null,具体哪里返回了?哈哈,到这里大家是不是终于看到熟悉的Properties了,你是不是和马哥一样认为这里其实就是普通的prop,如果这样认为其实就是完全错误的哈,具体这里Properties是啥,这个就有需要了解新版本上使用的类似config机制。
2024-11-25 10:03:40
37
转载 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-11-25 10:02:00
298
转载 安卓窗口wms/input小知识NO_INPUT_CHANNEL剖析
NO_INPUT_CHANNEL主要给一些窗口完全不需要消费任何输入事件的情况,经典使用该flag窗口有SnapshotStatingWindow,ActivityRecordInputSink等。经常在学员的vip技术群里经常有很多学员会提问一些不太常见的窗口和input的相关的问题,虽然不太常见,但确实是工作中会遇到的一些问题,所以马哥有必要进行一下记录这些窗口技术知识点。更多请关注“千里马学框架”
2024-11-25 09:59:13
35
转载 android app执行shell命令视频课程补充android 10/11适配-千里马android
hi,有学员在学习跨进程通信专题课程时候,在实战app执行一个shell命令的项目时候,对课程本身的android 8.1平台没有什么问题,但是学员想要自己适配到android 11上,估计也是目前最新的android版本,因为普遍android S厂商都还没有发布,因为android 的大版本升级适配本身工作也不小,这里就对android app执行shell命令这一部分进行一个升级适配的补充,尽量让买课的学员可以直接用于最新的android版本。具体项目代码和详细视频讲解可以购买我的相关视频。
2024-11-07 14:31:30
47
转载 aosp14分屏分割线区域部分深入剖析-framework实战干货
核心看看这里的topPosition,bottomPosition是怎么计算的,刚好也可以解释为啥这里名字有16_9这个字符,其实本质就是计算个topPosition位置,拿竖屏来举例的话,这里因为想要屏幕宽度固定的,为了美观程度,所以一般topPosition这个区域要固定为一个16:9区域。上面已经分析出了分割线的几个SnapTarget,这些SnapTarget都是有固定位置的,那么接下来分析一下分割线如何到对应的SnapTarget。
2024-11-07 14:27:55
51
转载 安卓疑难问题冻屏/黑屏深入剖析原因-全网独家framework实战
明显可以看出来这里正常情况有相关的finishRecentsAnimation操作,但是异常情况下没有finishRecentsAnimation,这个其实也可以判断出来异常冻屏的本质原因是因为没有进行相关的finishRecentsAnimation操作,即相当于动画在执行,但是因为某些异常没有得到良好收尾操作,从而导致问题。其实TaskBar的隐藏本身系统中有更好的方法,不应该自己做的这种隐藏TaskBar的主View即mDragLayer方法,完全可以源头 上进行规避。
2024-11-07 14:25:44
103
转载 安卓冻屏bug案例作业分享-千里马学员wms+input实战作业
近期有学员反馈在aosp14高版本上有了一个新窗口TaskBar,这个但是有需求就是对这个TaskBar进行隐藏,所以有一个需要对这个TaskBar进行进行隐藏需求。因为要实现一个对TaskBar隐藏需求功能,所以这里需要先实现这个需求,正因为实现这个需求后才发现可以复现这个冻屏问题。2、分析出来了冻屏原因,再考虑怎么屏蔽TaskBar就会用法该bug,为啥TaskBar存在就不会有该bug。这里普通的手机是无法看到TaskBar,需要进行相关density进行设置,变成平板设备才可以。
2024-11-07 14:23:45
42
转载 安卓系统属性persist类型prop深入剖析
近来学员朋友在群里问道了prop属性值进行持久化存储相关的问题,针对prop大部分情况下都是在代码端进行get获取读取操作,因为很多系统属性都是ro类型的,即不可以修改的,有一些debug可以修改的属性,但修改重启又变成了空,所以有是否可以持久化存储的prop,并且可读可写这种,那么就是今天要讲解的persist属性。可以看到只要是persist.sys. 开头的都是定义为了system_prop,所以system_server进程写入数据等都不需要额外编写,因为直接有的。实战主要有以下几个地方修改。
2024-11-07 14:19:45
153
转载 安卓如何实现双击触摸唤醒点亮屏幕功能-源码分析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-11-07 14:18:07
58
转载 安卓如何实现双击触摸唤醒点亮屏幕功能-Android framework实战开发
驱动层面实现方案为啥成为各个厂商主流方案,主要有以下几点:1、完全不需要修改任何的framework层面代码,不需要修改破坏任何的原生power逻辑2、驱动部分直接就识别了双击,然后上报的一个KEY_WAKEUP事件,非常简单的实现了唤醒设备更多framework技术干货,请关注下面“千里马学框架”
2024-11-07 14:16:23
239
转载 Android.mk中宏定义的高级用法剖析-安卓framework高级实战
上面就是一个经典使用mk传递具体的系统的节点路径到cpp代码中,cpp代码中就可以方便根据mk传递进来的字节节点路径进行相关的设置。使用该方法可以大大提高代码的灵活性,大家可以设想一下,在一套代码需要适配不同的产品目标时候,可以使用同一套代码逻辑来实现,差异变化的路径部可以在Product.mk中进行定义,不同的Product也可以设置不一样的节点路径。更多framework技术干货,请关注下面“千里马学框架”
2024-11-07 14:13:59
34
android framework高级实战视频课程相关课件
2022-05-21
Android Framework最好的学习视频
2021-05-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅