根據(jù)用戶的使用過程體驗,可以將 Android 涉及的權(quán)限大致分為如下三類:

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供隆安網(wǎng)站建設(shè)、隆安做網(wǎng)站、隆安網(wǎng)站設(shè)計、隆安網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、隆安企業(yè)網(wǎng)站模板建站服務(wù),10多年隆安做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
(1)Android 手機所有者權(quán)限:自用戶購買 Android 手機后,用戶不需要輸入任何密碼,就具有安裝一般應(yīng)用軟件、使用應(yīng)用程序等的權(quán)限;
(2)Android root 權(quán)限:該權(quán)限為 Android 系統(tǒng)的最高權(quán)限,可以對所有系統(tǒng)中文件、數(shù)據(jù)進行任意操作。出廠時默認沒有該權(quán)限,需要使用 z4Root 等軟件進行獲取,然而,并不鼓勵進行此操作,因為可能由此使用戶失去手機原廠保修的權(quán)益。同樣,如果將 Android 手機進行 root 權(quán)限提升,則此后用戶不需要輸入任何密碼,都將能以 Android root 權(quán)限來使用手機。
(3)Android 應(yīng)用程序權(quán)限:Android 提供了豐富的 SDK(Software development kit),開發(fā)人員可以根據(jù)其開發(fā) Android 中的應(yīng)用程序。而應(yīng)用程序?qū)?Android 系統(tǒng)資源的訪問需要有相應(yīng)的訪問權(quán)限,這個權(quán)限就稱為 Android 應(yīng)用程序權(quán)限,它在應(yīng)用程序設(shè)計時設(shè)定,在 Android 系統(tǒng)中初次安裝時即生效。值得注意的是:如果應(yīng)用程序設(shè)計的權(quán)限大于 Android 手機所有者權(quán)限,則該應(yīng)用程序無法運行。如:沒有獲取 Android root 權(quán)限的手機無法運行 Root Explorer,因為運行該應(yīng)用程序需要 Android root 權(quán)限。
Android 系統(tǒng)權(quán)限定義
Android 系統(tǒng)在 /system/core/private/android_filesystem_config.h 頭文件中對 Android 用戶 / 用戶組作了如下定義,且權(quán)限均基于該用戶 / 用戶組設(shè)置。
值得注意的是:每個應(yīng)用程序在安裝到 Android 系統(tǒng)后,系統(tǒng)都會為其分配一個用戶 ID,如 app_4、app_11 等。以下是 Calendar 和 Terminal 軟件在 Android 系統(tǒng)中進程瀏覽的結(jié)果(其中,黑色字體標明的即為應(yīng)用分配的用戶 ID):
在 Android 系統(tǒng)中,上述用戶 / 用戶組對文件的訪問遵循 Linux 系統(tǒng)的訪問控制原則,即根據(jù)長度為 10 個字符的權(quán)限控制符來決定用戶 / 用戶組對文件的訪問權(quán)限。該控制符的格式遵循下列規(guī)則:
第 1 個字符:表示一種特殊的文件類型。其中字符可為 d( 表示該文件是一個目錄 )、b( 表示該文件是一個系統(tǒng)設(shè)備,使用塊輸入 / 輸出與外界交互,通常為一個磁盤 )、c( 表示該文件是一個系統(tǒng)設(shè)備,使用連續(xù)的字符輸入 / 輸出與外界交互,如串口和聲音設(shè)備 ),“.”表示該文件是一個普通文件,沒有特殊屬性。
2 ~ 4 個字符:用來確定文件的用戶 (user) 權(quán)限;
5 ~ 7 個字符:用來確定文件的組 (group) 權(quán)限;
8 ~ 10 個字符:用來確定文件的其它用戶 (other user,既不是文件所有者,也不是組成員的用戶 ) 的權(quán)限。
第 2、5、8 個字符是用來控制文件的讀權(quán)限的,該位字符為 r 表示允許用戶、組成員或其它人可從該文件中讀取數(shù)據(jù)。短線“-”則表示不允許該成員讀取數(shù)據(jù)。
第 3、6、9 位的字符控制文件的寫權(quán)限,該位若為 w 表示允許寫,若為“-”表示不允許寫。
第 4、7、10 位的字符用來控制文件的制造權(quán)限,該位若為 x 表示允許執(zhí)行,若為“-”表示不允許執(zhí)行。
舉個例子,“drwxrwxr--??2 root???root????4096??2 月 11 10:36 lu”表示的訪問控制權(quán)限(黑色字體標明)為:因為 lu 的第 1 個位置的字符是 d,所以由此知道 lu 是一個目錄。第 2 至 4 位置上的屬性是 rwx,表示用戶 root 擁有權(quán)限列表顯示 lu 中所有的文件、創(chuàng)建新文件或者刪除 lu 中現(xiàn)有的文件,或者將 lu 作為當前工作目錄。第 5 至 7 個位置上的權(quán)限是 rwx,表示 root 組的成員擁有和 root 一樣的權(quán)限。第 8 至 10 位上的權(quán)限僅是 r--,表示不是 root 的用戶及不屬于 root 組的成員只有對 lu 目錄列表的權(quán)限。這些用戶不能創(chuàng)建或者刪除 lu 中的文件、執(zhí)行 junk 中的可執(zhí)行文件,或者將 junk 作為他們的當前工作目錄。
Android 應(yīng)用程序權(quán)限申請
每個應(yīng)用程序的 APK 包里面都包含有一個 AndroidMainifest.xml 文件,該文件除了羅列應(yīng)用程序運行時庫、運行依賴關(guān)系等之外,還會詳細地羅列出該應(yīng)用程序所需的系統(tǒng)訪問。程序員在進行應(yīng)用軟件開發(fā)時,需要通過設(shè)置該文件的 uses-permission 字段來顯式地向 Android 系統(tǒng)申請訪問權(quán)限。
我們知道 Android 應(yīng)用程序是沙箱隔離的,每個應(yīng)用都有一個只有自己具有讀寫權(quán)限的專用數(shù)據(jù)目錄。但是如果應(yīng)用要訪問別人的組件或者一些設(shè)備上全局可訪問的資源,這時候權(quán)限機制就能系統(tǒng)化地規(guī)范并強制各類應(yīng)用程序的行為準則。
Android 安全性概覽
在 Android 中,一個權(quán)限,本質(zhì)上是一個字符串,一個可以表示執(zhí)行特定操作的能力的字符串。比如說:訪問 SD 卡的能力,訪問通訊錄的能力,啟動或訪問一個第三方應(yīng)用中的組件的能力。 權(quán)限被授予了之后,首先會在內(nèi)存和本地中有記錄,這在調(diào)用系統(tǒng)binder服務(wù)和其他應(yīng)用組件時做鑒權(quán)依據(jù),比如調(diào)用系統(tǒng)binder服務(wù)時會通過Binder.getCallingUid()拿到調(diào)用者的Uid,而Uid一般都是與應(yīng)用包名一一對應(yīng)的,再拿這個Uid到PMS里去查這個應(yīng)用對應(yīng)的權(quán)限。 其次會按被授予的權(quán)限將應(yīng)用分到某個組。 可以參考
自定義權(quán)限的應(yīng)用場景在于限制其它應(yīng)用對本應(yīng)用四大組件的訪問。具體用法可以參考
pm list permissions -f 命令可以詳細查看 Android 所有預(yù)定義的權(quán)限。
更詳細的權(quán)限信息參考
可以看到一個權(quán)限的信息包括:定義的包名、標簽、描述、 權(quán)限組 和 保護級別 。
權(quán)限根據(jù)設(shè)備的功能或特性分為多個組。如果應(yīng)用已在相同權(quán)限組中被授予另一危險權(quán)限,系統(tǒng)將立即授予該權(quán)限,如READ_CONTACTS和WRITE_CONTACTS。
SYSTEM_ALERT_WINDOW 和 WRITE_SETTINGS 由于其特殊性,其申請方式與其它權(quán)限都不同。
其授予流程如下:
(關(guān)于 AppOpsManager 是什么可以參考: )
這里簡要分析下ActivityCompat#requestPermissions的流程:
更詳細的權(quán)限授予流程源碼分析可以參考:
普通權(quán)限: 清單文件中聲明即可。
危險權(quán)限: 方式一: pm grant application_package android.permission.CHANGE_CONFIGURATION 方式二:appops set application_package permission_num 0/1
appops可以授予的權(quán)限參考 android.app.AppOpsManager 中的聲明
系統(tǒng)簽名權(quán)限: 方式一:將app遷移到system/priv-app目錄中。 方式二:看不懂,參考
android 4.4 訪問sd卡需要申請權(quán)限。 您的應(yīng)用在 Android 4.4 上運行時無法讀取外部存儲空間上的共享文件,除非您的應(yīng)用具有 READ_EXTERNAL_STORAGE 權(quán)限。也就是說,沒有此權(quán)限,您無法再訪問 getExternalStoragePublicDirectory() 返回的目錄中的文件。但是,如果您僅需要訪問 getExternalFilesDir() 提供的您的應(yīng)用特有目錄,那么,您不需要 READ_EXTERNAL_STORAGE `權(quán)限。
android 6.0 運行時權(quán)限。 此版本引入了一種新的權(quán)限模式,如今,用戶可直接在運行時管理應(yīng)用權(quán)限。這種模式讓用戶能夠更好地了解和控制權(quán)限,同時為應(yīng)用開發(fā)者精簡了安裝和自動更新過程。用戶可為所安裝的各個應(yīng)用分別授予或撤銷權(quán)限。 對于以 Android 6.0(API 級別 23)或更高版本為目標平臺的應(yīng)用,請務(wù)必在運行時檢查和請求權(quán)限。要確定您的應(yīng)用是否已被授予權(quán)限,請調(diào)用新增的 checkSelfPermission() 方法。要請求權(quán)限,請調(diào)用新增的 requestPermissions() 方法。即使您的應(yīng)用并不以 Android 6.0(API 級別 23)為目標平臺,您也應(yīng)該在新權(quán)限模式下測試您的應(yīng)用。 如需了解有關(guān)在您的應(yīng)用中支持新權(quán)限模式的詳情,請參閱 使用系統(tǒng)權(quán)限 。如需了解有關(guān)如何評估新模式對應(yīng)用的影響的提示,請參閱 權(quán)限最佳做法 。
android 7.+ 應(yīng)用間共享文件要使用FileProvider。 對于面向 Android 7.0 的應(yīng)用,Android 框架執(zhí)行的 StrictMode API 政策禁止在您的應(yīng)用外部公開 。如果一項包含文件 URI 的 intent 離開您的應(yīng)用,則應(yīng)用出現(xiàn)故障,并出現(xiàn) FileUriExposedException 異常。 要在應(yīng)用間共享文件,您應(yīng)發(fā)送一項 content:// URI,并授予 URI 臨時訪問權(quán)限。進行此授權(quán)的最簡單方式是使用 FileProvider `類。如需了解有關(guān)權(quán)限和共享文件的詳細信息,請參閱 共享文件 。
android 8.+
同一權(quán)限組的權(quán)限在被授予了之后也需要顯式的再申請一次。
在 Android 8.0 之前,如果應(yīng)用在運行時請求權(quán)限并且被授予該權(quán)限,系統(tǒng)會錯誤地將屬于同一權(quán)限組并且在清單中注冊的其他權(quán)限也一起授予應(yīng)用。 對于針對 Android 8.0 的應(yīng)用,此行為已被糾正。系統(tǒng)只會授予應(yīng)用明確請求的權(quán)限。然而,一旦用戶為應(yīng)用授予某個權(quán)限,則所有后續(xù)對該權(quán)限組中權(quán)限的請求都將被自動批準。 例如,假設(shè)某個應(yīng)用在其清單中列出 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 。應(yīng)用請求 READ_EXTERNAL_STORAGE ,并且用戶授予了該權(quán)限。如果該應(yīng)用針對的是 API 級別 24 或更低級別,系統(tǒng)還會同時授予 WRITE_EXTERNAL_STORAGE ,因為該權(quán)限也屬于同一 STORAGE 權(quán)限組并且也在清單中注冊過。如果該應(yīng)用針對的是 Android 8.0,則系統(tǒng)此時僅會授予 READ_EXTERNAL_STORAGE ;不過,如果該應(yīng)用后來又請求 WRITE_EXTERNAL_STORAGE ,則系統(tǒng)會立即授予該權(quán)限,而不會提示用戶。
android 9
隱私權(quán)限變更。
為了增強用戶隱私,Android 9 引入了若干行為變更,如限制后臺應(yīng)用訪問設(shè)備傳感器、限制通過 Wi-Fi 掃描檢索到的信息,以及與通話、手機狀態(tài)和 Wi-Fi 掃描相關(guān)的新權(quán)限規(guī)則和權(quán)限組。
android 10
隱私權(quán)變更。
外部存儲訪問權(quán)限范圍限定為應(yīng)用文件和媒體,在后臺運行時訪問設(shè)備位置信息需要權(quán)限,針對從后臺啟動 Activity 的限制等。
android 11
隱私權(quán)限變更。
更詳細的版本變更請參考
從 Android 6.0 開始,按照是否需要動態(tài)申請分為 普通權(quán)限 和 特殊權(quán)限
特殊權(quán)限 需要程序運行時申請并通過之后才能使用,或者程序安裝為系統(tǒng)應(yīng)用或系統(tǒng)簽名。
注意:
1、動態(tài)申請也需要在清單文件中配置(AndroidMenifest.xml)
2、權(quán)限是分組的,同一組的權(quán)限申請其中一個,同組的權(quán)限就全部都申請了
特殊權(quán)限共有 9 組:
9 組具體權(quán)限列表:
普通權(quán)限在清單文件配置(AndroidMenifest.xml)即可使用
(1)在 AndroidMenifest.xml 清單文件中申請
(2)單個申請
(2)批量申請
(3)回調(diào)處理
1、(以魅族手機為例)打開手機設(shè)置選項。
2、進入后,下滑找到應(yīng)用管理并點擊。
3、進入后,點擊應(yīng)用權(quán)限選項。
4、進入頁面后,點擊權(quán)限管理選項。
5、(以定位權(quán)限為例)點擊獲取定位選項。
6、進入后可根據(jù)個人需要,允許、禁止或詢問應(yīng)用獲取定位信息。
網(wǎng)站欄目:android的權(quán)限,安卓所有權(quán)限
標題URL:http://chinadenli.net/article39/dsepdph.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、網(wǎng)站收錄、網(wǎng)站內(nèi)鏈、網(wǎng)站設(shè)計公司、動態(tài)網(wǎng)站、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)