SystemProperties_SOP

本文介绍了Android属性系统的概念及其重要性,详细阐述了通过native code、Java code和shell脚本三种方式读取和设置属性的方法。此外,还提供了权限提升的具体步骤及注意事项。

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

属性系统是android的一个重要特性。它作为一个服务运行,管理系统配置和状态。所有这些配置和状态都是属性。每个属性是一个键值对(key/value pair),其类型都是字符串。

首先:在android中设置这一属性,目的是定义一些属性供其它应用或库读取使用。

如何读取/设置属性

         Android上有三种主要途径来get/set属性。


1、  native code

当编写本地应用程序时,可以使用property_get和property_set 这两个API来读取/设置属性。要使用它们,我们需要include cutils/properties.h,并链接libcutils库。

(未尝试,这个可能不需要源码并编译吧??)

2、  java code

在Java包(java.lang.System)中提供有System.getProperty和System.setProperty方法。但值得注意的是,尽管这两个API在语义上等同native函数,但其将数据存储于完全不同的位置。实际上,dalvik VM使用一个哈希表来存储这些属性。所以,用这两个API存储的属性是独立的,不能存取native属性,反之亦然。

然而Android有一个内部隐藏类(@hide,对SDK不可见)android.os.SystemProperties来操纵native属性。其通过jni来存取native属性库。

(这直接说明,在没有整个工程源码并进行编译的情况下,是不可能使用该方式了。)

3、  shell脚本

Android提供getprop和setprop命令行工具来获取和更新属性。其依赖libcutils实现。

 (未尝试)

以上翻译自http://rxwen.blogspot.com/2010/01/android-property-system.html,有修正。

例子:在java code中读取设置SystemProperties

创建与修改android属性用Systemproperties.set(name,value),获取android属性用Systemproperties.get(name),需要注意的是android属性的名称是有一定的格式要求的,如下: 前缀必须用system\core\init\property_service.c中定义的前缀 ,进行系统属性设置的程序也必须有相应的进程权限

如何将android程序的权限提升到system权限?方法是这样的:

1、在AndroidManifest.xml中,在manifest加入android:sharedUserId="android.uid.system "。

2、在Android.mk中,將LOCAL_CERTIFICATE:= XXX修改成LOCAL_CERTIFICATE := platform 。

经过以上两步就可以把ap的权限提升到system权限了。 但是用这种方法提升权限有两个弊端(即对上述方式2中红字的解释),如下:

A、程序的拥有都必须有程序的源码;

B、程序的拥有都还必须有android开发环境,就是说自己能make整个android系统。


 3、附小例代码:

package com.test.shared;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.os.SystemProperties;

public class TestReadActivity extends Activity {
	
	final static String name = "com.qobo.accelerometerSetting.";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        SystemProperties.set("runtime.testa","123456");
        String str = SystemProperties.get("runtime.testa");
        Log.d("SYS", str);
    }
}

更多参考:

Android Property System | Android属性系统原理介绍http://blog.youkuaiyun.com/jackyu613/article/details/6136620


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值