确切的错误消息是什么?
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开发人员的一个答案,我发现以下内容对我有用:
-
将/data/system/packages.xml复制到另一个位置或您的计算机。
-
使用文本编辑器对其进行编辑,并删除将应用包 ID 作为名称属性的 xml 块。在这种情况下,应用程序"Termux"的示例:
<shard-user name="com.termux" userId="10102"> <sigs count="1"> <cert [...]/> </sigs> </shared-user>
-
将修改后的版本复制到/data/system/packages.xml 并覆盖旧版本。
-
清除 dalvik 缓存("adb shell rm/data/dalvik-chache/*"或通过恢复(
-
重新启动
-
安装这次应该经历的apk
注意:
这很可能不适用于系统软件包(那些以"android"开头的软件包,例如"android.uid.system"(。
关于共享用户的进一步阅读:
- 其约束说明
- 安卓开发者