对android:sharedUserId=“android.uid.system“的讨论

使用

使用前提:签名要和系统相同。

使用时机:应用需要system 权限时;内存不足,或优先级低的时候不容易被干掉时。

使用效果:让程序运行在系统进程中,这样就有权限修改系统的值了。

应用不添加android.uid.system时崩溃的场景

1、Sound-Advanced settings-Sound Feedback设置Low时崩溃

崩溃日志:java.lang.SecurityException: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS

问题定位到源码这段代码:Settings.Global.putInt(context.getContentResolver(),  Settings.Global.SOUND_EFFECTS_TYPE,value)

2、Sound-Advanced settings-Digital audioout设置Auto时崩溃

崩溃日志:java.lang.SecurityException: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS

问题定位到源码这段代码:Settings.Global.putString(context.contentResolver, "nrdp_external_surround_sound_enabled", "1")

应用使用“android.uid.system”的原因

  1. 系统预装应用,可以使用“android.uid.system
  2. 使用了权限“<uses-permission android:name="android.permission.WRITE_SETTINGS" />,而在android 6.0及以后,WRITE_SETTINGS权限的保护等级已经由原来的dangerous升级为signature”,也就意味着SystemSettings需要用系统签名或者成为系统预装软件才能够申请此权限,并且还需要提示用户跳转到修改系统的设置界面去授予此权限。

注:SYSTEM_ALERT_WINDOW and WRITE_SETTINGS, 这两个权限比较特殊,不能通过代码申请方式获取,必须得用户打开软件设置页手动打开,才能授权。(参考文章:在android M版本SYSTEM_ALERT_WINDOW权限无法获取问题 - 简书

结论

应用需要使用android:sharedUserId="android.uid.system"。首先,它是系统预装应用,一般来说是使用的;其次,使用了权限“<uses-permission android:name="android.permission.WRITE_SETTINGS" />,需要system权限,所以需要使用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值