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

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

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

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

一、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“权限已经添加到应用中了

二、sharedUserId属性介绍

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

三、不同sharedUserId权限

系统中所有使用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

猜你喜欢

转载自blog.csdn.net/qq_34205684/article/details/122985522