Android 是一種權(quán)限分離的操作系統(tǒng),其中每個(gè)應(yīng)用都以不同的系統(tǒng)身份(Linux 用戶 ID 和組 ID)運(yùn)行。系統(tǒng)的各個(gè)部分也會被分隔為不同的身份。因此,Linux 可以將應(yīng)用同其他應(yīng)用和系統(tǒng)隔離開來。
站在用戶的角度思考問題,與客戶深入溝通,找到乳山網(wǎng)站設(shè)計(jì)與乳山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋乳山地區(qū)。應(yīng)用可以定義其他應(yīng)用可以請求的權(quán)限,從而將自己的功能提供給后者。它們還可以定義能夠自動提供給已使用同一證書進(jìn)行簽名的任何其他應(yīng)用的權(quán)限。
所有 APK 都必須使用私鑰由其開發(fā)者持有的證書進(jìn)行簽名。此證書可標(biāo)識應(yīng)用創(chuàng)作者。證書無需由證書授權(quán)機(jī)構(gòu)進(jìn)行簽名;Android 應(yīng)用完全可以使用自簽名證書,這種做法也十分普遍。Android 中的證書旨在區(qū)分應(yīng)用創(chuàng)作者。這樣,系統(tǒng)可以授予或拒絕應(yīng)用對簽名級權(quán)限的訪問權(quán)限,以及授予或拒絕應(yīng)用獲取與另一應(yīng)用相同的 Linux 身份的請求。
安裝時(shí),Android 會為每個(gè)軟件包提供不同的 Linux 用戶 ID。該身份在相應(yīng)軟件包在該設(shè)備上存續(xù)期間將保持不變。同一軟件包在其他設(shè)備上可能具有不同的 UID;重要的是每個(gè)軟件包在指定設(shè)備上的 UID 都不同。
由于系統(tǒng)會在進(jìn)程級別強(qiáng)制執(zhí)行安全措施,因此任何兩個(gè)軟件包的代碼通常都無法在同一進(jìn)程中運(yùn)行,因?yàn)樗鼈冃枰圆煌?Linux 用戶身份運(yùn)行。您可以在每個(gè)軟件包的 AndroidManifest.xml
的 清單標(biāo)記中使用 sharedUserId 屬性,以便為它們分配相同的用戶 ID。這樣做以后,出于安全考慮,系統(tǒng)隨后會將這兩個(gè)軟件包視為具有相同用戶 ID 和文件權(quán)限的同一應(yīng)用。請注意,為了確保安全性,只有具有相同簽名(以及請求了相同 sharedUserId)的兩個(gè)應(yīng)用才能夠獲得相同的用戶 ID。
系統(tǒng)會為應(yīng)用存儲的所有數(shù)據(jù)分配該應(yīng)用的用戶 ID,而其他軟件包通常無法訪問這些數(shù)據(jù)。
如需詳細(xì)了解 Android 的安全模型,請參閱 Android 安全性概覽。
要強(qiáng)制執(zhí)行自己的權(quán)限,您首先必須使用一個(gè)或多個(gè)
元素在您的 AndroidManifest.xml
中聲明它們。
例如,某個(gè)應(yīng)用若要控制誰可以啟動它的 Activity,則可以針對此操作聲明一個(gè)權(quán)限,如下所示:
注意:系統(tǒng)不允許多個(gè)軟件包聲明同名權(quán)限,除非所有軟件包均使用同一證書進(jìn)行簽名。如果軟件包聲明了某個(gè)權(quán)限,則系統(tǒng)不會允許用戶安裝其他具有相同權(quán)限名稱的軟件包,除非這些軟件包使用與第一個(gè)軟件包相同的證書進(jìn)行簽名。在為自定義權(quán)限命名時(shí),為了避免命名沖突,我們建議采用反向域名方式,例如 com.example.myapp.ENGAGE_HYPERSPACE
。
protectionLevel
屬性為必需項(xiàng),用于告知系統(tǒng)如何讓用戶知道哪些應(yīng)用正在請求權(quán)限或者哪些應(yīng)用可以獲得該權(quán)限,如鏈接的文檔中所述。
android:permissionGroup
屬性為可選項(xiàng),僅用于幫助系統(tǒng)向用戶顯示權(quán)限。在大多數(shù)情況下,盡管您可以自行定義組,但您應(yīng)將其設(shè)置為標(biāo)準(zhǔn)系統(tǒng)組(在 android.Manifest.permission_group
中列出)。最好使用現(xiàn)有的組,因?yàn)檫@可以簡化用戶看到的權(quán)限界面。
您需要為權(quán)限提供標(biāo)簽和說明。這些是用戶在查看權(quán)限列表 (android:label
) 或有關(guān)單個(gè)權(quán)限的詳細(xì)信息 (android:description
) 時(shí)能夠看到的字符串資源。標(biāo)簽應(yīng)當(dāng)簡短,用簡短的文字描述該權(quán)限所保護(hù)的關(guān)鍵功能。該說明應(yīng)該由一些句子組成,用于描述此權(quán)限允許權(quán)限獲得者執(zhí)行哪些操作。我們通常會使用包含兩個(gè)句子的說明:第一句描述該權(quán)限;第二句提醒用戶在向某個(gè)應(yīng)用授予該權(quán)限后可能會出現(xiàn)哪類錯(cuò)誤。
以下示例展示了 CALL_PHONE
權(quán)限的標(biāo)簽和說明:
如上一部分中所示,您可以使用 android:permissionGroup
屬性幫助系統(tǒng)向用戶描述權(quán)限。在大多數(shù)情況下,不妨將此屬性設(shè)置為標(biāo)準(zhǔn)系統(tǒng)組(在 android.Manifest.permission_group
中列出),但您也可以使用
定義自己的組。
元素為一組權(quán)限(包括使用
元素在清單中聲明的權(quán)限和在其他位置聲明的權(quán)限)定義了一個(gè)標(biāo)簽。這只會影響這些權(quán)限在向用戶顯示時(shí)的分組方式。
元素不會指定屬于該組的權(quán)限,但它會為該組提供一個(gè)名稱。
將組名稱分配給
元素的 permissionGroup
屬性可在該組中放置權(quán)限。
元素為代碼中定義的一組權(quán)限聲明了命名空間。
應(yīng)用可以定義自己的自定義權(quán)限,還可以通過定義
元素從其他應(yīng)用請求自定義權(quán)限。不過,您應(yīng)該仔細(xì)評估應(yīng)用是否有必要這樣做。