当前位置: 首页 > news >正文

System Properties 和 Settings.Global 的区别


System Properties 与 Settings.Global 对比表

对比维度System PropertiesSettings.Global
本质Linux 内核级别的键值对Android Framework 层的数据库条目
存储位置/system/build.prop(或 system_ext、vendor 等)SQLite 数据库(如 /data/data/com.android.providers.settings/databases/settings.db
访问方式Java: SystemProperties.get()
Shell: getprop / setprop
Java: Settings.Global.getString(), getInt()
生效时机系统启动早期加载Framework 启动后可用
可变性只读(通常),修改需重新编译刷机可运行时动态修改(需权限)
是否持久化✅ 是(build.prop 文件)✅ 是(SQLite 数据库存储)
是否支持运行时修改❌ 否(除非用 setprop,不推荐)✅ 是
影响范围多个系统组件共享(Zygote、SurfaceFlinger、init 等)Framework 层服务及 App
修改权限需要 root 或刷入新系统需要 WRITE_SETTINGS 权限

🧩 使用场景对比

✅ System Properties

  • 适用于

    • 控制底层行为(如硬件特性、调试开关)
    • 系统启动参数(如 ro.boot.hardware)
    • 只读属性(如设备型号、固件版本)
  • 示例

    ro.product.model=MyDevice
    persist.sys.debug.enable=1
    
  • 特点

    • 被多个系统组件共享(如 Zygote、SurfaceFlinger、init)
    • 修改需要 root 权限 + 修改 build.prop 文件并重启

✅ Settings.Global

  • 适用于

    • 全局设置项(如飞行模式、屏幕亮度、开发者选项等)
    • Framework 层服务控制(如 Wi-Fi、蓝牙开关)
  • 示例

    Settings.Global.putInt(getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1);
    
  • 特点

    • 可以通过 Settings Provider 动态更新
    • 不影响底层系统行为
    • 某些设置项受权限保护(如 WRITE_SETTINGS

🔒 权限与安全性对比

对比点System PropertiesSettings.Global
修改权限需要 root 或刷入新系统需要 WRITE_SETTINGS 权限
是否持久化✅ 是(build.prop 文件)✅ 是(SQLite 数据库存储)
是否支持运行时修改❌ 否(除非用 setprop,不推荐)✅ 是
是否被系统服务监听✅ 是(如 init、SurfaceFlinger)✅ 是(如 SettingsProvider、Framework 监听变化)

🛠️ 典型应用场景对比

应用场景推荐使用
设置默认屏幕方向ro.product.default_orientation=landscape(System Property)
开启调试日志输出persist.sys.debug.enable=1(System Property)
控制是否允许安装未知来源应用Settings.Global.INSTALL_NON_MARKET_APPS
设置系统语言一般由 localepicker 控制,最终写入 Settings.Global
控制是否启用开发者选项Settings.Global.DEVELOPMENT_SETTINGS_ENABLED
设置默认输入法Settings.Global.DEFAULT_INPUT_METHOD

🔄 与其他配置方式对比

类型是否可运行时修改是否持久化影响范围修改方式
System Properties❌(不推荐)整个系统修改 build.prop 并重启
BuildConfig单个 App编译时决定
Settings.GlobalFramework 层API 动态修改

🧪 查看方式

查看 System Properties

adb shell getprop
adb shell getprop ro.product.model

查看 Settings.Global

adb shell settings list global
adb shell settings get global airplane_mode_on

✅ 总结对比表

对比维度System PropertiesSettings.Global
层级Native 层 / Init 层Framework 层
修改难度复杂(需刷机)简单(API 或命令)
生效时间启动初期Framework 启动后
适用对象系统级、底层模块Framework、App
是否适合 App 使用❌ 否✅ 是

📝 何时该用哪个?

场景推荐使用
控制底层模块行为(如 Camera HAL)System Properties
控制 Framework 行为(如 Wi-Fi、飞行模式)Settings.Global
App 配置(如默认主题)SharedPreferences 或 App 自定义配置
系统构建信息(如产品名称、版本号)System Properties
用户可配置的全局设置Settings.Global
http://www.xdnf.cn/news/691777.html

相关文章:

  • 尚硅谷redis7 70-72 redis哨兵监控之案例实操7
  • go实现定时任务
  • QT 5.15.2 程序中文乱码
  • Linux基础 -- Linux 启动调试之深入理解 `initcall_debug` 与 `ignore_loglevel`
  • JavaScript核心总结与现代化应用指南
  • 弥散制氧机工作机制:高原低氧环境的氧浓度重构技术
  • Laravel单元测试使用示例
  • linux安装ffmpeg7.0.2全过程
  • es6 函数解构
  • 【系统架构设计师】2025年上半年真题论文回忆版: 论事件驱动架构及应用(包括解题思路和参考素材)
  • nova14 ultra,是如何防住80°C热水和10000KPa水压冲击的?
  • pytorch部分函数理解
  • 【网络通信】详解网络通信、实现 CS / BS架构 通信
  • xxl-job快速创建复制任务
  • IACEES 2025:创新材料与能源模式,迎接未来的挑战
  • 27、请求处理-【源码分析】-怎么改变默认的_method
  • 【周输入】517周阅读推荐-3
  • Spring Boot 启动流程深度解析:从源码到实践
  • 【烧脑算法】定长滑动窗口:算法题中的“窗口”智慧
  • MySQL OCP 与 Oracle OCP 认证,怎么选?
  • 怎样将win11+ubuntu双系统的ubuntu从机械硬盘迁移至固态硬盘(1)
  • 【Elasticsearch】track_total_hits
  • CAD图纸中的文字看不到,这是什么原因?
  • 传输线的特性阻抗和传播延迟
  • DL00916-基于深度学习的金枪鱼各类别目标检测含完整数据集
  • 131.在 Vue3 中使用 OpenLayers 测量长度和面积,并支持 modifyend 动态更新数值
  • 不打架的协议互通,modbus转profibus网关的总线的高效互通方案
  • C53-字符串引入和注意事项.
  • JavaScript 中 this 指向全解析:从基础到 Vue 应用
  • 【加密算法】