2014-12-22 106 views
2

SystemProperties.set需要什么linux权限才能正常工作? (android)SystemProperties.set需要什么linux权限才能正常工作? (android)

我正在编写一个应用程序,运行在Android设备上的系统/应用程序。

它正在作为

机器人:sharedUserId = “android.uid.systemui”

在Android.mk

LOCAL_CERTIFICATE:=平台

但是,我发现我无法创建,编写o r设置一个属性。 在控制台中,我可以执行getprop,setprop。 但是,我的程序无法创建它。

LS -l /数据/属性/

表明它不存在。

 Slog.d(TAG, "key is not set, will set APPLE"); 
     SystemProperties.set(keyName, favorite); 
     if(SystemProperties.get(keyName).equals(favorite)) { 
      Slog.d(TAG, keyName + " = " + SystemProperties.get(keyName)); 
     } else { 
      Slog.e(TAG, "setting SystemProperties failed. value written = " + SystemProperties.get(keyName)); 
     } 

的logcat:

Line 1365: D/MyTag(2593): keyName: persist.fruit.user.favorite 
Line 1373: D/MyTag(2593): keyName has value [] 
Line 1377: D/MyTag(2593): key is not set, will set APPLE 
Line 1381: E/MyTag(2593): setting SystemProperties failed. value written = 

显然这也许是权限不足的问题 - 但哪些?

回答

5

我已经接受了fadden的回答,但经过更多的探索,发现它是不正确的,虽然它是非常有用的在达到正确的答案。

第1步: 看看数组中https://android.googlesource.com/platform/system/core/+/kitkat-release/init/property_service.c

{ "persist.sys.",  AID_SYSTEM, 0 }, 

你的属性的名称应与阵列相同的密钥字符串开头。 因此,我不得不改变我的属性名称为“persist.sys.fruit.user.favorite”

第2步:在 您的Android清单文件,运行如上阵列中提到的用户ID。

<manifest android:sharedUserId="android.uid.system" > 
1

这取决于。在4.4“KitKat”版本中,该列表包含在init的property_service.c(查看第65行)中。例如,您可以看到名为debug.*的属性可以由“system”或“shell”用户更新。 (系统识别用户ID为数字值的映射可以在android_filesystem_config.h找到。)

一些性质,如ro.*persist.*,和ctl.*,具有附加的限制或特殊行为。

在Android 5.0“棒棒糖”中,列表移动了,但行为是一样的。

使用adb shell ps来查看您的应用正在运行的用户标识。如果它不是systemshell,它将无法设置系统属性。

+0

感谢您的回复。我的权限'persist.fruit.user.favorite'不在property_service.c的列表中。如果我理解正确,你是否说我将不得不编辑文件并添加我的'persist.fruit.user.favorite'? – likejiujitsu

+0

我正在使用4.4 Kitkat – likejiujitsu

+1

系统属性机制很复杂,可能会更改。我认为你应该认真考虑不使用系统属性,无论你想要做什么。 – fadden

相关问题