System.setProperty vs adb setprop (Android SystemProperties)

在 Android 开发中,经常会遇到两种"属性"设置方式,它们虽然名字相似,但作用域和机制完全不同。

1. System.setProperty (Java System Properties)

这是标准的 Java 机制,用于在 Java 虚拟机 (JVM) 层面设置键值对。

  • 作用域 (Scope) : 仅限于当前进程 (Current Process)。
    • 设置的属性只在当前 App 或当前 Java 进程的内存中有效。
    • 其他 App 或系统进程无法读取到这个值。
  • 生命周期 (Lifecycle) : 非持久化
    • 进程重启后,属性丢失。
  • 访问方式 (Access) :
    • System.setProperty("key", "value"); //设置属性
    • System.getProperty("key");//读取属性
  • 用途 :
    • 用于库的配置(例如配置 Log4j,或者某些 SDK 的初始化参数)。
    • 在同一个进程的不同模块间传递简单的全局配置。

2. adb setprop (Android System Properties)

这是 Android 操作系统特有的属性系统,底层由 init 进程维护,存储在共享内存区域。

  • 作用域 (Scope) : 系统全局 (System-wide)。
    • 一旦设置,系统中的所有进程(只要有权限)都可以读取到这个值。
    • 常用于跨进程通信、系统功能开关、调试标记。
  • 生命周期 (Lifecycle) :
    • 普通属性 : 重启后丢失 (例如 debug., sys., log. 开头的属性)。
    • 持久化属性 : 以 persist. 开头的属性会将值写入磁盘 (/data/property/),重启后依然有效
  • 访问方式 (Access) :
    • 命令行 (ADB):
      • 设置: adb shell setprop <key> <value>
      • 读取: adb shell getprop <key>
    • 代码 (Android):
      • android.os.SystemProperties.get("key", "default");
      • android.os.SystemProperties.set("key", "value"); (通常需要系统权限/Root 权限)
  • 权限 :
    • 读取通常比较宽松。
    • 设置 (set) 通常受到 SELinux 策略的严格限制,普通 App 无法随意 setprop,通常只有系统进程或 Root 后的 Shell 才能设置。

总结对比

特性 System.setProperty (Java) adb setprop (Android SystemProperties)
底层机制 JVM 内存 Map Android OS 共享内存 (Property Service)
作用范围 仅当前进程 全局 (所有进程可见)
持久化 否 (进程重启即失效) persist. 开头可持久化,其他重启失效
权限要求 无 (进程内随意设置) 严格 (设置通常需 System/Root 权限)
典型用途 库配置、进程内全局变量 系统开关、跨进程标志、调试开关

代码示例

Java Property

复制代码
System.setProperty("my.app.debug", "true"); // 设置 
String isDebug = System.getProperty("my.app.debug");// 读取 

Android System Property

复制代码
//命令行设置 (需要权限)
# adb shell setprop log.tag.MyTag true


// 代码读取 
SystemProperties.getBoolean("log.tag.MyTag", false);
相关推荐
游戏开发爱好者86 小时前
网络连接排查指南,谁在电脑后台偷跑流量,哪些程序在联网
网络协议·计算机网络·网络安全·ios·adb·https·udp
实心儿儿6 小时前
MySQL 的安装
数据库·mysql·adb
tianshi48517 小时前
Android 应用启动窗口(Splash Screen)的创建与销毁流程
android
脚踏实地,坚持不懈!7 小时前
ICU Calendar 实际工作问题排查手册
android
ii_best7 小时前
安卓脚本/ios开发软件按键精灵实战:自动定位弹窗广告关闭按钮坐标的通用方案
android·ios·自动化
天空之城--8 小时前
Android Jetpack Compose 状态管理浅析
android·android jetpack
2601_9623004711 小时前
基于Python与Tkinter的ADB Monkey自动化测试脚本开发
python·adb·tkinter·android测试·gui自动化
企业数字化笔记11 小时前
固定资产财务账与实物账怎么对账?折旧快照、差异检测与SQL核对
android·数据库·sql
千里马-horse13 小时前
第 66 章:在 Android 上运行 Windows 游戏
android·aosp
云边有个稻草人17 小时前
飞牛 NAS 远程访问实战:星空组网连接 Mac 与安卓,从 Compose 部署到 5G 验证
android·5g·macos