当前位置: 首页> 健康> 知识 > 服装设计图_六安seo公司选择8火星_龙岗网络公司_中央网站seo

服装设计图_六安seo公司选择8火星_龙岗网络公司_中央网站seo

时间:2025/7/27 22:16:23来源:https://blog.csdn.net/chenzili870305/article/details/144430763 浏览次数:0次
服装设计图_六安seo公司选择8火星_龙岗网络公司_中央网站seo

众所周知,Android app的权限,可以由系统预定义(大多数使用的权限都是这样),也可以app自己定义一个权限,别的app来申请。官方说明:<权限>  |  Android Developers

权限保护具有不同等级:

含义
"normal"默认值。具有较低风险的权限,此类权限允许请求授权的应用访问隔离的应用级功能,对其他应用、系统或用户的风险非常小。系统会自动向在安装时请求授权的应用授予此类权限,无需征得用户的明确许可(但用户始终可以选择在安装之前查看这些权限)。
"dangerous"具有较高风险的权限,此类权限允许请求授权的应用访问用户私人数据或获取可对用户造成不利影响的设备控制权。由于此类权限会带来潜在风险,因此系统可能不会自动向请求授权的应用授予此类权限。例如,应用请求的任何危险权限都可能会向用户显示并且获得确认才会继续执行操作,或者系统会采取一些其他方法来避免用户自动授予使用此类功能的权限。
"signature"只有在请求授权的应用使用与声明权限的应用相同的证书进行签名时系统才会授予的权限。如果证书匹配,系统会在不通知用户或征得用户明确许可的情况下自动授予权限。
"knownSigner"只有在请求授权的应用使用允许使用的证书进行签名时系统才会授予的权限。如果请求者的证书已列出,系统会在不通知用户或征得用户明确许可的情况下自动授予权限。
"signatureOrSystem"

"signature|privileged" 的旧同义词。在 API 级别 23 中已废弃。

系统仅向位于 Android 系统映像的专用文件夹中的应用或使用与声明权限的应用相同的证书进行签名的应用授予的权限。不要使用此选项,因为 "signature" 保护级别足以满足大多数需求,无论应用安装在何处,该保护级别都能正常发挥作用。

"signatureOrSystem" 权限适用于以下特殊情况:多个供应商将应用内置到一个系统映像中,并且需要明确共享特定功能,因为这些功能是一起构建的。

尤其注意保护等级是signature|privileged的权限,当使用该权限的app与定义该权限的app签名一致时,可以获得权限;或者如果APP是privileged APP也会获得该权限。

那什么是privileged APP呢?privileged APP首先是System APP,即预置在system分区(不要求是系统签名)。不过同在system分区,/system/app和/system/priv-app下的apk,其权限也是不同的。

通过 adb shell dumpsys package <APP包名> 可以看到,前者的flags中有一个SYSTEM,但是后者在privateFlags中,还多了一个PRIVILEGED

因此对于signature|privileged的权限,可以把三方app放到/system/priv-app下,就可以获取privileged保护的权限了。

不过实测发现:

对于系统预定义的privileged保护的权限,如INTERACT_ACROSS_USERS,定义在framework/base/core/res/AndroidManifest.xml中:

    <!-- @SystemApi @hide Allows an application to call APIs that allow it to do interactionsacross the users on the device, using singleton services anduser-targeted broadcasts.  This permission is not available tothird party applications. --><permission android:name="android.permission.INTERACT_ACROSS_USERS"android:protectionLevel="signature|privileged|development" />

如果APP声明了该权限,除了将apk放到/system/priv-app下之外,还需要在/system/etc/permissions/xxx.xml(名字随意)中显式声明:

<permissions>
    <privapp-permissions package="com.example.test">
        <permission name="android.permission.INTERACT_ACROSS_USERS"/>
    </privapp-permissions>
</permissions>

否则系统无法启动,system_server一直崩溃,报错:

java.lang.IllegalStateException: Signature|privileged permissions not in privapp-permissions whitelist: {com.example.test (/system/priv-app/Test): android.permission.INTERACT_ACROSS_USERS}

但对于其他apk(如CarService)中声明的权限,如android.car.permission.CAR_VENDOR_EXTENSION,定义在packages/services/Car/service/AndroidManifest.xml:

<permissionandroid:name="android.car.permission.CAR_VENDOR_EXTENSION"android:protectionLevel="signature|privileged"android:label="@string/car_permission_label_vendor_extension"android:description="@string/car_permission_desc_vendor_extension" />

尽管也是signature|privileged保护,却并不需要在/system/etc/permissions/xxx.xml中显式声明,只要把apk放到/system/priv-app下即可

关键字:服装设计图_六安seo公司选择8火星_龙岗网络公司_中央网站seo

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: