安卓Settings值原理源码剖析存储最大的字符数量是多少?

Framework 层属性机制Settings.System, Settings.Secure和Settings.Global存储及应用 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考。 阅读详情

背景:

平常做rom相关开发时候经常需要与settings值打交道,需要独立或者存储一个settings的场景,群里有个学员朋友就问了一个疑问,那就是Settings的putString方式来存储字符,那么可以存储的最大字符是多少呢?针对这个问题我们来剖析一下Setting值存储最大字符是多少个。

Settings数据存放的变化:

Google修改了SettingsProvider,涉及到了global,secure,system 三个表;并且实现方式从之前的数据库,改为异步性能更加优良的xml,每个用户都有自己的一份SettingsProvider设置xml文档。通常位于
/data/system/users/userid/ 下面,具体如下图:
在这里插入图片描述但是直接看是一般乱码,这个因为是二进制的xml。
在这里插入图片描述参考这个文章使用如下命令:

abx2xml settings_global.xml settings_global-read.xml

在这里插入图片描述

测试Setting写入大量数据

下面就准备一个大的字符串然后写入settings的调用

   StringBuffer stringBuffer = new StringBuffer();
	for (int i = 0;i < 75536;i++) {
		stringBuffer.append('b');
	}  
	Settings.Global.putString(decorView.getContext().getContentResolver(),"key_max1",stringBuffer.toString());

写入后可以通过查看日志方式,看看 是否有异常。

结果真的在日志中可以看到产生了如下异常:

09-19 00:14:55.127   524   598 E SettingsState: Failed to write settings, restoring backup
09-19 00:14:55.127   524   598 E SettingsState: java.io.IOException: Modified UTF-8 length too large: -75536
09-19 00:14:55.127   524   598 E SettingsState: 	at com.android.internal.util.ArtFastDataOutput.writeUTF(ArtFastDataOutput.java:85)
09-19 00:14:55.127   524   598 E SettingsState: 	at com.android.modules.utils.BinaryXmlSerializer.attribute(BinaryXmlSerializer.java:207)
09-19 00:14:55.127   524   598 E SettingsState: 	at com.android.providers.settings.SettingsState.setValueAttribute(SettingsState.java:1013)
09-19 00:14:55.127   524   598 E SettingsState: 	at com.android.providers.settings.SettingsState.writeSingleSetting(SettingsState.java:985)
09-19 00:14:55.127   524   598 E SettingsState: 	at com.android.providers.settings.SettingsState.doWriteState(SettingsState.java:872)
09-19 00:14:55.127   524   598 E SettingsState: 	at com.android.providers.settings.SettingsState.-$$Nest$mdoWriteState(SettingsState.java:0)
09-19 00:14:55.127   524   598 E SettingsState: 	at com.android.providers.settings.SettingsState$MyHandler.handleMessage(SettingsState.java:1239)
09-19 00:14:55.127   524   598 E SettingsState: 	at android.os.Handler.dispatchMessage(Handler.java:106)
09-19 00:14:55.127   524   598 E SettingsState: 	at android.os.Looper.loopOnce(Looper.java:205)
09-19 00:14:55.127   524   598 E SettingsState: 	at android.os.Looper.loop(Looper.java:294)
09-19 00:14:55.127   524   598 E SettingsState: 	at android.os.HandlerThread.run(HandlerThread.java:67)

源码分析:

在这里插入图片描述可以看出明显是打开xml写入xml的过程,再看看writeSingleSetting方法。
在这里插入图片描述最后调用到了
frameworks/base/core/java/com/android/internal/util/ArtFastDataOutput.java
在这里插入图片描述这里的MAX_UNSIGNED_SHORT值是65535

在这里插入图片描述
修改一下写入代码变成比65535小的话就可以写入:
在这里插入图片描述
导出xml看看结果:

在这里插入图片描述

总结:

1、settings相关的数据最后是存在xml中,app层面都是通过SettingProvider调用到systemserver进程进行保存

2、xml中写入相关字符时候,对字符长度有限制,是65535,一旦比这个大则会写入异常

更多framework技术干货,请关注下面“千里马学框架”

Android应用脱壳实战:从内存Dump原理到Frida脚本实现 在Android应用安全领域,加固技术通过加密和混淆核心代码来保护应用逻辑,这给安全分析和漏洞挖掘带来了挑战。其基本原理是在应用运行时动态解密并加载原始DEX文件到内存中执行。为了突破这层保护,逆向工程师需要掌握内存取证技术,即在代码被解密后、执行前,从进程内存中提取出完整的DEX字节码。这项技术的核心价值在于能够绕过静态文件分析的局限,直接获取可分析的原始代码,对于应用安全评估、恶意软件分析和漏洞研究至关重要。实现这一目标通常需要借助动态插桩工具,在关键的类加载或DEX文件打开函数处设置钩子(Hook)。 阅读详情

