- 博客(386)
- 收藏
- 关注
原创 Android 13 骁龙相机点击拍照流程分析(二)——点击拍照到存入相册
Android 13 骁龙相机点击拍照流程分析(一)——点击拍照到更新到左下角缩略图-CSDN博客。
2023-10-09 16:39:42
2024
原创 OpenHarmony与HarmonyOS联系与区别
HarmonyOS 是华为是基于 OpenHarmony、AOSP等开源项目开发的面向多种全场景智能设备的商用版本,所以HarmonyOS包含OpenHarmony,如果将OpenHarmony理解成地基,则HarmonyOS则是在这个地基基础上修建的精装房。开篇就说“关于‘鸿蒙操作系统’,由于缺乏规范的表述和统一的口径,导致内部理解不一致、对外说法不一致,容易引起混淆,所以此篇是专门说一下OpenHarmony与HarmonyOS的区别的。当我们在说“鸿蒙”的时候,也许就是指鸿蒙生态。
2023-07-21 16:04:54
19504
6
原创 001 Android13将Settings移植到AndroidStudio中(一)
首先环境,最好用我上面的AndroidStudio版本及gradle配置将代码整编得到out产物如下图内容复制到AndroidStudio的Settings对应目录下面复制后对应的Settings项目中如下:注意values可以按照需要保存相应的文件夹,我这边是只保留默认的values和中文的values的其实这些步骤也可以放到最后将所有模块导入差不多了在做Settings模块,不然会有很多报错,这里我暂时不说Settings的gradle配置的了,这些都放到最后来说。
2023-05-24 16:12:39
3041
7
原创 一篇文章彻底理解自定义View
对应标签。容易引起oom继承系统的TextView,实现在文字中间加一条横线}}}}) {canvas?}}可以看见文字中间是有一条横线的①.简单实现一个矩形的绘制}}}}) {canvas?}}添加自定义属性,添加自定义背景色先在values目录下面创建attrs.xml,添加自定义属性然后在代码中获取自定义属性,注意获取的资源要回收}//获取自定义属性对应的组名称//获取自定义属性//注意资源需要回收}}}
2022-12-02 17:37:45
2114
原创 flutter_easyrefresh 加载多次问题修复
flutter_easyrefresh是一个下拉刷新上拉加载的插件,具体我就不介绍了,这里主要是解决flutter_easyrefresh的bug,主要我在用此插件的时候遇到如下两个问题:①.上拉加载最后的footer不消失②.加载少量数据出现多次加载现象解决方案第一个问题现象如下,就是加载过程中在数据不能占满整个界面的时候footer是不会自动消失的解决方案:加载完成延时一...
2020-04-17 01:32:06
5900
6
原创 深入解析 Android Automotive (AAOS) 启动流程与 CarService 核心机制(基于 Android 16 最新源码视角)
在Android Automotive OS(AAOS)中,CarService是连接上层应用(Cars App/System UI)和底层车载硬件抽象层(Vehicle HAL,简称VHAL)的核心纽带。
2026-08-01 21:06:11
383
原创 Android车载开发入门(零基础小白入门款)
本文是一篇车载系统开发入门指南,主要面向有一定Android基础的开发者。文章首先将汽车比作由多个ECU(电子控制单元)组成的"超级电脑",每个ECU负责特定功能控制。重点解析了车载系统的核心组件:Android系统主要负责信息娱乐功能,真正控制车辆的是ECU;CAN总线作为"汽车内部微信群"实现各模块通信;MCU和SOC的分工协作机制;QNX系统在安全关键领域的应用等。文章还对比了AndroidAuto与AndroidAutomotive的区别,详细介绍了车载And
2026-07-30 16:38:48
389
原创 RK Android16 wifi 投屏失败问题排查
摘要:RK3576设备投屏电脑失败,经排查发现是RTSP协商报文错误导致的帧率不匹配问题。日志分析显示设备错误地发送了720p24帧的请求(idx=15),而底层编码器实际输出30帧,导致电视拒绝连接。通过在Framework层修改WifiDisplaySource.cpp,将协商帧率从24帧改为30帧(idx=5改为idx=15)后问题解决。RTSP协议在投屏中负责控制指令协商(如格式、端口等),而RTP协议负责实际数据传输,两者的不匹配会造成投屏失败。
2026-07-26 19:32:37
104
原创 linux 蓝牙调试相关指令
pair解决了“两台设备互相认不认识、数据传不传输”的问题(安全加密)。trust解决了“未来耳机开机,能不能自动连回板子”的问题(自动化回连)。在编写嵌入式开机自动连接、或者自动化量产测试脚本时,强烈建议依然保留 trust <MAC> 这一步。这能确保您的开发板在无人值守、没有屏幕交互的情况下,100% 能够稳定地接受耳机的自动回连请求。
2026-07-23 13:49:05
172
转载 Beyond Compare 30天评估到期 解决方法
用于方便自己找到所以拷贝过来的Beyond Compare 30天评估到期 解决方法一、问题二、解决办法2.1 第一步:打开注册表2.2 第二步:删除cacheID三、效果一、问题Beyond Compare提示评估到期,重装也无效,只需简单两步,轻轻松松出困境。二、解决办法修改注册表,操作步骤如下2.1 第一步:打开注册表win + r 打开命令行,输入regedit,确定后,弹出 “注册表编辑” 窗口,
2026-07-15 19:14:33
38
原创 Android 完成wifi热点开启后重启自动开启状态
本文针对按摩椅设备的WiFi热点功能需求,提出并实现了保持热点状态持久化的解决方案。主要修改包括:1)在Tethering.java中新增热点状态保存与恢复功能,通过SharedPreferences持久化存储热点开关状态,并在系统重启后自动恢复;2)禁用原生系统的无连接自动关闭热点功能,修改SoftApManager.java将超时检测逻辑强制设为false;3)在设置界面隐藏自动关闭选项,将WifiTetherAutoOffPreferenceController的可用性改为UNSUPPORTED_ON
2026-06-26 11:35:01
99
原创 Android 蓝牙开启关闭卡顿问题优化
由于底层的优化空间很小,所以这里我们的思路是从上层进行优化,让其界面看起来很流畅,并且如果在开启或者关闭的过程中不下发状态给到底层,在开启或者关闭完成后,在下发一次最终的状态,如下是patch。由于蓝牙的开启和关闭的过程都是底层传递上来状态才会真正开启和真正关闭,根据设备性能不同,开启时间2秒到4秒不等,在快速开启和关闭的过程中就会感到卡顿。
2026-06-12 16:04:25
220
原创 android wifi基础知识小白入门款
802.11是wifi的技术标准(协议),规定了无线网络是如何通信的可以理解:wifi是商品名称,802.11是技术标准就像:USB是商品名称,USB2.0、USB3.0、USB4是技术标准同理:802.11 n、802.11 ac、802.11 ax是不同版本的技术标准频段可以理解为:WiFi工作中的“大马路”频段特点2.4GHz覆盖远,穿墙强5GHz速度快,延迟低6GHz更快,干扰少类比:2.4GHz = 普通国道5GHz = 城市快速路6GHz = 新建高速公路。
2026-06-12 15:31:42
587
原创 git相关操作
要将新的修改同步到当前 Gerrit 上已有的待合入提交中(即生成该提交的新版本 Patch Set),您需要使用 Git 的 --amend(追加/修改)功能。请按照以下步骤操作:第一步:确保本地处于该提交的代码状态如果您本地的当前分支和提交正是这个修改,可以直接进行第二步。如果本地代码已经变动,建议先将该 Gerrit 提交的代码拉取到本地:1. 在 Gerrit 网页上点击该提交,进入详情页。2. 点击右上角(或右上侧面)的 Download 按钮。
2026-05-20 20:01:10
458
原创 优化android14低内存设备连接蓝牙键盘/鼠标后点击Disconnect断开蓝牙连接,页面卡顿(将1180ms优化到629ms)
其实发现在内存低的设备上整体都是比较卡卡的状态,所以有一些稍微更加卡顿的界面就会凸显出来,其实代码都是google的android 14源码,主要就是设备的区别,然后我们来分析下这种问题怎么处理。在ST进行测试的过程中,发现在连接蓝牙键盘和鼠标并在设备详情界面断开连接的时候页面有卡顿现象,这里不方便展示,就是在蓝牙的设备详情界面,然后点击断开会有卡顿现象。可以看出来在断开蓝牙的过程中居然界面重新启动了,这肯定是会耗时很多的,然后我们在看看有没有其他异常信息。开始断开:04-09 20:14:21.610。
2026-05-20 19:39:20
361
原创 OpenHarmony 5.0.3 reboot wifi测试一段时间后,打开wifi返回后还是关闭状态(这是一个 CFI(控制流完整性) 检查失败,系统为了防止潜在的内存破坏或攻击,直接强制终止了)
目录一.背景二.整体分析流程1. 核心故障:底层服务崩溃 (Critical Crash)三.解决方案OpenHarmony设备内部压测过程中发现在reboot wifi启动后wifi是关闭状态由于是OH系统,坑还是比较多的,所以此处记录主要是记录这个排查流程遇到的所有的坑,以及如何通过分析和借助AI工具完成此问题的修复首先根据ST之前的测试记录以及日志进行排查,由于日志只有重启前的,没有重启后的,所以不知道为什么重启后wifi关闭了,不过在ST测试记录中有这一句引起注意:runtime error: co
2026-05-01 14:56:04
103
原创 Android 完成一款类似于影石360或者大疆的360度全景功能,并支持放大缩小以及手势移动
输入端:手势捕捉(你的代码1) + 陀螺仪传感器。逻辑端:PanoPlayerActivity + PanoViewWrapper 管理所有组件,根据用户操作改变状态。调度端:PanoRender(你的代码3)拿着状态,指挥流水线。渲染端:Sphere2DPlugin(你的代码2)拿到最终指令,用数学矩阵将 3D 全景世界呈现在手机屏幕上。
2026-04-07 21:15:10
310
5
原创 强制完全横屏(基于Android13)
本文提出了一种强制锁定所有应用为横屏显示的解决方案,以解决Launcher在横竖屏切换时出现的显示异常问题。通过修改Android系统框架代码,主要包括:1) 移除config_allowAllRotations配置;2) 设置默认旋转角度为90度(横屏);3) 在DisplayRotation.java中强制返回ROTATION_90并跳过用户旋转设置。该方案完全禁用了竖屏显示功能,确保所有应用始终以横屏模式运行,从而避免了因横竖屏切换导致的Launcher崩溃和显示异常问题。相比原先允许个别应用修改为竖
2026-04-07 14:14:02
153
原创 wifi相关查询指令
接口名称角色状态详细信息wlan12.4G 热点运行中信道 1, 带宽 20MHzwlan25G 热点运行中信道 64, 带宽 80MHzwlan0Wi-Fi 客户端空闲, 功率 0dBm (说明你已按建议断开了外部 Wi-Fi)根据你提供的iw list,这块芯片(推测为高通WCN6856档次高端 Wi-Fi 6/6E 芯片。杀手锏:支持DBS (双频并发),可以做到一边连着 5G Wi-Fi,一边开着 2.4G 热点,或者同时开启 2.4G+5G 桥接热点。性能:支持160MHz。
2026-03-30 15:10:15
167
原创 使用Perfetto进行Settings中网络热点开启后anr分析的整体流程记录
摘要:本文介绍了使用Perfetto工具分析Android设置中热点功能卡死ANR问题的完整流程。通过命令行抓取包含CPU调度、Binder通信等关键数据的Trace文件,发现主线程阻塞在SubSettings初始化,同时dnsmasq进程占用大量CPU资源。结合日志分析发现TetherOffload HAL服务启动失败,导致网络子系统异常。最终通过修复TetherOffload HAL层逻辑解决了该问题。整个排查过程展示了如何结合Perfetto可视化分析和日志定位系统级性能问题的方法论。
2026-03-26 14:22:17
527
原创 Android 13 将移植到AndroidStudio 的Launcher apk替换掉源码中的Launcher,让其预置到系统中
之前说了很多关于Launcher移植定制等系列,最终定制的Launcher还是需要预置到系统中,这篇我们说下Launcher如何预置到系统中。上述问题说明上面的权限文件privapp-permissions-custom.xml没有配置,或者没有配置齐全,再按照上述的配置仔细核对下。3.在该目录下privapp-permissions-custom.xml文件,如下是文件内容。2.将您的 APK 文件放入该目录,重命名为。这里我是参考原先的Launcher中的内容,如下是参考位置。
2026-03-05 19:57:21
142
原创 Android 13定制桌面应用列表
本文介绍了Android Launcher定制中实现单层桌面布局的两种关键修改:1.将所有应用展示到桌面中:修改LoaderTask.java的run()方法,调整应用加载顺序,在显示桌面前完成所有应用的加载,并通过addMissingIconsToModel()方法将缺失应用补全到数据库和内存模型中;2.禁用应用拖拽功能:通过修改Workspace的beginDragShared()方法,保留长按弹窗功能但返回null来阻止拖拽操作。这些修改实现了客户要求的单层桌面布局需求,所有应用直接展示在桌面且位置固
2026-03-04 17:32:00
125
原创 Android 13 Launcher强制横屏后点击应用在切换回来报错DoubleShadowBubbleTextView, size -64x128
添加如上代码即可修复,如下是完整的DoubleShadowBubbleTextView内容。DoubleShadowBubbleTextView的宽度出现了负数,导致绘制失败。由于定制Launcher需要横屏显示,如下是强制横屏的流程。
2026-03-04 10:08:41
108
原创 如何将设置默认设置成横屏(基于Android 13修改)
一般设备默认是竖屏的,但是有些需求需要修改成横屏,修改横屏需要考虑多种情况,所以这里我整理下最适配的最兼容的修改成横屏的方式。
2026-02-28 15:01:09
266
原创 android 13 Launcher中应用列表数量,大小如何控制的?
由于需要定制Launcher UI,其中应用列表数量和设备匹配度是一个不好把握的度,有时候这个设备应用列表匹配上了,另一个设备可能就匹配错误了,所以今天我们讲一下如何将当前设置的应用列表的行数、列数精确匹配到当前设备上,并且做到不影响或者说尽可能小的影响其他设备应用列表显示。然后比如我们当前设备如何匹配上的,需要看下屏幕尺寸,注意这里的尺寸是dp位单位的,所以我们要得到设备的分辨率以及屏幕密度进行计算,这两个参数用adb都能获取到。# 屏幕宽度 dp = 1080 / 2.75 ≈ 392 dp。
2026-02-13 17:10:45
967
原创 android 13 Launcher隐藏hotseat(底部图标)
其实就是将宽高设置为0,此时我们install安装是有效果的,但是我发现重启后hotseat又出来了,然后我就在hotseat设置的地方测量的位置给设置成0,这样就完全可以了,在Hotseat类中。由于车载定制化需求有各种修改,首先是不需要底部的hotseat,由于当时尝试直接隐藏hotseat没有效果,所以这里我来记录下怎么去掉hotseat。其实就是在测量的位置将宽高设置成0,这样就完全可以了。
2026-02-13 16:26:49
271
原创 Android 13将Launcher移植到AndroidStudio流程二
本文记录了在Android 13上移植Launcher时遇到的几个关键问题及解决方案:1)找不到@style/HomeSettingsTheme时改为使用HomeSettings.Theme;2)处理launcher_log_protos_lite.jar与launcher_quickstep_log_protos_lite.jar冲突时通过修改jar包内容解决;3)解决Thread.getUncaughtExceptionPreHandler()隐藏API调用问题;4)处理SystemUIAnimatio
2026-02-10 11:50:15
484
原创 Android 13将Launcher移植到AndroidStudio流程一
这里我们直接开干,直接开始移植,这次移植的系列我会尽可能的详细,带着更加深刻的理解出发。
2026-02-03 19:19:01
392
原创 图像显示框架十三——BufferQueue的工作流程(基于Android 15源码分析)
指出了是一个“状态更新+条件触发”的过程,其核心是更新中的状态机。真正意义上的释放 是指缓冲区从ACQUIRED状态成功迁移到FREE状态,并被加入到空闲缓冲区集合中。随后通过回调通知生产者,从而完成一个“释放-申请-使用”的完整循环。
2026-01-31 20:23:58
1132
1
原创 图像显示框架十二——BufferQueue的工作流程(基于Android 15源码分析)
本文分析了Android图形系统中消费者端的回调机制。当生产者通过BufferQueueProducer::queueBuffer将缓冲区加入队列后,会通过frameAvailableListener通知消费者。该监听器实际上是ConsumerBase实例,通过BufferQueueConsumer::connect设置。回调流程为:生产者入队缓冲区→触发onFrameAvailable回调→通知消费者获取新数据。关键点在于BufferQueueCore维护的mConsumerListener在Consum
2026-01-29 20:27:46
912
原创 图像显示框架十一——BufferQueue的工作流程(基于Android 15源码分析)
本文主要聚焦生产者一端的处理逻辑,分析了如何获取buffer以及填充数据后返还buffer的流程。下一篇来介绍消费者一端的处理逻辑。
2026-01-29 17:15:58
1076
1
原创 图像显示框架十——BufferQueue的工作流程(基于Android 15源码分析)
源码定义BufferSlot理解为缓冲槽,一个存放buffer及其信息的地方。这个结构体中主要有如下内容:源码:/frameworks/native/libs/gui/include/gui/BufferSlot.h如下是BufferState的源代码// BufferState 追踪缓冲区槽位可能处于的状态。// 构造函数:所有槽位最初都是 FREE 状态(空闲): mDequeueCount(0), // 出队计数mQueueCount(0), // 入队计数。
2026-01-26 19:53:06
1147
原创 图像显示框架九——Surface/SurfaceControl基础概念(基于Android15源码分析)
代码位置:framework/native/libs/nativewindow/include/system/window.h// 构造函数:初始化 magic number、版本号及各类窗口属性默认值// 魔术字,用于类型验证// 结构体版本// 保留字段置零// 以下两个函数实现了引用计数功能,使 ANativeWindow 可由 sp<> (强指针) 自动管理生命周期#endif。
2026-01-22 16:52:58
1739
原创 图像显示框架八——BufferQueue与BLASTBufferQueue(基于android 15源码分析)
构造函数完成后,已经准备好作为一个**“中间人”:向上提供Surface让应用绘图,向下将绘图结果转换为提交给系统,从而实现同步**的图形更新。然后再看下createBufferQueue函数代码/*** 创建 BufferQueue 的生产者和消费者接口* @param outProducer 输出参数,用于存放创建好的生产者句柄* @param outConsumer 输出参数,用于存放创建好的消费者句柄*/
2026-01-21 10:02:38
1406
原创 adb常用指令
抓取所有日志(推荐)这是最常用的命令,可一次性捕获main(主应用日志)、system(系统日志)、radio(RIL日志)和events(系统事件)四大缓冲区的日志,并按时间戳(-v time)交织排序,便于分析事件序列。
2026-01-16 09:58:20
414
原创 Android应用程序 c/c++ 崩溃排查流程三——ndk-stack工具使用
摘要:Android开发中遇到C/C++代码崩溃时,ndk-stack工具能有效解析调用栈定位问题。该工具位于NDK目录下,可通过命令adb logcat | ndk-stack.cmd -sym [so文件路径]使用,自动生成包含完整调用链路的详细报告,比addr2line工具更高效直观,帮助开发者快速定位异常位置。(98字)
2026-01-07 19:34:31
605
原创 Android应用程序 c/c++ 崩溃排查流程二——AddressSanitizer工具使用
摘要:本文介绍了在Android应用中集成AddressSanitizer(ASan)工具来检测C/C++内存问题的方法。针对Scudo内存分配器检测到的内存块头部损坏问题,文章详细说明了ASan工具的集成步骤:修改AndroidManifest.xml和gradle配置,添加wrap.sh脚本,以及集成ASan动态库。最后展示了如何使用ASan日志和addr2line工具定位具体的内存错误位置,如检测到试图释放栈上局部变量的无效操作。该方法能有效帮助开发者诊断内存越界写入、释放已释放内存等常见问题。
2026-01-07 19:16:18
1384
原创 图像显示框架七——createSurface的流程(基于Android 15源码分析)
<--2. onFirstRef()回调-------------------------------------||<--6. 返回ISurfaceComposer代理----------------------------||<--10. 返回ISurfaceComposerClient代理---------------------||---11. 保存到mClient成员--------------------------------->|然后再来看下createSurfaceChecked方法。
2025-12-20 20:35:53
1347
1
OpenHarmony 5.1.0 full sdk公版的native-windows-x64-5.1.0.107-Release部分
2025-05-23
OpenHarmony 5.1.0 full sdk公版的previewer-windows-x64-5.1.0.107-Release部分,注意此处是解压替换的路径和之前的不一致
2025-05-23
OpenHarmony 5.1.0 full sdk公版的js-windows-x64-5.1.0.107-Release部分
2025-05-23
OpenHarmony 5.1.0 full sdk公版的ets-windows-x64-5.1.0.107-Release部分
2025-05-23
OpenHarmony 5.1.0 full sdk公版的toolchains-windows-x64-5.1.0.107-Release部分
2025-05-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