文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

添加系统级权限 android:sharedUserId=“android.uid.system“

2023-08-18 16:20

关注

当我们在项目中添加系统级权限时,运行时会有错误提示如下:

Installation did not succeed.
The application could not be installed: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

之所以报错,是添加系统级权限之后还需要在目标系统的platform密钥来重新给apk文件签名。我这里用的签名文件是从目标系统中找到的,不是自己生成的。(目标系统是你的apk要安装的Android设备使用的Android系统)
这里以android.uid.system权限为例来说明我们开发的Android应用是怎么获取到该权限的

1. 添加系统级权限

AndroidManifest.xml中添加sharedUserId属性

android:sharedUserId="android.uid.system"

在这里插入图片描述

2. 添加已有的签名到build.gradle

添加签名文件的storePassword(密钥库密钥)、keyAlias(密钥标识名)、keyPassword(密钥密码)

android {    signingConfigs {        platform {            storeFile file('D:\\aaa.keystore')            storePassword '123456'            keyAlias 'aaa'            keyPassword '123456'        }    }}

3. Android Studio选择File->Project Structure->Modules

在Signing Configs里可以看到platform已经添加到了Modules中。确认添加成功即可,不做任何变动
在这里插入图片描述
Build Variants这一栏是生成apk的配置,内置了有两种生成apk的方式,分别是debug和release
debug用于调试,平时我们把项目代码写好编译完成后默认用的是debug生成的apk;
release用于正式发布供用于下载安装,这种方式需要先创建密钥库(密钥库是apk的证书,当apk有更新时,是需要证书匹配才能更新的),填写了一串信息后通过Build->Build Bundles/APKS->Build APKs生成apk

回到正题,Build Variants中选择生成方式后,在Signing Config中添加要用到的签名,保存并退出窗口
在这里插入图片描述
最后,修改发布版本,在android studio界面的左下角,修改build variant,接着,run即可运行项目,可以发现IDE不再报错了,android:sharedUserId=“android.uid.system“权限已经添加到应用中了

一般的,每一个apk都具有一个userid,对于安装在设备中的apk文件,Android会根据userid来给它分配一个Linux用户ID进行管理,并且为它创建一个沙箱,以防止影响其他应用程序(或被其它应用程序影响),即属于不同Linux用户ID的apk之间是不能进行通讯的。
但是,某些时候我们开发了多个apk并且需要他们之间互相共享资源,那么就需要通过设置shareUserId来实现,只需要保证这些apk的shareUserId相同即可,值可自定义,如android:sharedUserId=“my_id“

系统中所有使用android.uid.system作为共享UID的APK,都会首先在AndroidManifest.xml节点中增加android:sharedUserId=”android.uid.system”,然后在Android.mk中增加LOCAL_CERTIFICATE := platform

系统中所有使用android.uid.nfc作为共享UID的APK,都会首先在AndroidManifest.xml节点中增加android:sharedUserId=”android.uid.nfc”,然后在Android.mk中增加LOCAL_CERTIFICATE := platform

系统中所有使用android.uid.se作为共享UID的APK,都会首先在AndroidManifest.xml节点中增加android:sharedUserId=”android.uid.se”,然后在Android.mk中增加LOCAL_CERTIFICATE := platform

系统中所有使用android.uid.shared作为共享UID的APK,都会在AndroidManifest.xml节点中增加android:sharedUserId=”android.uid.shared”,然后在Android.mk中增加LOCAL_CERTIFICATE := shared

系统中所有使用android.media作为共享UID的APK,都会在AndroidManifest.xml节点中增加android:sharedUserId=”android.media”,然后在Android.mk中增加LOCAL_CERTIFICATE := media

来源地址:https://blog.csdn.net/qq_34205684/article/details/122985522

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