認識Android的UID與權限
由於每個應用程式都有個UID,只有帶著此UID,才能存取該UID所涵蓋的有關資料。所以如果AP-1與AP-2的UID不同,則在預設 (Default)情況下,雙方都無法讀取對方的資料。這種分而治之的方式,可以減輕駭客軟體的惡意傷害資料,提升手機的安全性。
當手機使用者(即User)下載你(即開發者)的應用程式,在安裝(Install)時,Android 就會給予一個UID。這個UID可連結到 該應用程式的AndroidManifest.xml檔案的內容。所以User在安裝你的應用程式時,在螢幕上的視窗裡可以檢視這個 AndroidManifest.xml檔案的內容。在檢視時,用戶會看到你對應用程式的目的、權限等說明。當你接受這支程式的意圖、權限說明之 後,Android就安裝它,並給它一個UID。萬一在你的應用程式執行期間有越軌(企圖做出非權限範圍)的行為時,用戶將會得到Android的警告訊 息。
有一些特殊情形下,兩支應用程式是可以持有一樣的UID。例如,同一位開發者撰寫的應用程式,常常需要推出新版本,這兩種版本的程式可以持有一樣的 UID, 才有權限去將舊版程式所產生的資料拷貝轉移到新版軟體裡。
一個用戶在其使用手機的用例(UseCase)裡,通常由一個Activity啟動開始,透過Intent物件去啟動其他的Activity、 Service、ContentProvider等具有不同UID的一連串應用程式,才能滿足一個用例的目標。在傳統電腦上,UID是跟隨著「人」,一個 用戶持著一個UID就能執行一連串的應用程式,而且在預設條件下是可以互相共享資料。但是在Android裡,這一連串的應用程式是各有自己的UID,而 且可能都持著不同的UID,原則上是不能任意存取對方的資料。
UID與AndroidManifest.xml檔案的連結除了可以保護各程式的私有資料之外,還可以禁止程式越權使用手機的各項資源。例如,開發者 在AndroidManifest.xml檔案裡表明此程式有READ_CONTACTS的授權。用戶在安裝此應用程式時,檢視過 AndroidManifest.xml的授權內涵,而且接受之。此應用程式就能合法地存取手機裡的通訊錄資料,甚至授權撥打電話、發簡訊等等。
剛才提到過,一個用戶的用例(UseCase)裡,通常由多個不同UID的Activity、Service、ContentProvider等一連 串的應用程式所串接,才能滿足用例的目標。此時,如果它們都必須存取通訊錄的話,必須都持有相同的READ_CONTACTS授權才行。
以上就應用程式的開發者、使用者的角度來說明Android的UID之意義和用法。至於Android如何運用Linux的進程(Process)機 制及Android的特殊管理政策,在此講義的節錄版裡,就省略之。
更多相关文章
- Android(安卓)Google Calendar 日曆同步舊資料
- Android(安卓)程式开发:(一)详解Activity —— 1.4显示“普通”对话
- Android(安卓)程式开发:(七)处理变化 —— 7.3 检测屏幕的方向
- Android(安卓)framework analysis (partI)
- android存取数据(基础)
- Delphi APP 開發入門(二)Android/iOS設定,Hello World
- Android(安卓)程式开发:(十一)选择控件 —— 11.1 TimePicker
- Android(安卓)上的 HTTP 服務相關函式 (II)
- android studio3.1.4更新3.2.1版本問題Unknown host 'android-mi