本發(fā)明涉及應(yīng)用交互領(lǐng)域,具體涉及一種用于判斷安卓系統(tǒng)是否具有root權(quán)限的方法和一種用于判斷安卓系統(tǒng)是否具有root權(quán)限的系統(tǒng)。
背景技術(shù):
對于運(yùn)行于安卓系統(tǒng)上的軟件,在運(yùn)行的過程中,經(jīng)常會對系統(tǒng)的root權(quán)限環(huán)境進(jìn)行判斷,若系統(tǒng)具有root權(quán)限,則運(yùn)行于系統(tǒng)上的軟件獲取root權(quán)限后能夠開啟一些新的特性,從而提升用戶對軟件或系統(tǒng)的使用體驗(yàn)。root權(quán)限為系統(tǒng)權(quán)限的一種,獲得root權(quán)限,相當(dāng)于獲得系統(tǒng)的最高權(quán)限。
對于系統(tǒng)是否具有root權(quán)限,常規(guī)的判斷方法是通過執(zhí)行su命令的成功與否,來判斷系統(tǒng)是否具有root權(quán)限,在執(zhí)行su命令時(shí),會彈窗告知用戶系統(tǒng)是否具有root權(quán)限和某軟件正在進(jìn)行系統(tǒng)root權(quán)限的查詢,su命令用于變更系統(tǒng)使用者身份,su命令的執(zhí)行以及彈窗程序的運(yùn)行,極大地增加了系統(tǒng)內(nèi)存消耗,且判斷結(jié)果往往不夠準(zhǔn)確。
技術(shù)實(shí)現(xiàn)要素:
針對現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種用于判斷安卓系統(tǒng)是否具有root權(quán)限的方法和一種用于判斷安卓系統(tǒng)是否具有root權(quán)限的系統(tǒng),能夠有效提高系統(tǒng)root權(quán)限的判定效率。
為達(dá)到以上目的,本發(fā)明采取的技術(shù)方案是:包括:
步驟S1:獲取系統(tǒng)PATH環(huán)境變量的路徑;
步驟S2:遍歷PATH環(huán)境變量路徑下的文件,判斷PATH環(huán)境變量路徑下的文件中是否含有su文件,若有,則表明系統(tǒng)具有root權(quán)限,若沒有,則表明系統(tǒng)沒有root權(quán)限;
步驟S3:將步驟S2的判斷結(jié)果存于數(shù)據(jù)存儲接口的文件中,當(dāng)再次需要判斷系統(tǒng)是否具有root權(quán)限時(shí),直接讀取數(shù)據(jù)存儲接口文件中的root權(quán)限判斷結(jié)果。
在上述技術(shù)方案的基礎(chǔ)上,所述su文件為用于變更系統(tǒng)使用者身份的可執(zhí)行文件。
在上述技術(shù)方案的基礎(chǔ)上,步驟S1具體為:
S1.1:獲取PATH環(huán)境變量的路徑信息,所述路徑信息為一包括多個(gè)路徑的字符串;
S1.2:拆分路徑信息,得到PATH環(huán)境變量的所有路徑。
在上述技術(shù)方案的基礎(chǔ)上,步驟S2中,使用grep命令判斷PATH環(huán)境變量路徑下的文件中是否含有su文件。
在上述技術(shù)方案的基礎(chǔ)上,若在PATH環(huán)境變量路徑下的文件中找到su文件,則grep命令返回值為su文件的路徑;若在PATH環(huán)境變量路徑下的文件中沒有找到su文件,則grep命令返回值為空。
在上述技術(shù)方案的基礎(chǔ)上,所述數(shù)據(jù)存儲接口為SharedPreferences存儲接口。
在上述技術(shù)方案的基礎(chǔ)上,判斷結(jié)果存于數(shù)據(jù)存儲接口的步驟為:
S3.1:獲取安卓系統(tǒng)的SharedPreferences存儲接口;
S3.2:調(diào)用SharedPreferences存儲接口的編輯接口;
S3.3:將判斷結(jié)果儲存至編輯接口中,編輯接口將判斷結(jié)果提交至SharedPreferences存儲接口的文件中。
本發(fā)明還提供一種用于判斷安卓系統(tǒng)是否具有root權(quán)限的系統(tǒng),包括:
獲取模塊,其用于獲取PATH環(huán)境變量路徑下的文件;
判斷模塊,其用于判斷PATH環(huán)境變量路徑下的文件中是否含有su文件;
存儲模塊,其用于將判斷模塊的判斷結(jié)果存于數(shù)據(jù)存儲接口的文件中。
在上述技術(shù)方案的基礎(chǔ)上,所述存儲模塊還用于當(dāng)再次需要判斷系統(tǒng)是否具有root權(quán)限時(shí),直接讀取數(shù)據(jù)存儲接口文件中的判斷結(jié)果。
在上述技術(shù)方案的基礎(chǔ)上,所述su文件為用于變更系統(tǒng)使用者身份的可執(zhí)行文件。
與現(xiàn)有技術(shù)相比,本發(fā)明一種用于判斷安卓系統(tǒng)是否具有root權(quán)限的方法的優(yōu)點(diǎn)在于:
(1)通過查找su文件的方式來判斷系統(tǒng)是否具有root權(quán)限,相較于執(zhí)行su文件判斷系統(tǒng)是否具有root權(quán)限的方式,避免彈窗,同時(shí)減少系統(tǒng)功耗。
(2)針對su文件為可執(zhí)行文件的特性,僅在PATH環(huán)境變量路徑下的文件中進(jìn)行su文件的查找,縮小查找范圍,提高系統(tǒng)root權(quán)限的判斷速度和效率。
(3)將系統(tǒng)是否具有root權(quán)限的判斷結(jié)果存于數(shù)據(jù)存儲接口文件中,當(dāng)有軟件再次進(jìn)行系統(tǒng)是否具有root權(quán)限的查詢和判斷時(shí),直接讀取數(shù)據(jù)存儲接口文件中的判斷結(jié)果,告知軟件系統(tǒng)是否具有root權(quán)限,提高了查詢效率。
本發(fā)明一種用于判斷安卓系統(tǒng)是否具有root權(quán)限的系統(tǒng)的優(yōu)點(diǎn)在于:僅首次進(jìn)行系統(tǒng)是否具有root權(quán)限的判斷時(shí),通過查找su文件的方式進(jìn)行系統(tǒng)root權(quán)限的判斷,并將判斷結(jié)果存儲于數(shù)據(jù)存儲接口的文件中,當(dāng)再次需要進(jìn)行系統(tǒng)是否具有root權(quán)限的判斷時(shí),通過讀取數(shù)據(jù)存儲接口文件中的判斷結(jié)果便可知道系統(tǒng)是否具有root權(quán)限,極大地提高了判定速度,同時(shí)減少了系統(tǒng)因root權(quán)限判定而產(chǎn)生的功耗。
附圖說明
圖1為本發(fā)明一種用于判斷安卓系統(tǒng)是否具有root權(quán)限的方法的流程圖。
具體實(shí)施方式
以下結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)說明。
參見圖1所示,本發(fā)明提供一種用于判斷安卓系統(tǒng)是否具有root權(quán)限的方法,通過查找系統(tǒng)中是否含有su文件,從而快速而高效的對安卓系統(tǒng)的系統(tǒng)是否具有root權(quán)限進(jìn)行判斷。su文件為一種可執(zhí)行文件,通過執(zhí)行su文件,能夠變更系統(tǒng)使用者身份,一般情況下,若系統(tǒng)具有root權(quán)限,通過執(zhí)行su文件,即su命令,獲得系統(tǒng)的root權(quán)限,用戶或軟件則會擁有系統(tǒng)最高的使用權(quán)限。
本發(fā)明用于判斷安卓系統(tǒng)是否具有root權(quán)限的方法包括:
步驟S1:獲取安卓系統(tǒng)PATH環(huán)境變量的路徑。安卓系統(tǒng)是基于linux系統(tǒng)的,故安卓系統(tǒng)底層相關(guān)操作和linux系統(tǒng)完全一樣,linux系統(tǒng)是一種支持多用戶、多任務(wù)、多線程和多CPU的操作系統(tǒng),在linux系統(tǒng)中,環(huán)境變量主要提供linux系統(tǒng)運(yùn)行的一些公用變量,環(huán)境變量中有一PATH環(huán)境變量,PATH環(huán)境變量表示當(dāng)前查找可執(zhí)行文件的路徑信息,即只有在PATH環(huán)境變量路徑下的文件中可執(zhí)行文件才能夠被linux系統(tǒng)識別和運(yùn)行,同理,安卓系統(tǒng)的PATH環(huán)境變量路徑下的文件中可執(zhí)行文件才能夠被系統(tǒng)識別和運(yùn)行,基于此,本發(fā)明將su文件的查找范圍限于PATH環(huán)境變量的路徑下,從而縮短su文件的查找范圍,減少查找時(shí)間。
對于PATH環(huán)境變量的路徑的獲取,包括:
S1.1:獲取PATH環(huán)境變量的路徑信息,路徑信息為一包括多個(gè)路徑的字符串。PATH環(huán)境變量的路徑信息通過調(diào)用echo$PATH命令進(jìn)行獲取,獲取到的為一包括多個(gè)路徑的字符串,如下:
/bin:/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin
S1.2:拆分路徑信息,得到PATH環(huán)境變量的所有路徑。對于包括多個(gè)路徑的字符串,每個(gè)路徑間均通過冒號進(jìn)行分隔,此時(shí)調(diào)用split(“:”)函數(shù)對字符串進(jìn)行拆分,split(“:”)函數(shù)返回拆分字符串后形成的一個(gè)數(shù)組,數(shù)組中每一個(gè)元素即對應(yīng)一個(gè)路徑。
步驟S2:遍歷PATH環(huán)境變量路徑下的文件,判斷PATH環(huán)境變量路徑下的文件中是否含有su文件,若有,則表明系統(tǒng)具有root權(quán)限,若沒有,則表明系統(tǒng)沒有root權(quán)限。對于PATH環(huán)境變量所有路徑下的所有文件均會進(jìn)行遍歷,以查找判斷是否含有su文件。linux系統(tǒng)中常使用grep命令進(jìn)行查找操作,grep命令是一種強(qiáng)大的文本搜索工具,同理,在本發(fā)明的安卓系統(tǒng)中,也使用grep命令來查找后判斷PATH環(huán)境變量路徑下的文件中是否含有su文件,grep命令的使用代碼為:
Grep filename
若在PATH環(huán)境變量路徑下的文件找到su文件,則grep命令返回值為su文件的路徑,即表明系統(tǒng)具有root權(quán)限,su文件的路徑為找到su文件的PATH環(huán)境變量路徑下文件的路徑;若在PATH環(huán)境變量路徑下的文件中沒有找到su文件,則grep命令返回值為空,即表明系統(tǒng)沒有root權(quán)限。
步驟S3:將步驟S2的判斷結(jié)果存于數(shù)據(jù)存儲接口的文件中,當(dāng)再次需要判斷系統(tǒng)是否具有root權(quán)限時(shí),直接讀取數(shù)據(jù)存儲接口文件中關(guān)于系統(tǒng)是否具有root權(quán)限的判斷結(jié)果。本實(shí)施例中,數(shù)據(jù)存儲接口為SharedPreferences存儲接口,SharedPreferences存儲接口是安卓系統(tǒng)中的一個(gè)輕量級儲存類。后續(xù),當(dāng)再次需要判斷系統(tǒng)是否具有root權(quán)限時(shí),會直接讀取SharedPreferences數(shù)據(jù)存儲接口的文件,SharedPreferences數(shù)據(jù)存儲接口會將判斷結(jié)果直接返回,得到系統(tǒng)是否具有root權(quán)限的判斷結(jié)果,避免再次查找su文件重新進(jìn)行是否具有root權(quán)限的判斷,減少等待時(shí)間以及系統(tǒng)功耗。
判斷結(jié)果存于數(shù)據(jù)存儲接口的步驟包括:
S3.1:獲取安卓系統(tǒng)的SharedPreferences存儲接口,通過PreferenceManager.getDefaultSharedPreferences(Context)函數(shù)便能夠獲取到系統(tǒng)的SharedPreferences存儲接口;
S3.2:調(diào)用SharedPreferences存儲接口的編輯接口,編輯接口通過SharedPreferences存儲接口的edit()函數(shù)調(diào)用;
S3.3:將判斷結(jié)果儲存至編輯接口中,編輯接口調(diào)用將判斷結(jié)果提交至SharedPreferences存儲接口的文件中,具體的,調(diào)用編輯接口的putString函數(shù)將判斷結(jié)果儲存至編輯接口中,putString函數(shù)的功能為存儲,對于判斷結(jié)果的提交,通過安卓系統(tǒng)提供的commit函數(shù)將判斷結(jié)果提交至SharedPreferences存儲接口的文件中。若判斷結(jié)果為系統(tǒng)具有root權(quán)限,則SharedPreferences存儲接口文件中存儲的數(shù)據(jù)為true,若判斷結(jié)果為系統(tǒng)不具有root權(quán)限,則SharedPreferences存儲接口文件中存儲的數(shù)據(jù)為false。
本發(fā)明還提供一種基于上述方法的用于判斷安卓系統(tǒng)是否具有root權(quán)限的系統(tǒng),包括獲取模塊、判斷模塊和存儲模塊。
獲取模塊用于獲取PATH環(huán)境變量路徑下的文件;判斷模塊用于判斷PATH環(huán)境變量路徑下的文件中是否含有su文件,若含有su文件,則表明系統(tǒng)具有root權(quán)限,若不含有su文件,則表明系統(tǒng)沒有root權(quán)限,su文件為用于變更系統(tǒng)使用者身份的可執(zhí)行文件;存儲模塊用于將判斷模塊的判斷結(jié)果存于數(shù)據(jù)存儲接口的文件中,存儲模塊還用于當(dāng)再次需要判斷系統(tǒng)是否具有root權(quán)限時(shí),直接讀取數(shù)據(jù)存儲接口文件中的判斷結(jié)果。
僅首次進(jìn)行系統(tǒng)是否具有root權(quán)限的判斷時(shí),通過查找su文件的方式進(jìn)行系統(tǒng)root權(quán)限的判斷,并將判斷結(jié)果存儲于數(shù)據(jù)存儲接口的文件中,當(dāng)再次需要進(jìn)行系統(tǒng)是否具有root權(quán)限的判斷時(shí),通過讀取數(shù)據(jù)存儲接口文件中的判斷結(jié)果便可知道系統(tǒng)是否具有root權(quán)限,極大地提高了判定速度,同時(shí)減少了系統(tǒng)因root權(quán)限判定而產(chǎn)生的功耗。
本發(fā)明不局限于上述實(shí)施方式,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也視為本發(fā)明的保護(hù)范圍之內(nèi)。本說明書中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。