应用安装期间出现INSTALL_FAILED_SHARED_USER_INCOMPATIBLE错误



确切的错误消息是什么?

F-Droid 显示的错误消息是"新软件包正在请求一个已安装在设备上且没有匹配签名的共享用户。错误代码为 INSTALL_FAILED_SHARED_USER_INCOMPATIBLE/-8。

我什么时候遇到这个问题?

尝试从 F-Droid 安装应用程序"Termux"时。本质上是安装 apk,而不是从 Play 商店安装。

我尝试了什么来解决这个问题?

  • 在堆栈溢出中搜索解决方案
  • 卸载
  • 应用程序/卸载所有用户的应用程序
  • 从Play商店安装应用程序,然后再次卸载

可能原因:

我之前从 Play 商店安装了该应用程序,然后在尝试从 F-Droid 重新安装之前将其卸载。在我看来,这是最可能的原因,尽管我无法在另一台设备上重现它.
(抢占我的答案(事实证明,/data/system/packages.xml仍然包含应用程序的共享用户条目,包括签名。这就解释了为什么我无法安装其他apk,因为它们是使用不同的密钥签名的,尽管它们是相同的应用程序和开源。

在没有 root 访问权限的情况下解决了问题:

我还遇到了"错误 (-8(:新软件包请求了一个共享用户,该用户已安装在设备上并且没有匹配的签名。 在 Google Play 中卸载 termux 并尝试从 F-Droid 重新安装它后。

手机未植根,因此上面建议的解决方案不可用。但是,我注意到仍然安装了一些随附的termux应用程序,即termux API,termux tasker和termux样式。

卸载它们后,以及清空几个可能相关的应用程序的缓存,包括谷歌 Play 商店、谷歌播放服务和包安装程序,我能够从 F-Droid 安装 termux 以及随附的应用程序。

如何解决:

警告:这是解决此问题的相当肱骨的方法。它还需要根访问权限。

基于用户tweakradje对xda开发人员的一个答案,我发现以下内容对我有用:

  1. 将/data/system/packages.xml复制到另一个位置或您的计算机。

  2. 使用文本编辑器对其进行编辑,并删除将应用包 ID 作为名称属性的 xml 块。在这种情况下,应用程序"Termux"的示例:

    <shard-user name="com.termux" userId="10102">
    <sigs count="1">
    <cert [...]/>
    </sigs>
    </shared-user>  
    
  3. 将修改后的版本复制到/data/system/packages.xml 并覆盖旧版本。

  4. 清除 dalvik 缓存("adb shell rm/data/dalvik-chache/*"或通过恢复(

  5. 重新启动

  6. 安装这次应该经历的apk

注意:

这很可能不适用于系统软件包(那些以"android"开头的软件包,例如"android.uid.system"(。

关于共享用户的进一步阅读:

  • 其约束说明
  • 安卓开发者

相关内容

最新更新