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);
相关推荐
爱笑鱼2 小时前
Binder(八):远端进程死了,BinderProxy 为什么还能收到通知?
android
Android-Flutter2 小时前
Kotlin 冷流与热流详解
android·kotlin
zhangphil3 小时前
Android ContentProvider/ContentResolver读图片,跨进程 IPC慢
android
yueqc13 小时前
Android .so 文件压缩
android·so·包体积
龚礼鹏3 小时前
深入解析 Android Automotive (AAOS) 启动流程与 CarService 核心机制(基于 Android 16 最新源码视角)
android
rosmis3 小时前
agent各指标定义
android·java·开发语言
风样滴男人哟5 小时前
PHP特性之反射类ReflectionClass机制
android·开发语言·php
小孔龙6 小时前
RenderNode 与 DisplayList:Android 硬件加速的绘制记录与复用
android·性能优化
qizayaoshuap6 小时前
鸿蒙 ArkTS 实战:搜索列表 城市实时过滤(示例 94)
android·华为·harmonyos
朝星6 小时前
Framework筑基之Handler消息机制5(应用层)
android