Android15 添加android.uid.system且系统签名后无法安装

提示:Android 应用添加android.uid.system后,系统签名,在Android15 平台上面无法adb install 安装了


一、问题场景

场景:自己日常定制化开发中,做得都是自己系统定制上面的app. 开发习惯:添加 android.uid.system 属性、添加系统签名
现象:

  • 在Android15 以前版本都是正常使用,安装,未遇到过任何问题。
  • 在Android15 user版本无法安装、在debug 版本上面可以正常安装。

大致报错如下:
Failure [INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID: Reconciliation failed…: Reconcile failed: Reconcile failed: Non-preload app com.fise.dmseries signed with platform signature and joining shared uid: android.uid.system]

二、参考资料

平台签名的共享 UID 许可名单
Android 15 平台签名的共享 UID 许可名单

三、修复解决方案

### Android 中使用共享用户 ID 进行 V1 和 V2 系统签名的过程 #### 使用 `android:sharedUserId` 属性的要求 为了使应用程序能够运行在同一进程中并共享资源,必须在清单文件中声明 `android:sharedUserId` 属性。当设置此属性时,所有具有相同 `sharedUserId` 的 APK 将被赋予相同的 Linux 用户 ID,在安装过程中这些包会被分配到同一用户下[^1]。 对于希望获取系统级权限的应用来说,通常会将 `sharedUserId` 设置为 `"android.uid.system"`。这使得应用能够在一定程度上模拟系统进程的行为,并可能获得额外的安全敏感型 API 访问权。然而,这样做也意味着该应用需要经过严格的验证流程来证明其合法性以及安全性。 #### 清单文件中的配置示例 下面是一个典型的 manifest 文件片段,展示了如何指定 `sharedUserId`: ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapplication" android:versionCode="1" android:versionName="1.0" android:sharedUserId="android.uid.system"> </manifest> ``` 请注意,这里使用的 `sharedUserId` 是 `"android.uid.system"`,这意味着该应用请求成为系统的一部分。这种情况下,不仅限于普通用户的权限范围之外的操作变得可行,而还可以与其他标记了同样 `sharedUserId` 的组件交互。 #### 关键点说明 - **唯一性**: 每个项目应当保持一致的 `sharedUserId` 值;否则可能导致冲突或无法正常工作。 - **安全审查**: 对于想要采用 `android.uid.system` 作为 `sharedUserId` 的开发者而言,提交给 Google Play Store 或其他分发渠道之前需接受严格审核以确认身份合法性和目的正当性。 - **路径访问**: 当两个不同的 Package Name 下的应用设置了相同的 `sharedUserId` 后,则它们可以在 `/data/data/自定义的package/` 目录结构内相互读写数据[^2]。 #### V1 和 V2 签名机制的区别 Android 支持两种主要类型的 APK 签名方案——JAR Signature Scheme (V1) 和 APK Signature Scheme v2 (V2)[^4]。其中, - **V1 方案**基于 JAR 签名标准,适用于较旧版本的 Android 设备; - **V2 方案**引入了一种更高效、更快捷的方法来进行完整性校验,它直接嵌入到了 APK 文件内部而不是依赖外部 `.RSA`,`.DSA` 文件。 重要的是要注意,如果打算利用某些高级特性(如 `android:sharedUserId= "android.uid.system"`),则很可能还需要遵循特定平台供应商所规定的附加认证过程,尤其是针对那些涉及硬件控制或其他特权操作的功能模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野火少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值