真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何在Android項目中設(shè)置Property模塊的鍵值

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)如何在Android項目中設(shè)置Property模塊的鍵值,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)公司服務(wù)項目包括大通網(wǎng)站建設(shè)、大通網(wǎng)站制作、大通網(wǎng)頁制作以及大通網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,大通網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到大通省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

Android中Property模塊的鍵值設(shè)置

Prop模塊是保存少量的全局共享信息,其保存的數(shù)據(jù)具有信息量少,跨進程共享數(shù)據(jù)等特性;每一條信息包含兩個屬性,鍵名和鍵名對應(yīng)的鍵值,例如:

ro.product.locale.language=en

“Ro.product.locale.language”表示本產(chǎn)品本地語言,表示該條信息的名字,“en”表示該條信息的取值為英文,這樣任何一個應(yīng)用程序就知道本機使用的語言情況。在接口設(shè)計時也需要有兩個參數(shù),name和value(鍵名和鍵值),方法有set和get,例如:

Set(String name,String value);
String Get(String name);

當(dāng)然,無論上層怎么設(shè)計,在C底層鍵名name和鍵值value都是以char數(shù)組進行保存的,因為設(shè)計者并不知道傳入name和value的數(shù)據(jù)大小。

在android.os.SystemProperties類中對prop模塊進行了封裝,該類使用Set和Get直接進行設(shè)置和獲取,當(dāng)然這些java接口最終還是調(diào)用系統(tǒng)接口完成的。在jni層有一個property_service.c文件,文件中有對應(yīng)的實際處理接口,這些接口即可以給java調(diào)用,也可以一些系統(tǒng)命令使用(例如setprop和getprop命令就是調(diào)用這些接口方法)。SystemProperties類中的get方法沒有什么限制,但是set方法就有權(quán)限的限制,應(yīng)用程序是不能隨便使用set接口的。

SystemProperties類的訪問必須要有系統(tǒng)權(quán)限,并且應(yīng)用的uid必須是系統(tǒng)id:1000或者為root:0。因為set和get操作不同,set時該操作建立了一個socket管道通過發(fā)cmd出去完成的,服務(wù)端接收cmd同時比較權(quán)限,關(guān)鍵代碼如下:

if (uid == AID_SYSTEM || uid == AID_ROOT)
  return check_control_mac_perms(name, sctx);

只有權(quán)限是AID_SYSTEM(系統(tǒng)ID)和AID_ROOT(root用戶ID)才能通過驗證;而get沒有權(quán)限檢查,不過試想也正常,如果誰都能進行修改,那這黑客也太好當(dāng)了。當(dāng)然個人覺得,對于set的設(shè)計使用權(quán)限驗證無可厚非,但對于查看系統(tǒng)屬性這樣的功能(get),應(yīng)該還可以進行細分,比如有些屬性是不重要的,任何進程和用戶都可以讀取使用;當(dāng)然有些敏感的數(shù)據(jù)在指定讀取權(quán)限時也可以進行指定(由于時間有限本人沒有更深入的細讀,也不知道android系統(tǒng)是否完成了這些功能)。

設(shè)置鍵值名時需要注意的地方

在進行設(shè)置時,包含兩個參數(shù),變量名和變量值,形如:[[key]]: [[value]]。如果原來沒有對應(yīng)的key值,那么就會在該模塊中創(chuàng)建一個新的鍵值,否則覆蓋原有鍵值。對于鍵值名在設(shè)計時最好按規(guī)范書寫,比如“類名.模塊.用途”,這樣清晰可記而且不容易沖突。另外,如果屬性名稱以“ro.”開頭,那么這個屬性被視為只讀屬性。一旦設(shè)置,屬性值不能改變。這個判斷動作是在property_service.c中的property_set函數(shù)中完成的:

if(!strncmp(name, "ro.", 3)) return -1;

如果是以“persist.”開頭,當(dāng)設(shè)置這個屬性時,其值也將寫入/data/property/目錄中,鍵值名就是該屬性名,下次開機重新加載和讀取該屬性;該文件中的load_persistent_properties函數(shù)就是用來完成該功能。特別的屬性名以“net.change”開頭那么其值中必須以“net.”開頭,例如鍵值名為[net.change]: 那么鍵值為[net.qtaguid_enabled],這個設(shè)置目前還沒想到有什么作用。

Shell中對應(yīng)的prop操作命令

在android的shell中也有對應(yīng)的命令進行操作,有如下三個命令:

  • getprop [keyname] Keyname為需要獲取的鍵值名,如果沒有參數(shù)則打印全部的鍵值信息。

  • setprop [keyname] [value] Keyname為需要獲取的鍵值名,value為設(shè)置的值,這個值為字符串。

  • watchprops 監(jiān)聽系統(tǒng)屬性的變化,如果期間系統(tǒng)的屬性發(fā)生變化則把變化的值顯示出來。

在init.rc中也使用setprop來設(shè)置一些屬性狀態(tài)。

補充setprop:

Property模塊的鍵值設(shè)置

Prop模塊是保存少量的全局共享信息,其保存的數(shù)據(jù)具有信息量少,跨進程共享數(shù)據(jù)等特性;每一條信息包含兩個屬性,鍵名和鍵名對應(yīng)的鍵值?!癛o.product.locale.language”表示本產(chǎn)品本地語言,表示該條信息的名字,“en”表示該條信息的取值為英文,這樣任何一個應(yīng)用程序就知道本機使用的語言情況。

Android終端屬性prop操作的底層實現(xiàn)

在init.c文件中main函數(shù)中會調(diào)用start_property_service(),而它分別調(diào)用load_properties_from_file函數(shù)讀取PROP_PATH_SYSTEM_BUILD(/system/build.prop)、PROP_PATH_SYSTEM_DEFAULT(/system/default.prop)和PROP_PATH_LOCAL_OVERRIDE(/data/local.prop)存放系統(tǒng)屬性的文件并設(shè)置到系統(tǒng)屬性。

上述就是小編為大家分享的如何在Android項目中設(shè)置Property模塊的鍵值了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)頁名稱:如何在Android項目中設(shè)置Property模塊的鍵值
文章分享:http://weahome.cn/article/gcdiis.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部