- 博客(380)
- 收藏
- 关注
原创 Android 13 骁龙相机点击拍照流程分析(二)——点击拍照到存入相册
Android 13 骁龙相机点击拍照流程分析(一)——点击拍照到更新到左下角缩略图-CSDN博客。
2023-10-09 16:39:42
1963
原创 OpenHarmony与HarmonyOS联系与区别
HarmonyOS 是华为是基于 OpenHarmony、AOSP等开源项目开发的面向多种全场景智能设备的商用版本,所以HarmonyOS包含OpenHarmony,如果将OpenHarmony理解成地基,则HarmonyOS则是在这个地基基础上修建的精装房。开篇就说“关于‘鸿蒙操作系统’,由于缺乏规范的表述和统一的口径,导致内部理解不一致、对外说法不一致,容易引起混淆,所以此篇是专门说一下OpenHarmony与HarmonyOS的区别的。当我们在说“鸿蒙”的时候,也许就是指鸿蒙生态。
2023-07-21 16:04:54
19314
6
原创 001 Android13将Settings移植到AndroidStudio中(一)
首先环境,最好用我上面的AndroidStudio版本及gradle配置将代码整编得到out产物如下图内容复制到AndroidStudio的Settings对应目录下面复制后对应的Settings项目中如下:注意values可以按照需要保存相应的文件夹,我这边是只保留默认的values和中文的values的其实这些步骤也可以放到最后将所有模块导入差不多了在做Settings模块,不然会有很多报错,这里我暂时不说Settings的gradle配置的了,这些都放到最后来说。
2023-05-24 16:12:39
2971
7
原创 一篇文章彻底理解自定义View
对应标签。容易引起oom继承系统的TextView,实现在文字中间加一条横线}}}}) {canvas?}}可以看见文字中间是有一条横线的①.简单实现一个矩形的绘制}}}}) {canvas?}}添加自定义属性,添加自定义背景色先在values目录下面创建attrs.xml,添加自定义属性然后在代码中获取自定义属性,注意获取的资源要回收}//获取自定义属性对应的组名称//获取自定义属性//注意资源需要回收}}}
2022-12-02 17:37:45
2048
原创 flutter_easyrefresh 加载多次问题修复
flutter_easyrefresh是一个下拉刷新上拉加载的插件,具体我就不介绍了,这里主要是解决flutter_easyrefresh的bug,主要我在用此插件的时候遇到如下两个问题:①.上拉加载最后的footer不消失②.加载少量数据出现多次加载现象解决方案第一个问题现象如下,就是加载过程中在数据不能占满整个界面的时候footer是不会自动消失的解决方案:加载完成延时一...
2020-04-17 01:32:06
5868
6
原创 Android 蓝牙开启关闭卡顿问题优化
由于底层的优化空间很小,所以这里我们的思路是从上层进行优化,让其界面看起来很流畅,并且如果在开启或者关闭的过程中不下发状态给到底层,在开启或者关闭完成后,在下发一次最终的状态,如下是patch。由于蓝牙的开启和关闭的过程都是底层传递上来状态才会真正开启和真正关闭,根据设备性能不同,开启时间2秒到4秒不等,在快速开启和关闭的过程中就会感到卡顿。
2026-06-12 16:04:25
161
原创 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
459
原创 git相关操作
要将新的修改同步到当前 Gerrit 上已有的待合入提交中(即生成该提交的新版本 Patch Set),您需要使用 Git 的 --amend(追加/修改)功能。请按照以下步骤操作:第一步:确保本地处于该提交的代码状态如果您本地的当前分支和提交正是这个修改,可以直接进行第二步。如果本地代码已经变动,建议先将该 Gerrit 提交的代码拉取到本地:1. 在 Gerrit 网页上点击该提交,进入详情页。2. 点击右上角(或右上侧面)的 Download 按钮。
2026-05-20 20:01:10
393
原创 优化android14低内存设备连接蓝牙键盘/鼠标后点击Disconnect断开蓝牙连接,页面卡顿(将1180ms优化到629ms)
其实发现在内存低的设备上整体都是比较卡卡的状态,所以有一些稍微更加卡顿的界面就会凸显出来,其实代码都是google的android 14源码,主要就是设备的区别,然后我们来分析下这种问题怎么处理。在ST进行测试的过程中,发现在连接蓝牙键盘和鼠标并在设备详情界面断开连接的时候页面有卡顿现象,这里不方便展示,就是在蓝牙的设备详情界面,然后点击断开会有卡顿现象。可以看出来在断开蓝牙的过程中居然界面重新启动了,这肯定是会耗时很多的,然后我们在看看有没有其他异常信息。开始断开:04-09 20:14:21.610。
2026-05-20 19:39:20
346
原创 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
72
原创 Android 完成一款类似于影石360或者大疆的360度全景功能,并支持放大缩小以及手势移动
输入端:手势捕捉(你的代码1) + 陀螺仪传感器。逻辑端:PanoPlayerActivity + PanoViewWrapper 管理所有组件,根据用户操作改变状态。调度端:PanoRender(你的代码3)拿着状态,指挥流水线。渲染端:Sphere2DPlugin(你的代码2)拿到最终指令,用数学矩阵将 3D 全景世界呈现在手机屏幕上。
2026-04-07 21:15:10
278
5
原创 强制完全横屏(基于Android13)
本文提出了一种强制锁定所有应用为横屏显示的解决方案,以解决Launcher在横竖屏切换时出现的显示异常问题。通过修改Android系统框架代码,主要包括:1) 移除config_allowAllRotations配置;2) 设置默认旋转角度为90度(横屏);3) 在DisplayRotation.java中强制返回ROTATION_90并跳过用户旋转设置。该方案完全禁用了竖屏显示功能,确保所有应用始终以横屏模式运行,从而避免了因横竖屏切换导致的Launcher崩溃和显示异常问题。相比原先允许个别应用修改为竖
2026-04-07 14:14:02
122
原创 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
144
原创 使用Perfetto进行Settings中网络热点开启后anr分析的整体流程记录
摘要:本文介绍了使用Perfetto工具分析Android设置中热点功能卡死ANR问题的完整流程。通过命令行抓取包含CPU调度、Binder通信等关键数据的Trace文件,发现主线程阻塞在SubSettings初始化,同时dnsmasq进程占用大量CPU资源。结合日志分析发现TetherOffload HAL服务启动失败,导致网络子系统异常。最终通过修复TetherOffload HAL层逻辑解决了该问题。整个排查过程展示了如何结合Perfetto可视化分析和日志定位系统级性能问题的方法论。
2026-03-26 14:22:17
477
原创 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
124
原创 Android 13定制桌面应用列表
本文介绍了Android Launcher定制中实现单层桌面布局的两种关键修改:1.将所有应用展示到桌面中:修改LoaderTask.java的run()方法,调整应用加载顺序,在显示桌面前完成所有应用的加载,并通过addMissingIconsToModel()方法将缺失应用补全到数据库和内存模型中;2.禁用应用拖拽功能:通过修改Workspace的beginDragShared()方法,保留长按弹窗功能但返回null来阻止拖拽操作。这些修改实现了客户要求的单层桌面布局需求,所有应用直接展示在桌面且位置固
2026-03-04 17:32:00
100
原创 Android 13 Launcher强制横屏后点击应用在切换回来报错DoubleShadowBubbleTextView, size -64x128
添加如上代码即可修复,如下是完整的DoubleShadowBubbleTextView内容。DoubleShadowBubbleTextView的宽度出现了负数,导致绘制失败。由于定制Launcher需要横屏显示,如下是强制横屏的流程。
2026-03-04 10:08:41
86
原创 如何将设置默认设置成横屏(基于Android 13修改)
一般设备默认是竖屏的,但是有些需求需要修改成横屏,修改横屏需要考虑多种情况,所以这里我整理下最适配的最兼容的修改成横屏的方式。
2026-02-28 15:01:09
241
原创 android 13 Launcher中应用列表数量,大小如何控制的?
由于需要定制Launcher UI,其中应用列表数量和设备匹配度是一个不好把握的度,有时候这个设备应用列表匹配上了,另一个设备可能就匹配错误了,所以今天我们讲一下如何将当前设置的应用列表的行数、列数精确匹配到当前设备上,并且做到不影响或者说尽可能小的影响其他设备应用列表显示。然后比如我们当前设备如何匹配上的,需要看下屏幕尺寸,注意这里的尺寸是dp位单位的,所以我们要得到设备的分辨率以及屏幕密度进行计算,这两个参数用adb都能获取到。# 屏幕宽度 dp = 1080 / 2.75 ≈ 392 dp。
2026-02-13 17:10:45
939
原创 android 13 Launcher隐藏hotseat(底部图标)
其实就是将宽高设置为0,此时我们install安装是有效果的,但是我发现重启后hotseat又出来了,然后我就在hotseat设置的地方测量的位置给设置成0,这样就完全可以了,在Hotseat类中。由于车载定制化需求有各种修改,首先是不需要底部的hotseat,由于当时尝试直接隐藏hotseat没有效果,所以这里我来记录下怎么去掉hotseat。其实就是在测量的位置将宽高设置成0,这样就完全可以了。
2026-02-13 16:26:49
256
原创 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
469
原创 Android 13将Launcher移植到AndroidStudio流程一
这里我们直接开干,直接开始移植,这次移植的系列我会尽可能的详细,带着更加深刻的理解出发。
2026-02-03 19:19:01
380
原创 图像显示框架十三——BufferQueue的工作流程(基于Android 15源码分析)
指出了是一个“状态更新+条件触发”的过程,其核心是更新中的状态机。真正意义上的释放 是指缓冲区从ACQUIRED状态成功迁移到FREE状态,并被加入到空闲缓冲区集合中。随后通过回调通知生产者,从而完成一个“释放-申请-使用”的完整循环。
2026-01-31 20:23:58
1006
1
原创 图像显示框架十二——BufferQueue的工作流程(基于Android 15源码分析)
本文分析了Android图形系统中消费者端的回调机制。当生产者通过BufferQueueProducer::queueBuffer将缓冲区加入队列后,会通过frameAvailableListener通知消费者。该监听器实际上是ConsumerBase实例,通过BufferQueueConsumer::connect设置。回调流程为:生产者入队缓冲区→触发onFrameAvailable回调→通知消费者获取新数据。关键点在于BufferQueueCore维护的mConsumerListener在Consum
2026-01-29 20:27:46
826
原创 图像显示框架十一——BufferQueue的工作流程(基于Android 15源码分析)
本文主要聚焦生产者一端的处理逻辑,分析了如何获取buffer以及填充数据后返还buffer的流程。下一篇来介绍消费者一端的处理逻辑。
2026-01-29 17:15:58
994
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
1038
原创 图像显示框架九——Surface/SurfaceControl基础概念(基于Android15源码分析)
代码位置:framework/native/libs/nativewindow/include/system/window.h// 构造函数:初始化 magic number、版本号及各类窗口属性默认值// 魔术字,用于类型验证// 结构体版本// 保留字段置零// 以下两个函数实现了引用计数功能,使 ANativeWindow 可由 sp<> (强指针) 自动管理生命周期#endif。
2026-01-22 16:52:58
1664
原创 图像显示框架八——BufferQueue与BLASTBufferQueue(基于android 15源码分析)
构造函数完成后,已经准备好作为一个**“中间人”:向上提供Surface让应用绘图,向下将绘图结果转换为提交给系统,从而实现同步**的图形更新。然后再看下createBufferQueue函数代码/*** 创建 BufferQueue 的生产者和消费者接口* @param outProducer 输出参数,用于存放创建好的生产者句柄* @param outConsumer 输出参数,用于存放创建好的消费者句柄*/
2026-01-21 10:02:38
1323
原创 adb常用指令
抓取所有日志(推荐)这是最常用的命令,可一次性捕获main(主应用日志)、system(系统日志)、radio(RIL日志)和events(系统事件)四大缓冲区的日志,并按时间戳(-v time)交织排序,便于分析事件序列。
2026-01-16 09:58:20
395
原创 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
537
原创 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
1330
原创 图像显示框架七——createSurface的流程(基于Android 15源码分析)
<--2. onFirstRef()回调-------------------------------------||<--6. 返回ISurfaceComposer代理----------------------------||<--10. 返回ISurfaceComposerClient代理---------------------||---11. 保存到mClient成员--------------------------------->|然后再来看下createSurfaceChecked方法。
2025-12-20 20:35:53
1250
1
原创 AndroidStudio module编译aar混淆文件处理
一般我们在开发应用的时候,可能需要封装对应的功能模块,封装成aar包对外提供,封装成aar对外提供的话,考虑到安全性方面,我们需要对提供的aar包进行混淆,而且要保证aar的release版本保持的不混淆文件不能被app的release版本混淆了;上述的proguard-rules.pro文件就是之前配置的保持不混淆文件,也可以自定义这个不混淆文件,我这边使用的是同一个文件,这样就把规则传递给app模块了,release app就不会报错类找不到等问题了。详细的规则我这边不展开了,网上有很多。
2025-12-20 17:06:02
382
原创 图像显示框架六——SurfaceFlinger的初始化以及任务调度(基于Android 15源码分析)
然后是通过compositor.configure()将显示配置更新,由于SurfaceFlinger实现了Compositor接口,所以具体实现是在SurfaceFlinger中,然后我们看下SurfaceFlinger中的configure()方法。可以看出来任务调度器中继承了MessageQueue(消息队列),这个是和Android 12有所区别的,Android 12中MessageQueue是在SurfaceFlinger中实现的,这里做了解耦,将消息队列放到任务调度器里面了。
2025-12-11 20:30:16
1326
原创 OpenHarmony 5.0 彻底解决应用与导航栏状态栏重叠问题
在launcher应用中进行修改,将设置全面屏改成false,具体修改路径:xxx/launcher/common/src/main/ets/default/manager/WindowManager.ts。但是这个解决方案对于单个应用是有效果的,不能彻底解决此问题,如果每个应用都这样修改则太麻烦了,而且不能适配三方应用,所以需要一个彻底解决方案。
2025-12-09 15:05:11
178
原创 Android应用程序 c/c++ 崩溃排查流程一——addr2line工具使用
addr2line工具的位置在ndk工具里面,我这边工具位置在:xxx\23.1.7779620\toolchains\llvm\prebuilt\windows-x86_64\bin\llvm-addr2line.exe。上述的指令如果想在任意位置使用就添加到环境变量里面即可,将xxx\23.1.7779620\toolchains\llvm\prebuilt\windows-x86_64\bin\路径添加到环境变量中。# 详细版本,显示更多信息。
2025-12-09 14:42:19
656
原创 图像显示框架五——SurfaceFlinger的启动流程(基于Android 15源码分析)
前面介绍了Native应用层如何与SurfaceFlinger进行通信的,但是我们还要了解SurfaceFlinger如何启动起来的,以及一些初始化处理,本文是基于Android 15源码以及Android 15设备进行分析的本篇涉及的代码位置: /frameworks/native/services/surfaceflinger/
2025-11-05 21:31:21
1435
原创 图像显示框架四——应用与SurfaceFlinger构建桥梁(基于Android 15源码分析)
上一篇介绍了如何创建Native的示例应用,从应用开发使用的角度去调用了相关api,从这篇来详细介绍如何调用到系统层,系统内部如何实现的本篇主要介绍应用与SurfaceFlinger的交互,即如何与SurfaceFlinger进行通信的。
2025-11-05 19:11:39
849
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订阅