用java语句调用getprop和setprop命令来获得prop中的数据

本文介绍了Android系统中配置文件的使用,包括getprop、setprop、watchprop命令的使用方法,以及如何在Java中调用Linux指令进行系统属性的获取与设置。同时,文章还演示了使用watchprops命令监听系统属性变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键词:android  linux  getprop  setprop  wathcprop 

系统:android2.3 android4.0

一、 配置文件

在android系统中,有一些初始化的配置文件,例如:

[html]  view plain copy
  1. /init.rc  
  2. /default.prop  
  3. /system/build.prop  

文件里面里面配置了开机设置的系统属性值,这些属性值,可以通过getprop获取,setprop设置,如下图:


二、getprop stopprop watchprop 使用和它的格式

1、getprop[key]

获取指定key的配置值,如果不带参数,只是getprop则是显示系统所有的配置值,输入命令,如下图:

#getprop


2、setprop[key] [value] 设置指定key的属性值

如:setprop

3、getprop setprop 使用实例

[html]  view plain copy
  1. root@android:/ # getpropdhcp.wlan0.leasetime   //得到的值为3600  
  2. 3600  
  3. root@android:/ # setprop dhcp.wlan0.leasetime3000  //设定值为3000  
  4. root@android:/ # getprop  
  5. [dhcp.wlan0.ipaddress]: [192.168.1.113]  
  6. [dhcp.wlan0.leasetime]:[3000]                    //再用getporp查看设定的值  
  7. [dhcp.wlan0.mask]: [255.255.255.0]  


4、watchprops

监听系统属性的变化,如果期间系统的属性发生变化则把变化的值显示出来

[html]  view plain copy
  1. /system # watchprops  
  2. 1307501833 sys.settings_system_version = '37'  
  3. 1307501836 sys.settings_system_version ='38'  
  4. 1307501862 persist.sys.timezone ='Asia/Hong_Kong'  

三、toolbox子命令

1、命令实现代码位置

其实这三个命令都是toolbox的子命令,如果有兴趣的可以看在android源码中看到其对应的源码:

system/core/toolbox/

一般而言,我们在串口中输入getprop指令,会出现很多类似键值对的系统变量值,如下图:


2、java中调用linux的指令

(1)、在java中如何调用linux的指令,主要通过如下代码实现:

[java]  view plain copy
  1. Process process =Runtime.getRuntime().exec(com);  
  2. InputStreamReader ir = newInputStreamReader(process.getInputStream());  
  3. BufferedReader input = newBufferedReader(ir);  
(2)、getprop和setprop既然都是命令,也用上面的方面尝试得到值

  getprop 用法:getprop [key]

  setprop用法:setprop [key] [value]

  注:实际中是没有中括号的。

所以用法同上:

[java]  view plain copy
  1. Process process =Runtime.getRuntime().exec("getprop ro.runtime.firstboot");  
  2. InputStreamReader ir = newInputStreamReader(process.getInputStream());  
  3. BufferedReader input = newBufferedReader(ir);  

http://hi.baidu.com/gongting14/item/eaf28a177d93d8c438cb306a

