- 博客(373)
- 收藏
- 关注
原创 Android 13 骁龙相机点击拍照流程分析(二)——点击拍照到存入相册
Android 13 骁龙相机点击拍照流程分析(一)——点击拍照到更新到左下角缩略图-CSDN博客。
2023-10-09 16:39:42
1880
原创 OpenHarmony与HarmonyOS联系与区别
HarmonyOS 是华为是基于 OpenHarmony、AOSP等开源项目开发的面向多种全场景智能设备的商用版本,所以HarmonyOS包含OpenHarmony,如果将OpenHarmony理解成地基,则HarmonyOS则是在这个地基基础上修建的精装房。开篇就说“关于‘鸿蒙操作系统’,由于缺乏规范的表述和统一的口径,导致内部理解不一致、对外说法不一致,容易引起混淆,所以此篇是专门说一下OpenHarmony与HarmonyOS的区别的。当我们在说“鸿蒙”的时候,也许就是指鸿蒙生态。
2023-07-21 16:04:54
18893
6
原创 001 Android13将Settings移植到AndroidStudio中(一)
首先环境,最好用我上面的AndroidStudio版本及gradle配置将代码整编得到out产物如下图内容复制到AndroidStudio的Settings对应目录下面复制后对应的Settings项目中如下:注意values可以按照需要保存相应的文件夹,我这边是只保留默认的values和中文的values的其实这些步骤也可以放到最后将所有模块导入差不多了在做Settings模块,不然会有很多报错,这里我暂时不说Settings的gradle配置的了,这些都放到最后来说。
2023-05-24 16:12:39
2875
7
原创 一篇文章彻底理解自定义View
对应标签。容易引起oom继承系统的TextView,实现在文字中间加一条横线}}}}) {canvas?}}可以看见文字中间是有一条横线的①.简单实现一个矩形的绘制}}}}) {canvas?}}添加自定义属性,添加自定义背景色先在values目录下面创建attrs.xml,添加自定义属性然后在代码中获取自定义属性,注意获取的资源要回收}//获取自定义属性对应的组名称//获取自定义属性//注意资源需要回收}}}
2022-12-02 17:37:45
1982
原创 flutter_easyrefresh 加载多次问题修复
flutter_easyrefresh是一个下拉刷新上拉加载的插件,具体我就不介绍了,这里主要是解决flutter_easyrefresh的bug,主要我在用此插件的时候遇到如下两个问题:①.上拉加载最后的footer不消失②.加载少量数据出现多次加载现象解决方案第一个问题现象如下,就是加载过程中在数据不能占满整个界面的时候footer是不会自动消失的解决方案:加载完成延时一...
2020-04-17 01:32:06
5828
6
原创 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
42
原创 国内免费使用Gemini 3,chatgpt 5的流程二
本文介绍了免费使用Gemini3和ChatGPT5的第三种方案。该方案通过浏览器插件提供每日10次免费对话机会,并可额外领取积分,总计每天可使用30余次。次日使用次数会刷新,还能继续累积积分。相比前两种方案,此方法提供更多免费额度。插件下载地址已给出,安装后即可直接与AI对话。该方案有效解决了国内用户受地域、网络或付费限制的问题。
2026-03-05 10:56:10
537
原创 Android 13定制桌面应用列表
本文介绍了Android Launcher定制中实现单层桌面布局的两种关键修改:1.将所有应用展示到桌面中:修改LoaderTask.java的run()方法,调整应用加载顺序,在显示桌面前完成所有应用的加载,并通过addMissingIconsToModel()方法将缺失应用补全到数据库和内存模型中;2.禁用应用拖拽功能:通过修改Workspace的beginDragShared()方法,保留长按弹窗功能但返回null来阻止拖拽操作。这些修改实现了客户要求的单层桌面布局需求,所有应用直接展示在桌面且位置固
2026-03-04 17:32:00
45
原创 Android 13 Launcher强制横屏后点击应用在切换回来报错DoubleShadowBubbleTextView, size -64x128
添加如上代码即可修复,如下是完整的DoubleShadowBubbleTextView内容。DoubleShadowBubbleTextView的宽度出现了负数,导致绘制失败。由于定制Launcher需要横屏显示,如下是强制横屏的流程。
2026-03-04 10:08:41
36
原创 如何将设置默认设置成横屏(基于Android 13修改)
一般设备默认是竖屏的,但是有些需求需要修改成横屏,修改横屏需要考虑多种情况,所以这里我整理下最适配的最兼容的修改成横屏的方式。
2026-02-28 15:01:09
165
原创 国内免费使用Gemini 3,chatgpt 5的流程
本文介绍两种免费使用Gemini3、ChatGPT5等AI工具的方法:1.DeepSider浏览器插件,安装后输入邀请码【D02I17】可获得额外积分,支持GPT-4o、Claude4.0等多种模型;2.AskGo插件,每日提供50免费积分,付费版本更优惠。两种方式都有使用限制,积分每日刷新,适合短期需求用户。
2026-02-28 09:56:18
580
原创 android 13 Launcher中应用列表数量,大小如何控制的?
由于需要定制Launcher UI,其中应用列表数量和设备匹配度是一个不好把握的度,有时候这个设备应用列表匹配上了,另一个设备可能就匹配错误了,所以今天我们讲一下如何将当前设置的应用列表的行数、列数精确匹配到当前设备上,并且做到不影响或者说尽可能小的影响其他设备应用列表显示。然后比如我们当前设备如何匹配上的,需要看下屏幕尺寸,注意这里的尺寸是dp位单位的,所以我们要得到设备的分辨率以及屏幕密度进行计算,这两个参数用adb都能获取到。# 屏幕宽度 dp = 1080 / 2.75 ≈ 392 dp。
2026-02-13 17:10:45
784
原创 android 13 Launcher隐藏hotseat(底部图标)
其实就是将宽高设置为0,此时我们install安装是有效果的,但是我发现重启后hotseat又出来了,然后我就在hotseat设置的地方测量的位置给设置成0,这样就完全可以了,在Hotseat类中。由于车载定制化需求有各种修改,首先是不需要底部的hotseat,由于当时尝试直接隐藏hotseat没有效果,所以这里我来记录下怎么去掉hotseat。其实就是在测量的位置将宽高设置成0,这样就完全可以了。
2026-02-13 16:26:49
188
原创 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
388
原创 Android 13将Launcher移植到AndroidStudio流程一
这里我们直接开干,直接开始移植,这次移植的系列我会尽可能的详细,带着更加深刻的理解出发。
2026-02-03 19:19:01
301
原创 编译源码报错记录
Android14先编译QSSI,再编译UM部分,如果在一个终端窗口编译的话,编译完QSSI会生成并修改相应的环境变量,再编译UM时报如上错误,解决版本,QSSI和UM分2个窗口编译,或者编译完QSSI之后按照以下指令清除对应的环境变量。在target/kernel/msm-4.19/scripts/mod/Makefile 添加一行即可解决此问题。
2026-02-03 14:35:52
149
原创 图像显示框架十三——BufferQueue的工作流程(基于Android 15源码分析)
指出了是一个“状态更新+条件触发”的过程,其核心是更新中的状态机。真正意义上的释放 是指缓冲区从ACQUIRED状态成功迁移到FREE状态,并被加入到空闲缓冲区集合中。随后通过回调通知生产者,从而完成一个“释放-申请-使用”的完整循环。
2026-01-31 20:23:58
801
1
原创 图像显示框架十二——BufferQueue的工作流程(基于Android 15源码分析)
本文分析了Android图形系统中消费者端的回调机制。当生产者通过BufferQueueProducer::queueBuffer将缓冲区加入队列后,会通过frameAvailableListener通知消费者。该监听器实际上是ConsumerBase实例,通过BufferQueueConsumer::connect设置。回调流程为:生产者入队缓冲区→触发onFrameAvailable回调→通知消费者获取新数据。关键点在于BufferQueueCore维护的mConsumerListener在Consum
2026-01-29 20:27:46
734
原创 图像显示框架十一——BufferQueue的工作流程(基于Android 15源码分析)
本文主要聚焦生产者一端的处理逻辑,分析了如何获取buffer以及填充数据后返还buffer的流程。下一篇来介绍消费者一端的处理逻辑。
2026-01-29 17:15:58
872
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
926
原创 图像显示框架九——Surface/SurfaceControl基础概念(基于Android15源码分析)
代码位置:framework/native/libs/nativewindow/include/system/window.h// 构造函数:初始化 magic number、版本号及各类窗口属性默认值// 魔术字,用于类型验证// 结构体版本// 保留字段置零// 以下两个函数实现了引用计数功能,使 ANativeWindow 可由 sp<> (强指针) 自动管理生命周期#endif。
2026-01-22 16:52:58
980
原创 图像显示框架八——BufferQueue与BLASTBufferQueue(基于android 15源码分析)
构造函数完成后,已经准备好作为一个**“中间人”:向上提供Surface让应用绘图,向下将绘图结果转换为提交给系统,从而实现同步**的图形更新。然后再看下createBufferQueue函数代码/*** 创建 BufferQueue 的生产者和消费者接口* @param outProducer 输出参数,用于存放创建好的生产者句柄* @param outConsumer 输出参数,用于存放创建好的消费者句柄*/
2026-01-21 10:02:38
1140
原创 adb常用指令
抓取所有日志(推荐)这是最常用的命令,可一次性捕获main(主应用日志)、system(系统日志)、radio(RIL日志)和events(系统事件)四大缓冲区的日志,并按时间戳(-v time)交织排序,便于分析事件序列。
2026-01-16 09:58:20
355
原创 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
455
原创 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
1226
原创 图像显示框架七——createSurface的流程(基于Android 15源码分析)
<--2. onFirstRef()回调-------------------------------------||<--6. 返回ISurfaceComposer代理----------------------------||<--10. 返回ISurfaceComposerClient代理---------------------||---11. 保存到mClient成员--------------------------------->|然后再来看下createSurfaceChecked方法。
2025-12-20 20:35:53
1115
1
原创 AndroidStudio module编译aar混淆文件处理
一般我们在开发应用的时候,可能需要封装对应的功能模块,封装成aar包对外提供,封装成aar对外提供的话,考虑到安全性方面,我们需要对提供的aar包进行混淆,而且要保证aar的release版本保持的不混淆文件不能被app的release版本混淆了;上述的proguard-rules.pro文件就是之前配置的保持不混淆文件,也可以自定义这个不混淆文件,我这边使用的是同一个文件,这样就把规则传递给app模块了,release app就不会报错类找不到等问题了。详细的规则我这边不展开了,网上有很多。
2025-12-20 17:06:02
315
原创 图像显示框架六——SurfaceFlinger的初始化以及任务调度(基于Android 15源码分析)
然后是通过compositor.configure()将显示配置更新,由于SurfaceFlinger实现了Compositor接口,所以具体实现是在SurfaceFlinger中,然后我们看下SurfaceFlinger中的configure()方法。可以看出来任务调度器中继承了MessageQueue(消息队列),这个是和Android 12有所区别的,Android 12中MessageQueue是在SurfaceFlinger中实现的,这里做了解耦,将消息队列放到任务调度器里面了。
2025-12-11 20:30:16
1082
原创 OpenHarmony 5.0 彻底解决应用与导航栏状态栏重叠问题
在launcher应用中进行修改,将设置全面屏改成false,具体修改路径:xxx/launcher/common/src/main/ets/default/manager/WindowManager.ts。但是这个解决方案对于单个应用是有效果的,不能彻底解决此问题,如果每个应用都这样修改则太麻烦了,而且不能适配三方应用,所以需要一个彻底解决方案。
2025-12-09 15:05:11
120
原创 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
590
原创 图像显示框架五——SurfaceFlinger的启动流程(基于Android 15源码分析)
前面介绍了Native应用层如何与SurfaceFlinger进行通信的,但是我们还要了解SurfaceFlinger如何启动起来的,以及一些初始化处理,本文是基于Android 15源码以及Android 15设备进行分析的本篇涉及的代码位置: /frameworks/native/services/surfaceflinger/
2025-11-05 21:31:21
1246
原创 图像显示框架四——应用与SurfaceFlinger构建桥梁(基于Android 15源码分析)
上一篇介绍了如何创建Native的示例应用,从应用开发使用的角度去调用了相关api,从这篇来详细介绍如何调用到系统层,系统内部如何实现的本篇主要介绍应用与SurfaceFlinger的交互,即如何与SurfaceFlinger进行通信的。
2025-11-05 19:11:39
727
原创 Android 图像显示框架三——演示demo以及解析
本文解析了一个Android Native Surface演示程序,重点剖析了图像显示系统的核心机制。程序通过onFirstRef函数初始化Surface,包括建立SurfaceFlinger连接、配置显示属性和初始化BLASTBufferQueue。主程序采用"出队-渲染-入队"的缓冲区管理模式,实现颜色动画循环。关键技术包括:1)双缓冲机制避免显示撕裂;2)Fence系统确保GPU-CPU同步;3)CPU软件渲染RGBA8888格式图像;4)简单的红绿蓝三色循环动画逻辑,每秒切换1帧
2025-11-04 21:20:13
1063
原创 OpenHarmony 5.0 wifi开启整个流程详细分析
本篇是介绍OpenHarmony5.0 wifi开启的整体流程分析,主要是根据日志和代码进行跟踪。
2025-10-24 15:04:06
165
原创 android 图像显示框架二——流程分析
1.图像生产者(Image Producer):负责生产(绘制)图像内容,例如:应用程序、视频解码器。2.图像消费者(Image Consumer):负责使用(消耗)已生成的图像内容。例如:将图像合成后送到显示屏的SurfaceFlinger。3.BufferQueue:作为核心中介,连接生产者和消费者,它管理着一组图形缓冲区(GraphicBuffer),是数据交换的通道。1.图像生产者(右侧)所有需要将画面绘制到屏幕上的实体。常见生产者::3D图形渲染库。Skia:2D图形绘制库,常用于。
2025-10-23 21:18:15
1172
原创 android 图像显示框架一——基础概念介绍
如下是新人小白的各种名词介绍方式底层各个组件名词介绍1.BufferQueue和gralloc我们可以把GraphicBuffer(图形缓冲区)理解为一辆装满货物(图像数据)的卡车,那么:BufferQueue(缓冲区队列):就像一条传送带或者是一个卡车排队通道。它连接着生产货物的“车间”(生产者)和消费货物的“仓库”(消费者)。传送带上面有很多空的卡车,生产者(如App)把货物装满一卡车后,卡车就开到通道末尾排队,等待消费者(如SurfaceFlinger)来取货。
2025-10-23 01:21:01
1439
原创 Android Framework智能座舱面试题
binder机制的理解:binder是一种基于(c/s)架构的ipc通信方式,核心是mmap内存映射而完成的一次拷贝技术为什么重要:它是整个android通信系统的骨架,ActivityManagerService、WindowManagerService等等系统服务的通信方式都是在binder基础上实现的与Socket对比优势:①.只进行了一次数据拷贝,Socket需要进行两次数据拷贝②.binder更加安全(基于UID/PID身份校验③.binder是面向对象的,而Socket是字节流。
2025-09-06 16:45:44
321
原创 hdc指令
hdc shell mount -o rw,remount / # 此命令用于解决推包时提示只读路径,无法推送。例如:[Fail]Error opening file: read-only file system, path:/system/lib/libace.z.so。1.打开camera和Video。
2025-08-18 13:49:18
188
原创 OpenHarmony 5.0 Settings中wifi删除密码立刻去输入密码连接,连接不上
OpenHarmony 5.0中Settings模块的WiFi连接存在三个主要问题:1)信号弱的MAC地址导致连接失败,解决方案对扫描结果按信号强度排序;2)删除密码后立即连接时状态不一致,通过添加"断开中"状态过渡解决;3)密码输入后监听事件异常,修改为仅注销当前监听器并调整连接状态判断。修改方案包括优化WiFi扫描排序算法、添加中间状态处理机制以及完善监听器管理逻辑。
2025-08-05 15:19:41
344
原创 OpenHarmony 5.0 Settings wifi列表界面偶现连接不上,并且后续一直也连接不上
摘要:针对Wifi列表界面切换时偶现无法连接的问题,分析发现当信号过弱断开时,应用监听失效。解决方案包括:1)在监听前增加连接状态判断;2)断开时重新初始化监听器;3)添加"断开中"状态标识,在WifiModel中更新状态并移除监听;4)连接时根据状态判断直接连接或正常流程。通过状态管理确保连接可靠性。
2025-08-05 14:49:33
144
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订阅