相关推荐

Unity跨平台开发核心原理:从Mono/IL2CPP到平台适配实战解析

跨平台开发是现代游戏与应用开发的核心需求,其本质在于解决同一套代码在不同操作系统和硬件架构上的兼容性问题。其技术原理主要围绕代码转换与平台抽象两大层面:通过脚本后端将高级语言编译为中间语言或直接转换为平台原生代码,同时通过统一的运行时接口屏蔽底层系统差异。这一技术方案为开发者带来了巨大的工程价值,能够显著降低多平台适配成本,提升代码复用率。在游戏开发、移动应用及XR内容创作等场景中,跨平台能力已成为基础要求。本文聚焦Unity引擎的跨平台实现,深入剖析其Mono与IL2CPP两大脚本后端的工作机制,并结合纹

weixin_34297704的博客 483

Settings的存储使用Gloabl、System、Secure

Android Settings Global、System、Secure

wsxiaoniup的专栏 1495

Android运行时权限实战:从系统机制到厂商适配的完整指南

Android运行时权限不是简单的API调用,而是基于API 23引入的动态信任协商机制,涉及系统级权限组管理、用户心智模型匹配与厂商ROM深度干预。其核心原理在于权限声明仅是信用支票,真实授权需结合用户上下文、渐进式引导和功能级验证。技术价值体现在提升用户接受率、规避SecurityException崩溃、保障合规过审;典型应用场景包括相机预览、精准定位、媒体文件访问等敏感功能落地。本文聚焦真实项目中权限黑屏、静默拒绝、分组误判、厂商拦截等高频问题,融合Android原生机制与小米MIUI、华为EMUI、

weixin_30265103的博客 411

SettingsProvider详解

将每个settings xml表,备份到带有.fallback的xml文件里,例如将settings_config.xml —>settings_config.xml.fallback、settings_secure.xml—>settings_secure.xml.fallback、settings_global.xml–>settings_global.xml.fallback。限制历史记录数量,避免内存占用过大;一个类型的表只保存最新的20条记录,如果超过20条则把最先记录的那个给修改掉。

cmlsky2009的博客 948

Wallpaper Engine .pkg解包指南:RePKG原理与TEX资源解析

.pkg文件是Unreal Engine 4 Pak格式的定制变体,非通用压缩包,其核心在于索引表+数据块结构与FNV-1a路径哈希机制。理解这一底层原理,是实现精准解包与可逆重建的前提。TEX并非图像文件,而是UE4 Texture2D的二进制序列化容器,含Header、Mipmap数据及自定义元数据,需通过同源纹理解码路径(如WIC/stb_image_write)才能无损转出PNG等格式。RePKG凭借对WE专属PKG结构的深度适配和BC7等压缩格式的硬件级解码支持,成为动态壁纸资源提取、修改与重建的

weixin_33875564的博客 189

把 Unity 工程送上货轮:一次完整的打包远航

传统打包流程的故事与技术原理摘要(150字) Unity传统打包流程如同一次虚拟世界的"大搬家":从收集场景资源、分析依赖关系,到压缩转换格式、编译Shader,最终生成跨平台安装包。该流程通过递归式资源收集确保内容完整,依赖分析避免冗余,多平台适配实现无缝部署。然而传统方法存在全量打包慢、资源检测复杂等痛点,促使新一代打包管线技术诞生。整个流程将游戏资源从"原材料"转变为可执行的"行李箱",让玩家能够轻松安装体验开发者构建的虚拟世界。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 259

Spring Reactor介绍

Reactor - A Foundation for Reactive FastData Appli该文简单介绍了Spring reactor 1.0的基本特性。目前reactor是作为Spring.io核心包下面项目。Reactor 是一个基础性库包–定位在用户级和低级之间的灰色区域的抽象...

chuhan0449的博客 465

Unity扑克牌游戏源码拆解:C#架构与UGUI性能优化实战

在Unity客户端开发中,UI交互与逻辑架构是开发者关注的重点。扑克牌类游戏作为典型的回合制卡牌应用,其核心玩法涉及牌型判定、回合流程与网络同步等基础模块。本文从一套完整的源码出发,解析了基于C#语言实现的游戏逻辑分层设计,包括事件驱动架构、Fisher-Yates洗牌算法、对象池模式等工程实践。同时,针对UGUI界面开发中的常见痛点,如拖拽层级冲突、翻牌动效、多分辨率适配等,提供了可落地的解决方案。文章还探讨了DrawCall优化、Socket通讯协议与断线重连机制,为棋牌类游戏的客户端开发与性能调优提供

weixin_34090562的博客 345

android 8.0 动态权限,Android6.0 动态权限机制深入讲解

