Android相關許可權的概念

來源:互聯網
上載者:User

1.許可權

  每個程式在安裝時都有建立一個系統ID,如app_15,用以保護資料不被其它應用擷取。Android根據不同的使用者和組,分配不同許可權,比如訪問SD卡,訪問網路等等。底層映射為Linux許可權。

2. 應用申請許可權
  1)應用開發人員通過AndroidManifest.xml中<uses-permission>指定對應許可權,再映射到底層的使用者和組,預設情況下不設定特殊的許可權。AndroidManifest加入許可權後系統安裝程式時會在圖形介面中提示許可權

  2) 如果是缺少某個許可權(程式中使用的某種許可權而在AndroidManifest.xml中並未聲名),程式運行時會在logcat中列印出錯誤資訊requires <permission>

  3) 與某個進程使用相同的使用者ID

    應用程式可與系統中已存在的使用者使用同一許可權,需要在AndroidManifest.xml中設定sharedUserId,如android:sharedUserId="android.uid.system ",作用是獲得系統許可權,

  但是這樣的程式屬性只能在build整個系統時放進去(就是系統軟體)才起作用,共用ID的程式必須是同一簽名的

  4)關於應用程式共用許可權的問題,在PackageManagerService.java中有相關的配置

    PackageManagerService(){

      mSettings.addSharedUserLPw("android.uid.system",

      Process.SYSTEM_UID, ApplicationInfo.FLAG_SYSTEM);

      mSettings.addSharedUserLPw("android.uid.phone", RADIO_UID, ApplicationInfo.FLAG_SYSTEM,

      new int[] {UID_NET_RAW, UID_QCOM_DIAG, UID_NET_ADMIN});

      ……
    }

 

    比如:看到PhoneApp 的AndroidManifest.xml中

      android:sharedUserId="android.uid.phone" 使PhoneApp具有radio許可權

      在訪問RIL時會進行此許可權檢測

3. Android許可權的實現

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

    <uses-permission android:name=”android.permission.INTERNET”/>

  2)第二層:架構層,許可權對應組,frameworks/base/data/etc/platform.xml,形如:

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

      <group gid=inet” />

    </permission>

  3)第三層:系統層,系統的許可權,

    system/core/include/private/android_filesystem_config.h,形如:

    #define AID_RADIO 1001 /* telephony subsystem, RIL */

    #define AID_INET 3003 //建立SOCKET的許可權

    ……

 

    static const struct android_id_info android_ids[] = {

      { "radio", AID_RADIO, },

      { “inet”, AID_INET, },

      ……

4.系統許可權

  1) 特殊許可權的使用者

  #define AID_ROOT 0 /* traditional unix root user */

  #define AID_SYSTEM 1000 /* system server */

  #define AID_RADIO 1001 /* telephony subsystem, RIL */
  #define AID_BLUETOOTH 1002 /* bluetooth subsystem */
  #define AID_GRAPHICS 1003 /* graphics devices */
  #define AID_INPUT 1004 /* input devices */
  #define AID_AUDIO 1005 /* audio devices */
  #define AID_CAMERA 1006 /* camera devices */
  #define AID_LOG 1007 /* log devices */

  ……

  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);

 

From:http://blog.csdn.net/xieyan0811/article/details/6083019?reload

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.