※ 引述《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 就不行。