SystemProperties.set需要什么linux权限才能工作? (机器人)
我正在编写一个应用程序在Android设备上的系统/应用程序中运行。
它正在运行
机器人:sharedUserId = “android.uid.systemui”
在Android.mk
LOCAL_CERTIFICATE:=平台
但是,我发现我无法创build,编写或设置属性。 在控制台中,我可以做一个getprop,setprop。 但是,我的程序不能创build它。
ls -l / data / property /
显示它不存在。
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 =
显然也许这是一个权限不足的问题 – 但哪些?
我已经接受了法登的答案,但经过更多的探索,发现这是不正确的,虽然它是非常有帮助的,以达到正确的答案。
{ "persist.sys.", AID_SYSTEM, 0 },
你的属性的名字应该以数组中相同的键字符串开头。 因此我不得不将我的属性名称更改为“persist.sys.fruit.user.favorite”
第2步:在你的android清单文件中,以上面的数组中提到的用户ID运行。
<manifest android:sharedUserId="android.uid.system" >
这取决于。 在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
来查看您的应用程序正在运行的用户标识。 如果它不是system
或shell
,则不能设置系统属性。