<think>好的,我现在需要解决用户提出的关于libc访问属性'config.disable_cameraservice'被拒绝的问题。首先,我需要理解这个问题的背景可能的原因。用户提到的是在Android系统中遇到了权限问题,具体涉及到libc库访问某个配置属性被拒绝。根据用户提供的引用内容,涉及到了振动权限修改PhoneWindowManager.java文件,这可能与系统权限配置或系统服务管理有关。 首先,我应该考虑这个错误是否与SELinux策略有关。在Android系统中,SELinux用于强制执行访问控制策略,限制进程系统服务之间的交互。如果某个进程试图访问未被允许的资源或属性,SELinux可能会阻止并记录访问拒绝的日志。因此,用户需要检查SELinux的avc日志,确认是否有相关的拒绝条目。查看日志可以使用命令`adb logcat | grep avc`,或者在设备的`/proc/kmsg`中查找相关信息。如果有对应的avc denied日志,就需要在SELinux策略文件中添加相应的允许规则,比如在`*.te`文件中添加`allow`语句。 其次,属性权限的问题也可能导致此错误。Android系统中的属性由init进程管理,每个属性的访问权限在`property_contexts`文件中定义。用户需要检查这个文件,确认`config.disable_cameraservice`属性的上下文权限是否正确。如果该属性没有被正确配置,可能需要修改`property_contexts`文件,添加对应的条目,例如`config.disable_cameraservice u:object_r:system_prop:s0`,并设置适当的权限。同时,使用`getprop``setprop`命令验证属性的当前状态可访问性,确保进程有权限进行读写。 接下来,用户可能需要检查系统服务的配置。例如,`disable_cameraservice`属性可能用于控制摄像头服务的启用或禁用。如果该属性被设置为true,可能导致摄像头服务无法启动,进而引发其他问题。用户需要确认该属性的当前值,并根据需要调整。此外,如果用户是在修改系统代码或添加新功能时遇到此问题,可能需要检查相关的代码修改是否正确,特别是与属性操作相关的部分,如`SystemProperties.set()`或`get()`方法的使用是否正确,是否有拼写错误或权限缺失。 另外,用户提到的引用[2]中涉及修改PhoneWindowManager.java,这可能涉及到系统策略或权限管理部分的代码。如果在此文件中进行了修改,可能需要关联地调整与摄像头服务相关的权限或属性访问逻辑。例如,某些系统级操作可能会触发对特定属性的访问,如果权限不足,就会导致访问拒绝。 还有,考虑到Android系统的版本差异,不同版本的SELinux策略属性管理方式可能有所不同。用户需要确认其系统版本,并参考相应版本的开发文档进行调整。例如,在Android 10及以上版本中,对属性的管理SELinux的策略可能有更严格的要求。 最后,如果上述步骤无法解决问题,建议用户提供更详细的日志信息,特别是avc拒绝的详细日志,以便更精确地定位问题。同时,参考官方文档或社区讨论,查找是否有其他开发者遇到类似问题及其解决方案。例如,某些情况下可能需要添加新的SELinux域或修改现有的策略模块,以允许特定的访问请求。 总结解决步骤:检查SELinux策略,调整属性权限,验证系统服务配置,审查代码修改,查阅相关文档社区资源。通过这些步骤,逐步排查解决libc访问属性被拒绝的问题。</think>### 解决 `libc access denied config.disable_cameraservice` 的方法 #### 1. **检查 SELinux 策略** Android 的 SELinux 可能阻止了对属性的访问。需查看 `avc: denied` 日志,确认是否涉及 SELinux 权限问题。 - **查看 SELinux 拒绝日志**: ```bash adb logcat | grep avc ``` 若日志显示类似 `avc: denied { read } for property config.disable_cameraservice`,需在 SELinux 策略文件(如 `system/sepolicy/*.te`)中添加允许规则: ```te allow your_domain system_prop:file { read getattr }; ``` 其中 `your_domain` 是发起访问的进程的 SELinux 域(可通过日志获取)[^2]。 #### 2. **调整属性权限** Android 系统属性(property)的访问权限定义在 `property_contexts` 文件中。 - **修改 `property_contexts`**: 在 `system/sepolicy/private/property_contexts` 中添加: ``` config.disable_cameraservice u:object_r:system_prop:s0 ``` 确保属性被标记为 `system_prop` 类型,并赋予目标进程读取权限。 #### 3. **验证属性状态** - **检查属性值**: ```bash adb shell getprop config.disable_cameraservice ``` 若返回空或非预期值,需确保属性在代码中被正确设置: ```java import android.os.SystemProperties; SystemProperties.set("config.disable_cameraservice", "false"); ``` 注意:修改系统属性可能需要 `root` 或 `system` 权限[^1]。 #### 4. **检查代码逻辑** - **确保访问属性的代码正确**: 若在 C/C++ 层使用 `__system_property_get()` 或 Java 层使用 `SystemProperties.get()`,需确认调用方权限。 示例(C++): ```cpp char value[92]; if (__system_property_get("config.disable_cameraservice", value) > 0) { // 处理属性值 } ``` #### 5. **重新编译并刷机** 修改 SELinux 策略或属性权限后,需重新编译系统镜像并刷机: ```bash make -j8 && adb reboot bootloader fastboot flash system system.img ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值