Android 權限的實現

 

1.    權限html

 

  每一個程序在安裝時都有創建一個系統ID,如app_15,用以保護數據不被其它應用獲取。Android根據不一樣的用戶和組,分配不一樣權限,好比訪問SD卡,訪問網絡等等。底層映射爲Linux權限。java

 

2.    應用申請權限android

 

  1) 應用開發者經過AndroidManifest.xml中<uses-permission>指定對應權限,再映射到底層的用戶和組,默認狀況下不設定特殊的權限。AndroidManifest加入權限後系統安裝程序時會在圖形界面中提示權限shell

  2)若是是缺乏某個權限(程序中使用的某種權限而在AndroidManifest.xml中並未聲名),程序運行時會在logcat中打印出錯誤信息requires <permission>網絡

  3)與某個進程使用相同的用戶ID應用程序可與系統中已存在的用戶使用同一權限,須要在AndroidManifest.xml中設置sharedUserId,如android:sharedUserId="android.uid.shared",做用是得到系統權限,可是這樣的程序屬性只能在build整個系統時放進去(就是系統軟件)才起做用,共享ID的程序必須是同一簽名的app

 

3.    Android權限的實現框架

 

  1)第一層:由應用設置,修改AndroidManifest.xml,形如:socket

    <uses-permission android:name=」android.permission.INTERNET」/>函數

  2)第二層:框架層,權限對應組,frameworks/base/data/etc/platform.xml,形如:ui

    <permission name=」android.permission.INTERNET」>

        <group gid=inet」 />

    </permission>

  3)第三層:系統層,系統的權限,system/core/include/private/android_filesystem_config.h,形如:

  #define AID_INET 3003              創建SOCKET的權限

  ……

  { 「inet」, AID_INET, },

 

4.    系統權限

 

  1) 特殊權限的用戶

    a)system     uid 1000

    b)radio       uid 1001

  2) 查看可用系統的權限

    $ adb shell

    # pm list permissions

 

5.    framework層對權限的判斷

 

  1)相關源碼實現

    frameworks/base/services/Java/com/android/server/PackageManagerService.java

    frameworks/base/services/java/com/android/server/am/ActivityManagerService.java

  2)在系統層,如何查看某個應用的權限

    a)在應用進程開啓時,ActivityManagerService.java會在logcat中輸出該應用的權限,形如:

      I/ActivityManager(1730): Start proc com.anbdroid.phone for restart com.android.phone:pid=2605 uid=1000 gids={3002,3001,3003} ,即它有3001,3002,3003三個權限:訪問藍牙和創建socket

    b)注意:此打印輸出在應用第一次啓動時。若是進程已存在,須要先把對應進程殺掉,以保證該進程從新啓動,才能顯示

    c)具體實現,見:

      framewors/base/services/java/com/android/server/am/ActivityManagerService.java的函數startProcessLocked(),其中取其組信息的具本語句是mContext.getPackageManager().getPackageGids(app.info.packageName);

 

6.    參考

 

  http://wenku.baidu.com/view/7754a4360b4c2e3f5727634e.html

 

轉自:http://blog.csdn.net/xieyan0811/article/details/6083019

相關文章
相關標籤/搜索