前言Android6.0以后引入了动态权限机制,一些系统权限的分配需要在app运行中进行分配,而不只是在AndroidManifest中指定。本篇将针对动态权限的底层分配过程进行分析(基于Android-6.0.1)。权限分配我们先看一下请求分配权限的代码//frameworks/support/v4/java/android/support/v4/app/ActivityCompat.javap...

weixin_27127993的博客 785

微波无源器件 功分器1 新型方波导双模无功功分器

本名证明了一种基于有着特定功能的(dedicated)T性匹配元件(散射件)的进化结点的新型波导双模两路功分器的可行性。这个散射件,有着面向三个部分的匹配部分,提供了等效功分并且朝着对应的输出端口传输矩形波导的两个TE10/TE01正交模式。所提出的设计紧凑,易于比例变化并且能够级联来获得。

qq_45245770的博客 1393

SECS/GEM EAP 设备自动化功能原理和设计方案

半导体SECS GEMEAP实现了对生产线上机台的实时监控,是工厂自动化不可缺少的控制系统。EAP系统与FAB中的机台紧密相关,系统的设计与开发必须与生产线的机台实际生产流程相一致,才能达到控制机台生产的目的。 EAP SECS/GEM是MES与设备的桥梁,EAP通过SECS国际标准协议与机台进行数据传输。SECS是半导体设备(半导体行业称设备为机台)必须遵循的一种国际通信协议。EAP就是通过SECS与设备通信、传输数据、发送指令控制设备按照预先定义........

semisecs 17万+

Android7 U盘插拔链路源码全解析(一)全景图与调用链路概览

本文摘要: Android U盘/OTG调用链分析系列文章,基于Android 7.1.2源码,从内核层到应用层系统解析U盘插入到可用的完整流程。通过四层架构(Kernel→Native→Framework→Application)详解各组件协作机制,包括USB驱动、vold守护进程、StorageManagerService等核心模块。重点解决开发中常见的U盘识别、挂载及文件访问问题,并附调用时序图说明物理插入至应用响应的全链路过程。适合系统开发人员深入理解Android存储子系统工作原理。

AfinalStone的专栏 239

小米CyberGear微电机驱动代码(CAN总线驱动,含开源地址)

小米CyberGear微电机驱动代码(ROS下的CAN总线驱动,含开源地址)

2302_80751833的博客 4444

安卓启动流程与期间核心组件工作原理

本文以实际工作中出现的启动相关各种千奇百怪的bug为钩子,讲解了安卓app冷启动过程中核心组件的工作原理,pms -> packageParser/androidmanifest.xml -> context -> ams -> application -> activity -> layoutInflater资源加载过程 -> wms /window/WM -> view与viewgroup绘制原理 -> 渲染阶段。理供解决问题的思路,看业务框架代码能看懂他们改的哪块源码,跟他们扯皮能扯赢

mix39的博客 337

工行聚合支付二维码全流程开发指南:从生成到退款实战解析

本文提供了一份详尽的工行聚合支付二维码开发实战指南。内容涵盖从环境准备、SDK集成到核心功能实现的完整对接流程,包括生成收款二维码(主扫支付)、扫码收款(被扫支付)、订单状态查询以及退款处理,并附有代码实现示例和关键的避坑经验,帮助开发者高效完成支付模块集成。

work3的博客 439

告别环境配置焦虑:在Win10的Ubuntu子系统里搞定CSAPP实验环境(附32/64位库编译指南)

本文详细介绍了如何在Win10的Ubuntu子系统中搭建CSAPP实验环境,包括WSL 2的安装与配置、32/64位库的编译指南以及高效开发工具链的设置。通过优化WSL性能和使用实用技巧,开发者可以轻松应对CSAPP实验中的环境配置问题,提升学习效率。

weixin_30443813的博客 297

Ladybird 浏览器 VS Code 开发环境完整指南:从克隆仓库到 WebContent 断点调试 5 步走

