- 博客(570)
- 资源 (3)
- 收藏
- 关注
原创 分享Claude进行AI编程的相关技巧及程序员未来发展方向
其实提高AI Coding的准确性,核心就几点:精准指令、选对场景、人工校验,精准识别AI在自己业务中的能力,不让AI跑偏,不让一直让AI浪费时间干它搞不定的事。对于咱们安卓开发者来说,不用追求“AI生成完美代码”%100直接交付,而是要学会“指挥AI生成高质量代码及一些平常耗时的业务代码”。
2026-04-18 11:02:50
114
原创 Ubuntu 24 搭建aosp源码环境详细笔记
因为很多新同学的机器等可能比较新,所以机器上的一些硬件驱动不一定老版本的ubuntu系统上有,所以很多同学也不得使用比较新的ubuntu 24版本,但是24版本ubuntu搭建aosp源码环境,相比ubuntu 20.04还是有一些差别。(优先考虑直接电脑安装Ubuntu > windows和Ubuntu双系统 > windows上安装VMware方式,不要不建议安装virtualbox)1、openjdk 8 的安装 (aosp8.1版本需要,其他高版本aosp不需要,都是源码自带)
2026-04-15 12:27:06
413
1
原创 安卓系统log日志分析都有哪些高效工具notepad++?
Notepad–是一个国产跨平台、轻量级的文本编辑器,英文全称 Notepad-double-decrease, 代号 Notepad-- ,简称 Ndd。Notepad–是notepad++的国产替代软件,支持Windows/Linux/Mac 平台和国产操作系统统信 Uos、麒麟 kinly 系统。gitee地址为:https://gitee.com/cxasm/notepad–
2026-04-08 15:07:24
374
原创 Android Automotive 15/16车载模拟器如何调多屏多音区功能?
车载模拟器因为有个特性和手机模拟器不一样,执行emualtor命令,车载模拟器会有热启动,就是可以秒启动上次模拟器,而不需要每次开机重启节省时间,但是这个热启动车载模拟器问题比较多,经常造成编译代码后不更新,或者容易模拟器整体冻屏等情况,所以建议大家每次启动使用恢复出厂设置命令,虽然麻烦一点但是能保证每次从头启动。基于上面学员们对车载模拟器的迫切多屏多音区的需求,这里进行马哥也进行系统中源码的调研,搜索,实践等终于给大家找到了解决办法。上图就可以看出车载多屏的出现,有驾驶舱,副驾驶舱,乘客舱等。
2026-04-07 11:02:23
342
原创 干货分享:车载音频audio调试开发之dumpsys CarAudioService剖析
大家在查看dumpsys CarAudioService的输出时候,有一些输出可能不明白相关的含义,大家这个时候可以考虑去对应的源码中查询dump方法,找到对应变量方式来帮助理解整个CarAudioService,其实很多时候大家学习某个模块是否学通了,学懂了也可以尝试去看看这个模块的dump,看看你是否的狂都可以看得懂了。车载部分其实有自己的类型来表示当前的播放是什么类型的声音,车载中这些类型就是AudioContext,比如music,navigation等,其实是一个整数而已。
2026-04-03 14:26:45
521
原创 如何给你的apk进行瘦身-Google官方文档教你
您可以使用 Play Feature Delivery 和 Play Asset Delivery 来增加应用的大小,但应用大小的增加可能会对安装成功率产生负面影响,并增加卸载量,因此我们建议您遵守本页介绍的指南,尽可能缩减应用的下载大小。应用上传完毕后,Google Play 的应用服务模式会使用您的 app bundle,根据每位用户的设备配置,生成并提供经过优化的 APK,因此用户只需下载运行应用所需的代码和资源。当用户下载您的应用时,其设备会根据设备的功能和设置接收正确的 APK。
2026-03-29 12:20:27
384
原创 strace安卓linux系统调用跟踪神器相关实战案例
strace是一个集诊断、调试、分析于一体的Linux系统工具,它可以拦截并记录进程发起的所有系统调用(system call)以及接收到的信号。简单来说,它能让你“看见”一个程序在运行时,向内核发出了什么请求,内核又是如何响应的。系统调用是用户态程序与内核交互的唯一入口,比如读写文件(openreadwrite)、创建进程(forkclone)、网络通信(socketconnectsend)等。通过观察这些调用,我们可以精准地定位程序在哪个环节出现了问题。
2026-03-29 10:29:39
405
原创 aospc/c++的native 模块VScode和Clion
VSCode 通过语言服务器和灵活的文件扫描机制,能够在不依赖完整构建系统的情况下实现代码跳转。而 CLion 依赖于 CMake 项目模型和编译数据库,确保了对大型项目的精确索引和跳转支持。因此,在使用 aidegen 生成项目后,若要实现完整的代码跳转功能,必须确保生成的 CMakeLists.txt 正确包含了所有源文件,并且存在有效的 compile_commands.json 文件。
2026-03-29 10:28:20
376
原创 AAOS车载开发GOOGLE官方培训文档Car Framework Core
总结就是车载系统的架构不仅仅可以运行标准手机那种app,也可以运行特定使用Car API开发的App,同时也详细介绍了Car Service相关作用,及它设计的车相关的一些HAL等服务,和传统安卓系统SystemServer的连接方式等。Car Framework的整体架构,可以图中看出本质上就是在手机的架构基础上加入了额外的Car Serivce部分的服务,这个服务主要主要用来处理和车相关的一些定制操作。其他更多详细的文档内容就不一一展示了,相关文档马哥会分享到vip群内,大家自行阅读哈。
2026-03-23 11:21:32
519
原创 app开发转framework系统工程师窗口显示方向面试真题
2、framework的承担开发要求精,因为framework毕竟属于系统层面东西,一修改影响整个系统的功能和稳定,分析代码理解代码精通代码才可能可以修改掉系统一些问题,及最小波及的实现系统的一下新功能,不是网络百度复制粘贴一下即可以,所以这里要求是对简历上写出的精通或熟悉模块,面试官会挖的比较深入,会对模块很多重要部分进行提问考察,这个部分就是对你真正是否熟悉这个模块的考察,也是区别你是真懂的实战派还是说看了看blog和记忆性的背书党关键。13、你接过input相关的外设吗,或者说一下input的流程?
2026-03-16 10:57:11
413
原创 audio干货分享:车载audio开发必知必会的调试命令
车载Audio其实本质上就是在原来手机那一套audio基础上额外进行了扩展,如扩展了CarAudioService,所以在做车载音频子系统开发调试时候不仅仅需要使用手机音频开发调试命令如:dumpsys media.audio_flinger, dumpsys media.audio_policy, dumpsys audio等命令,还需要使用针对车机音频独享的一些音频调试命令也非常的重要,下面重点将介绍车机音频调试常用的一些命令。主要介绍一下音频管理的相关命令。
2026-03-15 22:08:47
490
原创 车载音频动态路由AudioMixingRule匹配深入剖析
所以只需要3个Criterion中只要有一个比如AUDIO_USAGE_MEDIA匹配上了,那么最后的结果都是matchedPositiveRules == presentPositiveRules,因为3个Criterion都是同一种类型的RULE_MATCH_ATTRIBUTE_USAGE。isCriterionMatched就是真正匹配的方法,它的实现也很简单,就是对track的usage,uid,userid与AudioMixMatchCriterion进行比对,只要比对上了就返回true。
2026-03-12 18:13:44
438
原创 audio动态策略剖析之AudioPolicy,AudioMix,AudioMixingRule深入剖析
一般是系统App定义构造好AudioPolicy即AudioMix对象,然后通过AudioManager接口跨进程到system_server的AudioService,AudioService通过AudioSystem向AudioPolicyManager中注册AudioPolicy数据时,AudioSystem就会将Java层的数据结构转换成C++层的数据结构,注意只需要转换传递核心的AudioMix对象既可以。排除的意思是指Device1不支持USAGE_MEDIA类型的声音播放。
2026-03-11 15:21:35
447
原创 Winscope高级疑问“Invisible due to”是如何来的呢?
因为新版本aosp15的Winscope的html都是需要nodejs才可以拉起运行了,所以这里为了方便分析,拿一个aosp13的Winscope的html,因为这个版本的html是可以直接离线运行,所有的前端核心代码逻辑都在html中。老版本就是跨进程调用SurfaceFlinger的1025接口,把相关proto数据导出到文件中,新版本变成Perfetto了,其实也是差不多的,都是SurfaceFlinger本身提供数据源头。下面开始剖析这个Invisible due to来源问题。
2026-03-10 09:31:01
378
原创 分析WM Shell中线程相关的官方帮助文档
这几年WM Shell部分也在不断更新,而且基本上互联网,AI等对于WM Shell的知识几乎是空白的啥也搜不到,马哥这边对于WM Shell出了自己去代码调研以外,也会经常去寻找一些官方的文档资料进行学习,下面就是关于WM Shell相关的官方文档路径。今天分享一下我们比较陌生的的WM Shell的线程知识,针对这块我们一起看着官方文档学习哈,有啥要讨论分享的知识可以vip群中讨论发言哈。
2026-03-05 14:52:29
415
原创 如何实现AudioRecord内录r_submix模式系统Speaker正常发声?-学员作业
audio课程中虽然有相关的实战案例让系统内录声音时候speaker也发出声音的情况,不过当时是有修改AudioPolicyManager中获取device中额外添加上speaker这个device,但是学员这里是要求不要修改系统源码就可以实现,所以这种现成的方案就不适用了。这个其实比较好实现,大概思路就是可以搞出两个AudioRecord,一个AudioRecord实现内录考虑REMOTE_SUBMIX,另一个mic声音也可以采用AudioRecord进行录制。上面学员的需求提出后,其实学习过。
2026-03-04 09:57:25
230
原创 重学SurfaceFlinger之View绘制到Surface过程剖析
本章我们沿着代码逻辑学习了应用是如何申请到画布、使用android的View系统如何绘图、绘图完成后如何提交buffer,本章所述的逻辑均是指通过android的View系统绘图的过程,也可以称其为hwui绘图流程,从上面代码流程可以知道,hwui的绘图流程是被vsync信号触发的,开始于vsync信号到达UI线程调用performTraversals函数, hwui的画面更新是被vsync信号驱动的。这句是将指令发送给GPU执行,这其中是如何“翻译”的细节笔者暂时尚未研究,这里先不做讨论。
2026-03-03 22:43:20
440
原创 Under the hood: Android 17’s lock-free MessageQueue(google官方原文)
针对国内无法访问问题,马哥这边联系相关学员帮忙搞出html文件,我这边进行格式等调整后进行转载,下面开始Under the hood: Android 17’s lock-free MessageQueue的原文分享,方便很多同学想要看原版google原文blog的同学。新系统的核心改进在于优化了MessageQueue的内存锁定机制,从而缩短了软件线程之间的等待时间。这两天学员朋友们在vip群,都在讨论google官方发布的blog,安卓17版本上google引入了无锁消息队,提升手机流畅度的文章。
2026-02-28 14:55:46
754
原创 安卓17版本上google引入了无锁消息队?老版本MessageQueue的锁解密剖析
马哥方便贴出一下相关的源码么,只是看到文章写的MessageQueue有锁竞争,但是没注意看哪里有锁,还有MessageQueue应该也还有native代码吧,也有锁么?正常java端进行发送消息,都是只需要有一个Handler调用sendMessage方法就可以,不管任何线程都可以调用Handler的sendMessage方法进行消息发送。这两天学员朋友们在vip群,都在讨论google官方发布的blog,安卓17版本上google引入了无锁消息队,提升手机流畅度的文章。
2026-02-27 16:26:37
585
原创 安卓系统性能优化开发业绩如何提升?
其实安卓性能优化岗位的相关工作都是可以让对应模块的业务开发者进行完成,但是整体手机模块很多各个模块之间负责人可能各不相同,经常出现性能优化等问题需要多模块协同完成,基于这个背景公司为了整机的性能,响应速度有更好的提升,经常会设置专门的性能优化岗位,专门负责手机系统的性能优化相关的工作,这样就可以让系统整体性能优化提升更加明显,更好的性能优化协同工作,不会出现一个性能问题涉及多模块没人愿意接受,相互推诿,扯皮。2、会优化一些app启动速度,开机速度,分析一些卡顿问题,多屏问题等,整机慢等。
2026-02-26 14:59:47
617
原创 春节后如何高效投入工作?--祝大家开工大吉
不过,一些人的生物钟还停留在春节期间到处走亲访友,热闹非凡,一家人团圆,其乐融融的轻松惬意里,还没有走出假期营造出的心理舒适区,导致工作没办法集中注意力,工作效率低下,没办法重启工作模式,疲劳焦虑等症状。工作从简单任务入手,提前梳理并列出工作清单,明确优先顺序,让心理提前过渡。可以给自己半天到一天的缓冲期,优先处理整理文件、回复消息等常规性事务,逐步建立信心后再过渡到复杂任务。如果公司整体工作较少,因为很多,可以尝试多学习马哥课程,积极参与vip群的技术讨论,不断获取知识带来的成就感。
2026-02-25 09:12:16
71
原创 app性能优化:优化布局层次结构
使用基本的布局结构会导致 最高效的布局不过,您添加到应用中的每个微件和布局 需要进行初始化、布局和绘制。例如,使用嵌套 实例 LinearLayout 会导致视图层次结构过深。此外,将多个 使用 layout_weight 的 LinearLayout 实例 参数的开销可能特别大,因为每个子参数都需要测量两次。在反复膨胀布局时,这尤为重要,例如 在 RecyclerView。本文档介绍了如何使用 布局检查器和 lint 来检查和优化布局。
2026-02-23 20:34:48
711
原创 安卓官方文档带你学车载音频焦点
在拒绝交互中,传入的请求一律会遭到拒绝。因此,对一个音频区的请求不会考虑其他音频区中的焦点持有者,也不会导致其他音频区中的焦点持有者失去焦点。如果在已有一项延迟请求的情况下,又发出另一项延迟请求,则最初发送的延迟请求将收到 AUDIOFOCUS_LOSS 更改事件,新发送的请求将收到 AUDIOFOCUS_REQUEST_DELAYED 的同步响应。因此,无论 HAL 是否被授予音频焦点,都应播放紧急声音或对保障安全至关重要的声音,即使 HAL 失去音频焦点,也应继续在适当的情况下播放这些声音。
2026-02-15 10:17:16
691
原创 系统开发面试你会这个native crash的面试题吗?
通过查看该结构,您会发现 struct DIR 中 mutex_ 的偏移量为 sizeof(int) + sizeof(size_t) + sizeof(dirent*),在 32 位设备上表示为 4 + 4 + 4 = 12 = 0xc,这样便可以找到错误所在:调用程序向 readdir 传递了一个 Null 指针。在以下示例中,尽管崩溃函数在 libc.so 内,但由于字符串函数仅在指定给它们的指针处进行操作,因此您可以推断出在调用 strlen(3) 时指定的是 Null 指针;
2026-02-11 10:05:53
688
原创 ANR高级经验2:No Focused Window类型ANR的各种案例汇总
平时马哥也是基于上面的方法去分析对应的No Focused Window ANR问题,在工作过程中其实遇到的No Focused ANR其实也是非常非常多的类型,绝不是简单的一两种案例那么简单哈,在工作中积累了这块的ANR类型应该有多达20+种不同原因和类型,当然这里的20+种也不代表真的全部覆盖,只是这里提供给大家一些处理的经验,应该也可以覆盖%90以上的No Focused Window ANR问题。应用在绘制前卡住,或拦截了绘制,这块主要排查app的draw方法相关执行分析为啥卡住。
2026-02-03 11:23:07
737
原创 如何分析各种ANR第二篇?Google官方文档详细教你
在实际开发工作各种类型的ANR层出不穷,之前一直也想google官方开发人员是否有解决各种ANR问题的一些文档等,主要是想看看自己平时自己分析套路是否也和google的人一样,还有就是想看看goole是否有啥分析ANR的新套路方法等,今天刚好找到了google关于各种ANR问题的详细指导文档,本来想用翻译成中文的版本,但是感觉自动翻译的其实并不是太好,所以直接上英文,马哥搬运google的干货。下面是google官方文档,底部也有原文链接。
2026-01-30 17:33:15
700
原创 安卓aosp 16新特性分屏收藏保存功能AppPairIcon剖析
5、调用addToWorkspace把这个AppPairInfo对应的Icon添加到桌面UI,及保存相关数据信息。先打开2个task,而且操作进入分屏,在分屏的画面下点击最近任务进入分屏,可以看到分屏的task卡片。在安卓16版本上在分屏情况下,再进入最近任务,可以看到这时候有分屏的两个task的卡片,点击双图标。点击后会出现如下弹框,发现有一个Save app pair。
2026-01-28 09:45:45
870
原创 ANR高级经验分享:No Focused类型ANR详细步骤
ANR是Android稳定性问题分析的一个难点,其中比较常见的一种是窗口无焦点Not have a Focused Window,这类无焦点窗口ANR相比其他Application not response无响应更难分析。focused ANR一定是wms问题?如果对该ANR的原理不了解,会直接认为窗口焦点是WMS控制,出现无焦点就一定是WMS导致。
2026-01-27 16:40:14
1070
原创 仿oppo三星samsung手机分屏收藏代码实现
在体验三星手机的分屏相关功能时候,发现三星手机的分屏分割线上,点击后有一个类似收藏的图标。刚开始其实还不知道这个收藏图标的具体功能,然后进行了相关的一些功能体验,体验后发现本质上这个收藏功能可以总结一句话就是“为分屏的两个task一起启动创建一个快捷方式图标到桌面”,因为平时启动分屏都是需要用户到桌面启动需要分屏的两个task,然后最近任务中选着split task1,然后在选择split task2.所以收藏图标的作用就是针对当前分屏的两个task如果是经常会进行分屏使用情况,比如:学习视频app +
2026-01-25 12:44:52
435
原创 Samsung设备系统,app开发重大福利:免费设备远程调试不在需要买设备
大家经常在做系统开发,或者app开发时候,开发的app想要验证在某个品牌手机上是否完美运行,或者针对某个品牌的适配的一个功能是否正常,比如开发手机公司钱包相关功能集成sdk,适配手机公司折叠屏幕场景等,或者偶尔调研某个手机品牌的功能。这些时候情况下常规做法那就是你去买某品牌的手机,而且这个品牌可能手机机型比较多,每个机型都可能出现不一样的问题,所以这种对于开发者来说去买实体设备手机来测试确实是一个比较大的花费开销,而且各种机型都要的话也是一笔不少开销。所以针对开发者为了测试app需要花费大量金钱买设备这种痛
2026-01-23 10:48:24
976
原创 系统开发面试福利:安卓系统framework简历指导面试题面试官经验分享
2、framework的承担开发要求精,因为framework毕竟属于系统层面东西,一修改影响整个系统的功能和稳定,分析代码理解代码精通代码才可能可以修改掉系统一些问题,及最小波及的实现系统的一下新功能,不是网络百度复制粘贴一下即可以,所以这里要求是对简历上写出的精通或熟悉模块,面试官会挖的比较深入,会对模块很多重要部分进行提问考察,这个部分就是对你真正是否熟悉这个模块的考察,也是区别你是真懂的实战派还是说看了看blog和记忆性的背书党关键。你说你这边了解vsync,你能说说vsync的整个流程如何么?
2026-01-19 09:43:08
1000
原创 敏感权限如何自动授权?pkms的permission部分常用命令汇总
经常有一些同学在做安卓系统相关的一些定制时候,会有一些客户有需求要求对app的相关的敏感权限可以进行自动授权,一般这种需求其实相对来说要修改源码相关的白名单等方式居多,而且一般都是过不了google相关测试,那么有没有什么更加简单方式可以实现对apk的权限进行自动授权呢?那么今天马哥给大家介绍一下pm相关一些授权命令来实现对apk的自动授权部分,而不再需要权限相关弹框。在同学们自己知道这些pm命令可以进行相关的自动授权时候,再结合。,相信大家可以很容易的实现对敏感权限的自动。
2026-01-18 16:17:01
588
原创 竞品技术调研:小米分屏SplitScreen自由窗口Freeform中快捷切换按钮
主要是提供对当前Task的的一些模式变换的快捷操作方式,切换的Task模式不需要像以前一样需要先退出当前模式,再重新进入最近任务再进入另一个模式,现在分屏和自由窗口之间的切换都只需要通过这个快捷窗口就可以。
2026-01-16 10:45:22
834
原创 app冷启动性能优化指标之完全显示时间TTFD实战
此指标用于测量应用生成第一帧所用的时间,包括冷启动期间的进程初始化、冷启动或温启动期间的 activity 创建,以及显示第一帧。如果您的应用正在执行延迟加载,并且初始显示不包含所有资源(例如,当您的应用从网络提取图片时),您可能需要延迟调用 reportFullyDrawn,直到应用可供使用后再调用,以便将列表填充时间纳入基准时间的计算范围。在经常使用各种app时候,大家都会有一个体验:在点击打开app展示第一帧画面时候,发现往往第一帧画面显示的内容是无法点击的,一般这个画面是个默认的内容画面。
2026-01-15 14:22:08
673
原创 性能优化:Perfetto查看app启动时间及冷热启动介绍
这种糟糕的体验可能会导致用户在 Play 商店针对您的应用给出很低的评分,甚至完全抛弃您的应用。本页面提供了有助于优化应用启动时间的信息,包括启动流程的内部机制概述、如何分析启动性能,以及一些常见的启动时间问题和有关如何解决这些问题的提示。通常,onCreate() 方法对加载时间的影响最大,因为它执行工作的开销最高:加载和膨胀视图,以及初始化运行 activity 所需的对象。当应用启动时,空白启动窗口将保留在屏幕上,直到系统首次完成应用绘制。此时,系统进程会切换应用的启动窗口,让用户与应用互动。
2026-01-14 00:14:52
934
原创 疑难ANR面试题:crash导致ANR深入剖析
只要有异常抛出,那么主线就直接无法再继续运行,所以哪怕加上原来的skipCallbacks为true时候进行sendFinishedSignal,确实当前这个事件正常finish了,不会当场anr,但是主线程已经停止运行了,如果有新事件过来无法接受也会ANR。可以看到默认的直接会执行finishInputEvent方法,这个finishInputEvent最后会调用到InputConsumer::sendFinishedSignal方法传递finish到InputDispatcher中。
2026-01-12 15:50:53
913
原创 必学ANR疑难面试题:crash还会导致ANR吗?
大部分都会调用setDefaultUncaughtExceptionHandler方法。Android应用中使用setDefaultUncaughtExceptionHandler的详解在Android开发中,setDefaultUncaughtExceptionHandler是用于捕获全局未处理异常的关键机制,它允许开发者在应用崩溃前执行自定义操作(如日志记录、用户提示或资源清理)。
2026-01-11 22:34:48
654
原创 如何改进车载三分屏SplitScreen启动交互方式?
上面这2个需求其实在真正的车机分屏中也是非常常见的哈,所以这里马哥收到学员的疑问后立即就给大家针对课程的三分屏进行相关的交互改善,实现了三分屏的动态进入,三分屏的Task内容的动态控制等。还有三分屏的各个Task是否可以不通过最近任务进行操作,有没有更简单的进入三分屏方式?这里面的componentName1,componentName2,componentName3就是三分屏的每个Task的对应Activity的名字。进入后发现第三屏Task内容就是设置的我的文件对应的FilesActivity。
2026-01-09 11:50:30
341
千里马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关注的人
RSS订阅