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);
相关推荐
LCD液晶屏2 小时前
京瓷液晶屏停产替代:杭州立煌科技工业 LCD 解决方案
android·科技
2501_932750264 小时前
Android 自定义 View 入门
android
事圆则缓6 小时前
Android 开启线程的几种方式:Thread、线程池、HandlerThread 与协程
android
半摆烂日常21 小时前
低代码平台API对接实践:接口鉴权与数据同步的完整实现
android·低代码·rxjava
事圆则缓21 小时前
volatile 使用场景全解析:它能保证什么,又解决不了什么
android
蒲公英内测分发1 天前
智能投影仪参加海外展会,未上架的 Android 配套 App 怎么让客户限时试用?
android
ii_best1 天前
按键精灵手机端开发安卓版实战:手写一个可最小化、可拖动的「运行日志悬浮窗」(附完整 源码 + 踩坑记录)
android·ios·智能手机·自动化·ai编程·按键精灵
终端安全笔记1 天前
安卓做 MDM 管控,先分清三种注册入口
android·安全·智能手机
乌萨达1 天前
手机模拟器安卓怎么用?电脑安装应用、玩手游与账号同步指南
android·智能手机·电脑·雷电模拟器
美狐美颜SDK开放平台1 天前
Android与iOS直播APP美颜有什么区别?视频美颜SDK开发详解
android·ios·音视频·视频美颜sdk