※ 引述《gn00618777 (非常念舊)》之銘言:
: ※ [本文轉錄自 Soft_Job 看板 #1Joxix8p ]
: 作者: gn00618777 (非常念舊) 看板: Soft_Job
: 標題: Fw: [開發] 關於 app 權限
: 時間: Sun Jul 20 20:51:05 2014
: ※ [本文轉錄自 Android 看板 #1Joxhchb ]
: 作者: gn00618777 (非常念舊) 看板: Android
: 標題: [開發] 關於 app 權限
: 時間: Sun Jul 20 20:49:38 2014
: 在網路上看到
: framework/base/core/res/AndroidManifest.xml 中定義了某些權限'
: 包括name、protectionLevel等等..
: 他舉例了說即使你在 app 的 AndroidManifest.xml申請了某些權限
: 例如:android.permission.WRITE_SECURE_SETTINGS
: Android 也不一定會給你App這個權限,因為 protectionLevel
: protectionLevel有四種類型:
: normal - 安裝即授予與權限,不需要確認
: dangerous - 危險的權限,需要用使用者確認
: signature - 安裝的app需要與聲明該權限的app有相同的signature
: signatureOrSystem - 擁有相同的signature,或者放在system image中
: 最後面兩個不太懂耶.. 還有怎樣才會有signature阿..謝謝指教。
每一個 app 在 release build 的時候都需要 sign 一把 key (實際上 debug build 也
有,預設 ADT 會隨機產生一組放在 ~/.android/debug.keystore)
protectionLevel=signature 就是指使用該 permission 的 app 需要和定義該 permissi
on 的 app sign 一樣的 key,才能取得該 permission。
而 protectionLevel=signatureOrSystem 指使用該 permission 的 app 必須和定義該 p
ermission 的 app sign 一樣的 key,或者該 app 必須是 system app - android 4.3
以前,指的是 /system/app 底下的 apk;android 4.4 開始必須是 /system/priv-app
底下的 apk 才算。
如果你開發數個 apk 發布到 Google Play Store,而這些 app 需要共用資料,於是你在
其中一個 app 寫了一個 ContentProvider,此時這個 ContentProvider 最適合使用 sig
nature level 的 permission。如此一來只有你發布的 app 可以存取這個 ContentProvi
der (因為這些 app 都是 sign 一把你才有的 key),但是其他人寫的 app 就不行。