SharedUserId 与 Android自定义Permission

Android给每个APK进程分配一个单独的用户空间,其manifest中的UserId就是对应一个Linux用户

sharedUser id
通过sharedUserId,拥有同一个User Id的多个APK可以配置成运行在同一个进程中.所以默认就是
可以互相访问任意数据. 也可以配置成运行成不同的进程, 同时可以访问其他APK的数据目录下的
数据库和文件.就像访问本程序的数据一样.

SharedUserId有很多需要注意的地方,如果Application的SharedUserId为System.则Application是不能访问SD卡的。为什么会有这样的限制呢?因为卸载SD卡的必要条件是没有进程访问SD卡的资源文件。因此卸载SD卡的时候会杀掉访问SD卡上资源文件的进程。如果Application使用SharedUserId为System,就会连系统一起杀掉。这样的设计是不被允许的。

如果我们给底层文件设置了权限(驱动文件如/dev/sensors),有需要上层应用来访问底层文件,可以通过给系统添加权限的方式来解决。比如我们在init.rc中设置/dev/sensors设置的权限为0660,对应owner和group分别为system和media,我们可以在frameworks/base/core/res目录下的AndroidManifest.xml中添加新的permission如下

<permission android:name="android.permission.USE_SENSORS"
        android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
        android:protectionLevel="dangerous"
        android:label="@string/permlab_useSensors"
        android:description="@string/permdesc_useSensors" />
 

然后在frameworks/base/data/etc目录下的platform.xml中设置使用此权限可以获取media group的权限。

<permission name="android.permission.USE_SENSORS" >
        <group gid="media" />
    </permission>

最后,我们只需要在Application中的AndroidManifest.xml中使用此permission就访问/dev/sensors了。

<uses-permission android:name="android.permission.USE_SENSORS" />

转载于:https://my.oschina.net/shaorongjie/blog/99283

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值