每个应用都运行在自己的砂箱中,并且具有不同的UserId和进程。
- 签名
每个开发者都具有自己的私有签名key, - User IDs and File Access
由于每个应用都具有自己的UserID和进程号,因此其打开的文件也都只能自己访问。若需要两个app共享文件,那么需要两个app设置shareUserId并且使用相同的签名。 - 使用权限
uses-permission,声明在Manifest中
xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.app.myapp" > <uses-permission android:name="android.permission.RECEIVE_SMS" /> ... </manifest>
- 声明和强制权限
自定义自己的权限,需要在Manifest中使用<permission>
tag首先声明。如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.me.app.myapp" >
<permission android:name="com.me.app.myapp.permission.DEADLY_ACTIVITY"
android:label="@string/permlab_deadlyActivity"
android:description="@string/permdesc_deadlyActivity"
android:permissionGroup="android.permission-group.COST_MONEY"
android:protectionLevel="dangerous" />
...
</manifest>
其中description
是对该权限的解释,将在用户安装App时显示。permissionGroup
是表示该权限所属组,如本例中的消费金钱。protectionLevel
是方便Android在安装时以何种方式通知用户,本例为危险,因为需要花钱。
可以使用Settings App查看个App的应用权限,或者使用cmdadb shell pm list permissions -s
- Manifest中的强制Permission
对四大组件均可以在其tag中设定权限,如果某个调用者无权限调用该组件,将会得到 SecurityException的异常。其中ContentProvider具有写入权限和读取权限两种。 - URIs Permission
对于某些应用而言,其数据比较私密,对于不具备权限的App根本无法读取或者写入。如Email中的图片,当调用其他App来显示该图片时,由于不具备读取权限,因而报异常。因此呢,Android引入了URI权限,即在发送Intent时,附带Intent.FLAG_GRANT_READ_URI_PERMISSION
和或者Intent.FLAG_GRANT_WRITE_URI_PERMISSION
。