SystemProperties.set需要什么linux权限才能工作? (机器人)

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 = 

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

我已经接受了法登的答案,但经过更多的探索,发现这是不正确的,虽然它是非常有帮助的,以达到正确的答案。

第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" > 

这取决于。 在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 ,则不能设置系统属性。