2014-12-22 154 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

相關問題