getprop 是 Android 系统中一个非常核心和常用的命令行工具,用于读取和设置系统属性,这些属性在 Android 系统的启动、运行和配置中扮演着至关重要的角色。

(图片来源网络,侵删)
核心概念:什么是系统属性?
系统属性是键值对形式的配置信息,存储在内存中,它们在整个 Android 系统中广泛使用,用于:
- 系统配置:
ro.build.version.release存储 Android 版本号。 - 硬件信息:
ro.product.model存储设备型号。 - 服务控制:
ctl.start和ctl.stop用于启动和停止系统服务。 - 进程间通信:不同的系统服务和应用可以通过属性来传递信息。
属性分为两种类型:
- 持久属性:以
ro.(read-only) 开头,这些属性在系统启动时从default.prop、build.prop等文件中读取,一旦设置就不能被修改,它们定义了系统的核心特征。 - 非持久属性:以其他前缀开头(如
persist.,net.,debug.等),这些属性可以在运行时被修改,但通常只有persist.前缀的属性会在设备重启后保留(它们会被写入/data/property目录下的文件中)。
getprop 命令的基本语法和参数
getprop 命令非常灵活,可以在 ADB shell 或设备本身的终端中直接使用。
查看所有属性
这是最常用的功能之一,可以列出系统中几乎所有的属性。

