自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

龚礼鹏的博客

有所学习,有所思考,有所总结,一起进步

  • 博客(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部分

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部分,注意此处是解压替换的路径和之前的不一致

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部分

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部分

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部分

OpenHarmony 5.1.0 full sdk公版的toolchains-windows-x64-5.1.0.107-Release部分

2025-05-23

SIM卡相关压测工具使用

SIM卡相关压测工具使用

2024-08-13

Android 13 Settings蓝牙列表卡顿问题排查及优化过程

Android 13 Settings蓝牙列表卡顿问题排查及优化过程

2023-12-07

Android 13 Launcher界面-移除桌面的删除和卸载功能

Android 13 Launcher界面-移除桌面的删除和卸载功能

2023-08-08

TextField演示效果

TextField演示效果

2023-07-14

framework.jar

framework.jar

2023-05-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除