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);
相关推荐
xiaoshiquan12067 小时前
Gradle 复合构建:宿主项目直接依赖 SDK 源码模块的配置实践
android
小师兄吃牛肉9 小时前
Android Studio 2025 专业介绍:新特性、性能与开发体验全面解析
android·ide·android studio
美摄科技9 小时前
安卓离线类美颜特效SDK
android
fengci.11 小时前
BUUCTF(困难部分)
android·开发语言·前端·学习·php
花间相见12 小时前
【计算基础|MySQL11】事务与隔离级别
sql·mysql·adb·架构
传奇开心果13 小时前
【Compose Multiplatform跨端声明式UI实用技术】第9课:跨平台 ViewModel 与状态架构
android·kotlin
用户693717500138413 小时前
当你向领导申请 AI 编程工具预算时,如果领导追问“能提效多少,有量化数据吗”,你该怎么回答?
android·后端·ios
hunterandroid14 小时前
WorkManager 后台任务调度实战:从一次性任务到周期执行
android
事圆则缓14 小时前
Android 屏幕适配的前世今生
android
andyweike15 小时前
kotlin dsl library工程怎么配置
android·开发语言·kotlin