Ladybird 是一个从零独立实现的浏览器(Web 引擎、JS、网络栈均为自研 C++ 代码)。本文解决首次接触该项目开发者的环境问题:构建预设怎么选、clangd 索引怎么生效、编译任务怎么自动化,以及调试器如何附加到不在主进程里的 WebContent 子进程。 [![Ladybird 浏览器多进程架构示意](https://raw.gitcode.com/GitHub_Trending/

gitblog_00385的博客 1023

Avalonia 超级详细学习指南

什么是 Avalonia?Avalonia 是一个开源的、跨平台的 GUI 框架,允许开发者使用 XAML 和 C# 构建现代化、高性能的桌面应用程序。与其他框架相比,Avalonia 具有强大的跨平台能力和灵活的界面设计。} }()Avalonia 的特点和优势跨平台性:Avalonia 可以在 Windows、Linux、macOS 等多个平台上运行,开发者可以编写一套代码,然后在不同的操作系统上运行相同的应用程序。

仰望星空的博客 1万+

CarLauncher源码解析与自定义车载桌面开发实战

在智能座舱快速普及的背景下,车载桌面已成为Android系统深度定制的重要环节。与手机Launcher不同,车载桌面强调驾驶安全与操作效率,需要在大图标、高对比度、多窗口环境下保持稳定。AOSP自带的CarLauncher作为Android 11官方参考实现,展示了应用列表加载、快捷控制、系统服务绑定等核心模块的设计思路。深入解析CarLauncher,有助于理解车载桌面与SystemUI、CarService的协同机制。基于分层架构的自定义Launcher,能够灵活适配横屏、多分辨率以及分屏场景,并通过异

weixin_34342992的博客 338

量化交易零基础入门教程

特点 从零开始教编程。靠谱的量化交易学习资源稀少,且具有不讲编程、代码较难、过多等不适合新手等问题,本教程中则会从零开始教编程,解决量化入门过难过编程门槛这一问题。 量化与编程相结合。本教程不仅会教编程,而且会尽量结合量化情景,减少“我要做量化交易为什么要看这些用来培训程序员的东西”的愤懑。 简易精炼,快速入门。尽量只讲最核心最常用的知识,助你快速摆脱想学习量化却处处陌生不知所措的茫然的新手阶段。 读前说明 文后会有自测与自学,包括一些额外的延伸自学内容以及稍有难度的自测题目。 最最最基础的股票.

JanLEE 2888

vue3+ts+elementui-plus二次封装树形表格实现不同层级展开收起的功能

我只定义了三层数据,就只演示展开了三层,还可以多层,自己设置即可。

蜗牛~~ 2603

Unity游戏开发实战:从大富豪源码解析到项目架构优化

在游戏开发领域,Unity引擎因其跨平台特性和完善的工具链,成为休闲游戏开发的主流选择。其核心原理在于组件化架构和场景管理,通过C#脚本驱动游戏逻辑,实现高效的原型开发和产品迭代。这种技术方案的价值在于能够快速构建可交互的虚拟世界,广泛应用于模拟经营、棋牌休闲等游戏类型。以经典休闲游戏《大富豪》为例,其完整源码展示了Unity项目在游戏逻辑、UI交互、数据管理等方面的工程实践。通过分析这类商业级项目的模块化设计,开发者可以深入理解有限状态机在游戏核心循环中的应用,以及数据驱动配置如何提升项目的可维护性。这些

weixin_33910137的博客 357

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Paperless-ngx 配置详解:paperless.conf、PAPERLESS_* 环境变量与 UI 配置全解析

Paperless-ngx 的可定制能力几乎全部通过三类入口暴露:Docker 部署时的 `docker-compose.env`、裸机部署时的 `paperless.conf`(本质是 dotenv 格式的环境变量文件),以及 Web UI 中的实例级配置。本文以官方配置文档 [docs/configuration.md](https://link.gitcode.com/i/b0c63a555

gitblog_00770的博客 396

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

AI编程助手选型指南:从代码补全到开发流协同的实战决策

AI编程助手已超越传统代码补全范畴,演进为深度嵌入开发流程的智能协作者。其核心原理在于上下文感知、多文件协同与领域知识融合,技术价值体现在降低上下文重建成本、提升跨模块重构准确率、缩短调试验证闭环周期。典型应用场景覆盖Vue组件调试、Spring Boot接口联调、Android真机热更新及国产中间件(如Nacos、Seata)集成。在中文技术生态中,通义灵码与TRAE等工具通过预置国内主流框架语义和合规规则,显著优于通用大模型API方案。本文基于200+小时真实项目实测,聚焦开发者日均4小时以上编码场景下

weixin_34008933的博客 182

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Unity 2021+ 迁移老版ToLua/LuaFramework_UGUI:编译错误与运行时问题全解析

在游戏开发中,.NET版本升级与程序集依赖管理是保障项目稳定运行的基础技术。.NET Standard作为跨平台API规范,其API集与传统的.NET Framework存在差异,可能导致旧代码中引用的特定命名空间(如System.Configuration)失效,引发编译错误。理解程序集定义(Assembly Definition)的模块化原理,能有效管理代码依赖、避免循环引用,这是构建可维护大型项目的关键。这些技术对于实现代码复用、提升编译效率和确保跨版本兼容性具有重要价值,尤其在Unity引擎升级、整

589
上一篇: android 14分屏实战之小米su7的3分屏实现方案讨论及线索征集
下一篇: android编译make详细过程日志查看showcommands/verbose.log
千里马学框架
博客等级 码龄6年 1万+粉丝 651原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值