android - SystemProperties.set 需要什么 linux 权限才能工作? (安卓)

标签 android linux embedded-linux

要使 SystemProperties.set 正常工作,需要哪些 linux 权限? (安卓)

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

它正在运行

android:sharedUserId="android.uid.systemui"

在 Android.mk 中

LOCAL_CERTIFICATE := platform

但是,我发现我无法创建、写入或设置属性。 在控制台中,我可以执行 getprop、setprop。 但是,我的程序无法创建它。

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));
        }

日志:

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 = 

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

最佳答案

我接受了 fadden 的答案,但经过更多探索后发现它是不正确的,但它对获得正确答案很有帮助。

第一步: 查看 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 list 文件中,以上面数组中提到的用户 ID 运行。

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

关于android - SystemProperties.set 需要什么 linux 权限才能工作? (安卓),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27611738/

相关文章:

android - ExoPlayer 有时会从 url 返回 mp3 文件的负持续时间

android - Android 单元测试的正确方法

linux - 否定 bash 脚本中的 if 条件

android - 在 c 文件名的开头和结尾之后使用双下划线 ( __ ) 的目的是什么?

linux-kernel - 从 FIQ 处理程序调用 Linux C 代码时出现问题

java - 创建继承的Activity时出现StackOverFlowError

java - 使用Gradle编译Android项目时出现"Error: cannot find symbol"

linux - 使用带有不可打印分隔符的 cut

linux - 如何检测子模块中父 Git 存储库的正确 GIT_DIR 和 GIT_WORK_TREE

调用 execve()/execve() 时的 Linux kill 进程