Android SDK之系统权限

来源:互联网 发布:淘宝食品类目有哪些 编辑:程序博客网 时间:2024/04/30 02:28
android系统的安全设计出发点是任何应用不能对其他应用,系统和用户数据造成威胁或破坏。
应用以互不相同的Linux UID运行在独立的进程里面,若应用需要读写其他应用,系统或者用户的数据就需要申请permissions。
系统以一定的形式将应用的permissions申请呈现给用户,用户决定是否授权。
1)应用签名
每个apk都需要用开发者持有私有密钥的证书签名。
签名是为了系统能够区别不同的开发者,以及在apk申请权限的时候系统能够预判其潜在风险。
2)UID与文件
在应用安装的时候系统会给应用(package)分配一个唯一的UID。同样的应用安装在不同的设备上其UID不同。UID保持不变直到应用被卸载。
Android系统允许最多两个应用通过在AndroidManifests.xml文件中声明sharedUserId来共享UID和Linux进程。
应用产生的数据只能本应用访问,若需要公开应用产生的数据,可在创建文件的时候添加 MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE标签。
3)普通权限与危险权限
Android系统将权限分为多种,主要为普通和危险两种。
普通权限是指不对用户数据和其他应用造成影响的权限。申请后系统自动授予。
危险权限是指对用户数据和其他应用造成影响的权限,申请后系统会以对话框的形式展现给用户,最终由用户决定是否授权。
4)自定义权限

开发者可通过如下形式自定义权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.myapp" ><permission android:name="com.example.myapp.permission.DEADLY_ACTIVITY"android:label="@string/permlab_deadlyActivity"android:description="@string/permdesc_deadlyActivity"android:permissionGroup="android.permission-group.COST_MONEY"android:protectionLevel="dangerous" />

android系统不允许不同的包定义名字相同的权限,除非他们的证书一样。
5)组件权限
android四大组件都可以在AndroidManifests.xml各自tag里面申明自己的权限。
activity和server申明权限后,调用者必要具有相应的权限,否则系统会抛出 SecurityException。
BroadcastReceiver申明权限后,只能接收到具有相应权限的组件发生的广播,不会造成异常。
ContentProvider具有 android:readPermission和android:writePermission两种权限,相互之间互不干扰。
ContentResolver.query()需要readPermission,ContentResolver.insert(), ContentResolver.update(), ContentResolver.delete()等操作需要writePermission。



https://developer.android.com/guide/topics/security/permissions.html#defining

0 0