(图片来源网络,侵删)
语法:
getprop
说明:
- 执行此命令后,你会看到一个格式化的列表,每一行通常显示为:
[key]: [value]。 - 属性列表非常长,包含系统所有服务的状态和配置,在终端中,你可能需要使用
more或less命令来分页查看:getprop | more
或者
getprop | less
示例输出片段:
[debug.signed_kernel_boot_image]: [true]
[dalvik.vm.stack-trace-file]: /data/anr/traces.txt
[dev.bootcomplete]: [1]
[dhcp.wlan0.dns1]: [8.8.8.8]
[dhcp.wlan0.dns2]: [8.8.4.4]
[dhcp.wlan0.gateway]: [192.168.1.1]
[dhcp.wlan0.ipaddress]: [192.168.1.10]
[dhcp.wlan0.leasetime]: [86400]
[dhcp.wlan0.masklength]: [24]
[init.svc.bootanim]: [running]
[init.svc.console]: [running]
[init.svc.vold]: [running]
[net.dns1]: [8.8.8.8]
[net.dns2]: [8.8.4.4]
[net.hostname]: [user-device]
[net.ppp.ppp0.dns1]: [8.8.8.8]
[net.ppp.ppp0.dns2]: [8.8.4.4]
[ro.adb.secure]: [1]
[ro.build.date]: [Wed Aug 10 10:15:23 CST 2025]
[ro.build.date.utc]: [1660168523]
[ro.build.fingerprint]: [samsung/a52qxx/a52q:12/SP1A.210812.016/S918BXXU2AVL4:user/release-keys]
[ro.build.id]: [SP1A.210812.016]
[ro.build.version.release]: [12]
[ro.build.version.sdk]: [31]
[ro.product.brand]: [samsung]
[ro.product.device]: [a52qxx]
[ro.product.manufacturer]: [samsung]
[ro.product.model]: [SM-A526B]
[ro.product.name]: [a52qxx]
[ro.serialno]: [R58M40B8LX]
[ro.setupwizard.mode]: [OPTIONAL]
...
查看单个属性
当你知道具体的属性键时,可以使用此命令来快速获取其值。
语法:
getprop <key>
说明:
- 如果属性存在,命令会直接返回其值。
- 如果属性不存在,命令会返回空字符串,并且没有错误提示。
示例:
# 查看 Android 版本 getprop ro.build.version.release # 输出: 12 # 查看设备型号 getprop ro.product.model # 输出: SM-A526B # 查看 ADB 是否安全模式(1为是,0为否) getprop ro.adb.secure # 输出: 1
设置属性
getprop 也可以用来设置属性,但通常不推荐普通用户随意修改,因为这可能会影响系统稳定性。
语法:
setprop <key> <value>
说明:
- 这个命令会立即在内存中设置属性的值。
- 对于
ro.(只读) 属性,此命令会失败。 - 对于
persist.属性,修改后会立即生效,并且在下次重启后也会保留。 - 对于其他普通属性,修改会立即生效,但重启后会恢复为默认值。
示例:
# 设置一个自定义属性(重启后会丢失) setprop my.custom.property "hello world" # 查看刚刚设置的属性 getprop my.custom.property # 输出: hello world # 修改一个持久属性,使其在重启后生效 setprop persist.sys.timezone "America/New_York"
常用且重要的系统属性列表
以下是一些开发者和技术爱好者经常关注的属性:
| 属性键 | 说明 | 示例值 |
|---|---|---|
ro.build.version.release |
Android 大版本号 | 12, 13, 14 |
ro.build.version.sdk |
Android SDK 版本号 | 31, 32, 33, 34 |
ro.build.version.security |
安全补丁级别 | 2025-08-05 |
ro.product.model |
设备型号 | Pixel 7 Pro, SM-G998B |
ro.product.brand |
设备品牌 | google, samsung |
ro.product.device |
设备代号 | panther, a52qxx |
ro.build.fingerprint |
系统指纹,唯一标识一个系统编译 | google/panther/panther:13/TQ3A.230901.001/20251001193049:user/release-keys |
ro.serialno |
设备序列号 | R58M40B8LX |
ro.bootmode |
启动模式 | normal, recovery, sideload, factory |
ro.debuggable |
是否可调试 | 1 (是), 0 (否) |
ro.adb.secure |
ADB 安全模式,决定是否需要 root 才能进行 ADB 连接 | 1 (是), 0 (否) |
ro.build.date |
系统编译日期 | Wed Aug 10 10:15:23 CST 2025 |
service.adb.tcp.port |
ADB TCP 连接端口,设置为 5555 后可通过网络连接 |
5555 |
persist.sys.timezone |
系统时区 | Asia/Shanghai |
net.hostname |
设备主机名 | user-device |
实践场景和技巧
场景1:如何通过 ADB 使用 getprop?
在电脑上,你需要先安装 Android SDK Platform Tools,然后使用 adb shell 命令进入设备的 shell 环境。
# 1. 连接设备并进入 shell adb shell # 2. 在 shell 内部执行 getprop getprop ro.build.version.release # 或者直接在电脑上执行,将命令传递给 shell adb shell "getprop ro.build.version.release"
场景2:如何查找包含特定关键词的属性?
当属性列表太长时,可以使用 grep 命令来过滤。
# 查找所有与 "build" 相关的属性 getprop | grep "build" # 查找所有值为 "running" 的属性(通常表示正在运行的服务) getprop | grep "\[running\]" # 查找所有 DNS 相关的属性 getprop | grep "dns"
场景3:如何判断设备是否为模拟器?
可以通过检查一系列特定属性来判断设备是真实设备还是模拟器(如 Android Emulator 或 Genymotion)。
# 检查 ro.kernel.qemu 属性是否存在(模拟器通常会有)
if getprop ro.kernel.qemu; then
echo "This is an emulator."
else
echo "This is a physical device."
fi
# 其他检查项
# 1. ro.product.model 包含 "sdk_" 或 "vbox86p"
# 2. ro.build.characteristics 包含 "emulator"
# 3. ro.hardware 包含 "goldfish" 或 "ranchu"
重要注意事项
- 权限:在非 root 的设备上,普通应用无法直接读取或修改大部分系统属性。
getprop主要供系统应用和具有READ_PHONE_STATE等高权限的应用使用,以及供开发者在 ADB shell 中调试。 - 稳定性:不要随意使用
setprop修改你不熟悉的属性,特别是ro.和核心服务相关的属性,这可能导致系统崩溃或功能异常。 getpropvsadb shell getprop:两者功能相同。adb shell getprop是将getprop命令发送到目标设备上执行,如果你在设备本身的终端(如 Termux)中,直接使用getprop即可。- 属性文件:系统属性的初始值来源于多个文件,最重要的包括:
/system/default.prop/system/build.prop/vendor/build.prop/product/build.prop/system/etc/prop.default/data/property/*(用于persist.属性)
| 命令 | 功能 | 示例 |
|---|---|---|
getprop |
列出所有系统属性 | getprop \| less |
getprop <key> |
获取单个属性的值 | getprop ro.build.version.release |
setprop <key> <value> |
设置属性的值(谨慎使用) | setprop persist.sys.timezone "UTC" |
getprop \| grep <keyword> |
搜索包含特定关键词的属性 | getprop \| grep "dns" |
掌握 getprop 是深入理解 Android 系统和进行高级调试的关键技能之一,希望这份详细的解析对你有帮助!
