Android Framework
文章平均质量分 73
学习了本系列文章后,你将收获:
1、基本的系统编译知识。
2、在AndroidStudio顺畅的编译运行Settings,后续会加入SystemUI与Launcher等移植到AndroidStudio的过程
3、还有其他的高阶知识和Framework相关知识
4、此模块会持续更新,希望分享更多内容。
优惠券已抵扣
余额抵扣
还需支付
¥49.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
龚礼鹏
Android应用架构师、AndroidFramework工程师、鸿蒙&openHarmony工程师、flutter开发工程师
展开
-
Android 13 固定systemUI的状态栏为黑底白字,不能被系统应用或者三方应用修改
在colors.xml编写自定义的状态栏背景色以及状态栏内容的颜色,然后后续所有的位置都是用这两个自定义的颜色进行填充,这样的好处是后续我们想改变状态栏背景色或者状态栏的内容颜色直接改变这两个颜色值即可。原创 2024-09-12 19:47:22 · 448 阅读 · 0 评论 -
Framework源码整编、单编、烧录过程
源码编译分为整编和单编,整编通常耗时较长,单编则速度很多,如果我们进行一个小的修改想要立马验证的话单编就很合适。原创 2024-08-01 19:03:13 · 145 阅读 · 1 评论 -
Android 基带版本号显示不正确,显示了多个一样的基带版本号
Android Framework层基带版本号原创 2024-07-27 19:45:24 · 70 阅读 · 0 评论 -
息屏休眠功耗超标问题排查流程及解决方案
日志中可以看出来红框的部分是第一次NetworkTimeUpdateService类到NtpTrustedTime类中进行的时间同步完成流程,可以看出耗时了40s,然后再看蓝框的部分是第二次时间同步,可以看出由于第一次时间同步未完成,然后还在锁住状态,所以sychronized。这个日志可以看出前面的唤醒锁很多,到后面逐渐变少直到最后没有了,这些锁就是导致当前不能休眠的原因,分别从最前面的size=5开始查看。上述修改是生效的,但是不一定正确,一般是把分析结果呈现出来,尽量不修改。原创 2024-05-17 17:07:23 · 92 阅读 · 0 评论 -
Android 11 12 13耳机图标不显示问题解决方案以及整个图标显示流程
【代码】Android 11 12 13耳机图标不显示问题解决方案。原创 2024-04-30 10:05:16 · 587 阅读 · 1 评论 -
Android 14模块测试随机断电开关机压力后出现应用停止运行,报错:Apps may not schedule more than 150 distinct jobs
下一步找出这个任务id,根据最上面的日志找到CallLogConfigImpl类中的schedulePollingJob方法。然后在JobSchedulerService添加相关的打印信息进行压力测试,主要是看哪个任务id被启动了很多次。任务id为400的这个任务启动了很多次,都到了256个了,早早超过了150,所以会崩溃。为了防止这个任务的多次启动,我们可以在任务启动后不在继续添加新的任务。这个任务id就是400,所以和前面日志中看到的相吻合。最终是防止多次任务启动,如下。原创 2024-04-17 10:28:23 · 230 阅读 · 0 评论 -
Android 14 设置锁屏为NONE后开启双卡PIN锁,重启设备后,输完卡1的PIN码就进入了安卓界面,未提示输入卡2的PIN码
可以看出来当前的securityMode 不是SecurityMode.None但是mLockPatternUtils.isLockScreenDisabled(KeyguardUpdateMonitor.getCurrentUser())为true,所以会设置当前的finish为true。当finish为true会调用到callback的finish中,此方法就是会关闭当前的PIN码输入的窗口。然后当当前的sim卡准备好了并且在当前的锁为无锁状态下关闭当前锁屏界面。如上就完成了对此bug的修复。原创 2024-03-05 13:45:00 · 355 阅读 · 0 评论 -
Android 14源码单编卡在analyzing Android.bp中
Android14源码编译会卡住问题是内存占用太多了,需要64G内存,如果内存不够就会卡住很久,使用make单编也是同样卡住很久。这个也不会卡住,不过只能在单编中使用,整编不可行。解决方法一:内存条加到64G。这样单编整编都会很顺畅。原创 2024-02-20 11:37:46 · 593 阅读 · 3 评论 -
APN设置流程分析
2、进行delete操作时,TelephonyProvider通过URL_RESTOREAPN进行删除操作,会删除carriers表,同时删除首选APN,获取preferred-full-apn的SP,如果SP包含version1,表示apn已经存储起来了,删除该subId对应的version1字段以及APN唯一字段与subId组合在一起的字段,删除完成,重新初始化加载carrier表,然后我们分析APN的主要流程:重置APN流程、切换APN、新建APN、编辑APN。原创 2024-02-05 20:08:53 · 105 阅读 · 0 评论 -
网络选择流程分析(首选网络类型切换流程)
对应的入口源码位置在Settings的UniEnabledNetworkModePreferenceController中,当然其他平台可能在PreferredNetworkModePreferenceController中,流程上都是大同小异。然后点击切换按钮会调用到UniEnabledNetworkModePreferenceController的onPreferenceChange方法。中发送指令,至此从应用层到framework层到Modem层的流程就完成了。此方法中主要看圈出来的三个方法。原创 2024-02-05 16:00:28 · 588 阅读 · 0 评论 -
Android 13 Settings蓝牙列表卡顿问题排查及优化过程
此时我们的卡顿优化基本完成了,我们应该要考虑内存是否会泄漏,如果大家不知道哪些需要回收可以用leakcanary和android profiler进行内存检测,看代码有没有内存泄漏。原创 2023-12-07 17:06:45 · 1439 阅读 · 3 评论 -
Android 13 骁龙相机点击录像流程分析
录像的流程大概分为几个阶段:进行预览、点击开始录像(跳过)、点击按钮结束录像、数据库保存生成uri、根据uri保存左下角缩略图、将uri保存内存中、点击左下角进入相册,下面我们一步一步进行分析。原创 2023-10-11 15:11:38 · 863 阅读 · 0 评论 -
Android 13 骁龙相机点击拍照流程分析(二)——点击拍照到存入相册
Android 13 骁龙相机点击拍照流程分析(一)——点击拍照到更新到左下角缩略图-CSDN博客。原创 2023-10-09 16:39:42 · 1360 阅读 · 0 评论 -
Android 13 骁龙相机点击拍照流程分析(一)——点击拍照到更新到左下角缩略图
拍照的流程大概分为几个阶段:打开相机进行预览、点击按钮进行拍照、生成缩略图、生成图片并保存、数据库保存生成uri、点击左下角进入相册,下面我们一步一步进行分析。原创 2023-10-09 14:53:39 · 1569 阅读 · 0 评论 -
Ubuntu编译Android源码报错files = files.strip().replace(ANDROID BUILD TOP,‘‘).split(‘\n‘)TypeError: a bytes
输入sudo update-alternatives .-config python。然后选择python版本。原创 2023-08-29 11:53:24 · 96 阅读 · 0 评论 -
Android 13 像Settings一样获取当前语言地区及多语言地区
用户需要定制获取到当前语言地区,类似与Settings那样,不过Settings获取的是当前添加的多个语言,本文会介绍当前的多个语言获取和只获取第一个语言。原创 2023-08-29 11:12:52 · 566 阅读 · 0 评论 -
【自定义系统服务】【android13】添加自定义java系统服务
Binder默认可以传输基本类型的数据,如果要传递类对象,则这个类需要实现序列化。我们先定义一个序列化的自定义类型,用于binder间参数传递。主要分为两步:创建自定义类型,实现Parcelable接口// 注意定义成员变量的顺序,后面读取和写入都必须按这个顺序// 注意定义成员变量的顺序@NonNullmAge = age;//@Override// 注意定义成员变量的顺序。原创 2023-08-18 13:22:50 · 573 阅读 · 0 评论 -
Android 13 像Settings一样开启关闭深色模式
由于客户定制的Settings需要开启关闭深色模式,所以需要自己调用开启关闭深色模式。原创 2023-08-16 15:00:10 · 763 阅读 · 0 评论 -
Android 13 开启关闭飞行模式
调用开启关闭飞行的api,具体主要是在AirplaneModeEnabler这个类中获取和开启关闭飞行模式,具体需要定义AirplaneModeEnabler类全局变量,然后初始化这个全局变量,并且在Activity生命周期中对这个变量进行相应的状态处理,而且需要从这个变量获取当前的飞行模式状态,最后还有一个飞行模式状态监听,不过这一步可以跳过。原创 2023-08-16 14:41:43 · 794 阅读 · 0 评论 -
Android 13 像Settings一样获取VPN信息
由于客户定制的Settings里面需要获取到VPN状态信息,所以需要实现此功能。原创 2023-08-16 13:53:06 · 846 阅读 · 0 评论 -
Android 13像Settings一样获取SIM卡信息
由于客户定制的Settings里面需要获取到SIM卡信息,所以需要实现此功能。原创 2023-08-16 13:46:56 · 533 阅读 · 0 评论 -
Android 13像Settings一样获取热点和网络共享
由于客户定制的Settings里面需要获取到热点和网络共享状态,所以需要实现此功能。上述文档的第三部第四步有详细介绍。原创 2023-08-16 13:37:19 · 554 阅读 · 0 评论 -
Android 13 Launcher——屏蔽上拉到应用列表
Launcher定制需要将原先的应用列表去掉,可以从根源去掉,就是将上拉出现应用列表的上拉手势直接屏蔽,让其不能上拉出现应用列表界面,在研究的过程中顺便将下拉出现负一屏的逻辑也研究了下,如下就是具体实现。如果需要拦截让其不上拉出现应用列表可以修改成如下代码即可。原创 2023-08-14 20:43:13 · 866 阅读 · 0 评论 -
Android 13 Launcher——如何区分长按图标是hotseat还是Launcher还是应用列表中的
由于当前有个定制Launcher需求需要长按图标的ui效果根据在不同的布局(hotseat、Launcher、应用列表)中不一样,所以需要区分长按图标是Hotseat还是Launcher中还是在应用列表中,如下就是如何进行区分。如上定制的实现是在Launcher中和应用列表中弹框与在Hotseat中弹框的内容不一样的,具体效果如下,此处只说的是三者的区别,具体弹框逻辑这里没有。原创 2023-08-14 16:31:04 · 478 阅读 · 0 评论 -
Android 13 Launcher——屏蔽长按非icon区域出现弹窗
长按Launcher非icon区域也是会有弹窗的,会显示小组件等信息,定制开发要求长按非icon区域不要弹窗,我们来实现此功能,先看下未修改前的长按非icon区域的效果。如上图可以看出长按功能显示出壁纸、微件、主屏幕设置这些内容。实现效果是长按不会出现任何内容了。原创 2023-08-08 20:21:36 · 618 阅读 · 0 评论 -
Android 13 Launcher——长按图标弹窗背景变暗
主要代码逻辑在ArrowPopup中的reorderAndShow方法和closeComplete方法中,其中reorderAndShow方法是为了让其显示的时候背景变暗,closeComplete方法是为了在弹窗关闭的时候背景恢复。客户定制需要长按图标弹窗让其背景变暗,所以需要进行定制,如下是定制流程,本篇是接上篇。修改后的效果图如下所示,可以看出背景效果了。原创 2023-08-08 17:23:34 · 635 阅读 · 0 评论 -
Android 13 Launcher——长按图标弹窗内容修改以及小组件等隐藏起来
由于定制化开发需要将原先的长按图标原生弹窗界面隐藏,然后显示自定义的弹窗界面,如下就是我们来实现自定义的弹窗界面。然后运行代码此时就是可以看到我们自定义的布局文件了,这里我就不演示了,到最后一起演示。实现思路是在布局文件中加入自定义的弹窗布局,然后在代码中隐藏原先的布局内容。原创 2023-08-08 17:13:14 · 2074 阅读 · 0 评论 -
Android 13 Launcher界面——移除Launcher的删除和卸载功能
可以看出主要是有三处需要修改的,首先是功能屏蔽,将移除功能和卸载功能关闭,然后是UI界面中隐藏Remove和Uninstall按钮,最后需要注意的是落点到Uninstall和Remove时是有个图标编写的动画的,为了最佳用户体验,可以将这个变小动画也去掉。下面我们就从这三个方面来进行实践。由于Launcher定制开发,需要自定义删除和卸载功能,将拖动图标进行删除和卸载应用的功能去除,下图是原生的删除和卸载功能,是正在拖动中的图和卸载进行时的图。修改后的效果如下所示,可以看出是没有图标变小的效果了。原创 2023-08-08 16:16:21 · 1370 阅读 · 0 评论 -
Android 13 Hotseat定制化修改——005 hotseat图标禁止形成文件夹
由于需求是需要自定义修改Hotseat,所以此篇文章是记录如何自定义修改hotseat的,应该可以覆盖大部分场景,修改点有修改hotseat布局方向,hotseat图标数量,hotseat图标大小,hotseat布局位置,hotseat图标禁止形成文件夹,hotseat图标禁止移动到Launcher中,本篇介绍如何实现hotseat图标禁止形成文件夹。原创 2023-08-08 13:51:17 · 642 阅读 · 0 评论 -
Android 13 Hotseat定制化修改——004 hotseat布局位置
由于需求是需要自定义修改Hotseat,所以此篇文章是记录如何自定义修改hotseat的,应该可以覆盖大部分场景,修改点有修改hotseat布局方向,hotseat图标数量,hotseat图标大小,hotseat布局位置,hotseat图标禁止形成文件夹,hotseat图标禁止移动到Launcher中,此处介绍hotseat布局位置修改。然后修改代码,代码中主要是确定Hotseat的位置及宽高。原创 2023-08-08 13:48:08 · 928 阅读 · 0 评论 -
Android 13 Hotseat定制化修改——003 hotseat图标大小修改
由于需求是需要自定义修改Hotseat,所以此篇文章是记录如何自定义修改hotseat的,应该可以覆盖大部分场景,修改点有修改hotseat布局方向,hotseat图标数量,hotseat图标大小,hotseat布局位置,hotseat图标禁止形成文件夹,hotseat图标禁止移动到Launcher中,本篇来介绍下hotseat图标大小修改。原创 2023-08-08 13:41:03 · 890 阅读 · 0 评论 -
Android 13 Hotseat定制化修改——002 hotseat图标数量修改
由于需求是需要自定义修改Hotseat,所以此篇文章是记录如何自定义修改hotseat的,应该可以覆盖大部分场景,修改点有修改hotseat布局方向,hotseat图标数量,hotseat图标大小,hotseat布局位置,hotseat图标禁止形成文件夹,hotseat图标禁止移动到Launcher中,本篇来介绍下Hotseat图标数量修改。hotseat的图标数量是根据设备分辨率来灵活分配的,但是如果有需求需要固定hotseat的图标数量怎么办呢。原创 2023-08-08 13:35:58 · 918 阅读 · 0 评论 -
Android 13 Hotseat定制化修改——001 hotseat布局方向
由于需求是需要自定义修改Hotseat,所以此篇文章是记录如何自定义修改hotseat的,应该可以覆盖大部分场景,修改点有修改hotseat布局方向,hotseat图标数量,hotseat图标大小,hotseat布局位置,hotseat图标禁止形成文件夹,hotseat图标禁止移动到Launcher中,下面开始一一介绍实现方式。第二种方式是直接修改DeviceProfile类中的isVerticalBarLayout方法让其全局修改成横屏或者竖屏,如下是修改成横屏方式,修改成hotseat效果和上面一样。原创 2023-08-08 13:23:31 · 839 阅读 · 0 评论 -
Android 13 Hotseat定制化修改——006 hotseat图标禁止移动到Launcher中
如上修改后可以看出hotseat中的图标就不会移动出去了,如果需要定制化启动的模块,比如Launcher的图标滑动方式和区域,也可以在上述两个方法中进行修改即可。思路:在事件拦截的地方判断是否触摸的开始位置在Hotseat区域,如果是在Hotseat区域然后在事件监听的地方进行特殊处理,让其不能移动到Hotseat区域外。原生的Hotseat与Launcher是可以相互移动的,然后现在的需求是Hotseat中的图标只能在Hotseat中移动,所以需要做下限制。原创 2023-08-08 13:15:41 · 752 阅读 · 0 评论 -
Android 13 Hotseat定制化修改
由于需求是需要自定义修改Hotseat,所以此篇文章是记录如何自定义修改hotseat的,应该可以覆盖大部分场景,修改点有修改hotseat布局方向,hotseat图标数量,hotseat图标大小,hotseat布局位置,hotseat图标禁止形成文件夹,hotseat图标禁止移动到Launcher中,下面开始一一介绍实现方式。先看下目前的Launcher中hotseat显示方向。原创 2023-08-08 11:34:43 · 1005 阅读 · 1 评论 -
Android13 Launcher界面关闭google搜索框
由于定制化Launcher开发中的一个需求是需要实现将Launcher中的google搜索框去掉,所以需要实现关闭google搜索框操作。原创 2023-08-05 16:34:32 · 788 阅读 · 0 评论 -
OpenHarmony系统应用开发流程(编译full sdk并替换)
public-SDK是提供给应用开发的工具包,跟随DevEco Studio下载,不包含系统应用所需要的高权限APIfull-SDK是提供给OEM厂商开发应用的工具包,不能随DevEco Studio下载,包含了系统应用所需要的高权限API三方开发者通过DevEco Studio自动下载的API8版本SDK均为public版本。public-SDK不支持开发者使用所有的系统API。原创 2023-07-22 17:13:47 · 442 阅读 · 0 评论 -
Android Settings下划线变成黑块问题修复(修改自定义样式下划线)
在app模块的drawable目录下新建分割线的xml文件,如下是自定义分割线的shape文件内容---->原创 2023-07-04 20:57:41 · 174 阅读 · 0 评论 -
Android 应用自动开启辅助(无障碍)功能并使用辅助(无障碍)功能
由于最近的项目需要开启无障碍功能然后实现对应的功能需求,但是由于需求是需要安装后就开启辅助功能,不要在繁琐的在设置中开启辅助功能,所以需要如何在应用中开启辅助功能。原创 2023-06-28 11:35:29 · 2317 阅读 · 0 评论 -
005 Settings可以直接通过AndroidStudio安装并调试(二)——Settings 打release包遇到的问题
Settings迁移到AndroidStudio中直接打release包是有各种问题的,打不出来包,这里我们详细来描述下Settings打包出现的问题及解决方案。首先遇到的拦路虎,也是最繁琐的包名冲突,之前说过在AndroidStudio新版本会有这个问题,但是这里打release包也还是有这个问题,不得不正面面对。的模块内容(主要是res文件和src文件以及gradle依赖的内容)放到这个新的模块中,需要把所有的包名为。解决方案:新建一个包名为。解决方案保留一个即可。原创 2023-06-21 16:02:05 · 1066 阅读 · 0 评论