关于Installation error: INSTALL_FAILED_MISSING_SHARED_LIBRARY

本文探讨了在使用GoogleMap时遇到的安装错误:INSTALL_FAILED_MISSING_SHARED_LIBRARY,通过分析原因和解决方案,揭示了精简刷机包可能导致的问题,并提供了解决方法。建议开发者在进行真机测试时,确保使用原带固件或完整包刷机的设备,以避免此类错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我是在使用Google Map时发现的这个问题, 在模拟器上可以正常运行,但是只要连接真机测试, 就会出现 Installation error: INSTALL_FAILED_MISSING_SHARED_LIBRARY  这种错误。
经过网上查找,大部分回答都把错误归咎于一些项目生成时的错误操作。 但是明明模拟器可以正常运行,偏偏真机却不可以。 后来,我看到一篇相关文章,作者购买了google的开发机,由于开发机中缺少相关文件,导致这种错误。
于是我开始怀疑是android固件的问题, 我的测试机时Moto的MB200,是T-mobile定制,所以只能刷国内大神们汉化精简过的固件。 一般精简过的固件都会把google服务精简掉, 然后我下载了一个保留所有google服务的刷机包将机子重新刷了一遍。 之后测试问题消失。

总结来说:
网上精简的刷机包由于需要删去了大部分平常人不用的服务,普通人用当然没问题, 但对于我们这些开发者来说问题就大了。 所以说,开发过程中真机测试一定要在原带固件或是刷了完整包的手机上。



下面是我从网上找到的android 2.3 完整google服务的刷机包:

          2.3刷机包
<think>嗯,用户遇到了安卓应用安装失败的问题,错误代码是INSTALL_FAILED_SHARED_USER_INCOMPATIBLE。我需要先理解这个错误的原因。根据之前的引用内容,这个错误通常和AndroidManifest.xml中的android:sharedUserId属性有关。用户可能是在尝试将普通应用提升为系统应用,但缺少正确的系统签名或者设备没有root权限。 首先,用户的问题是如何解决这个安装错误。根据引用资料,解决方案主要有两种:一种是去除sharedUserId属性,另一种是进行系统签名。用户可能需要知道这两种方法的步骤,以及各自的优缺点。比如,去掉属性虽然简单,但可能无法使用需要的系统权限;而系统签名则需要获取特定的密钥文件,这可能对普通开发者来说比较困难。 另外,引用中提到系统签名需要platform.pk8和platform.x509.pem这两个文件,通常位于Android源码的特定目录下。如果用户没有这些文件,可能需要从其他地方获取,比如下载或者自己生成,但生成正确的签名可能需要系统权限或者特定的开发环境。此外,使用系统签名后,可能需要通过adb命令卸载旧版本应用并重启设备,这也需要用户有一定的技术基础。 用户可能还想知道是否需要root设备,引用中提到root设备是另一种解决方法,但可能不适用于所有情况,尤其是模拟器或个人手机。这时候可能需要权衡利弊,选择最适合自己的方法。同时,用户可能不清楚如何正确执行签名步骤,比如使用signapk.jar工具进行签名,这时候需要详细说明操作步骤,确保用户能正确执行。 还需要考虑用户的实际使用场景。如果用户是在开发需要系统权限的应用,那么正确的系统签名是必须的;如果只是测试或普通功能,可能去除sharedUserId更简单。此外,提醒用户在修改后重新编译和安装,以及处理可能的残留应用数据,比如通过adb卸载并重启设备,都是需要注意的步骤。 最后,应该总结解决方案,分步骤给出清晰的指导,并指出不同方法的适用情况,帮助用户根据自身需求选择最合适的解决办法。同时,生成的相关问题可以帮助用户进一步了解相关知识点,比如系统签名的其他应用场景或如何获取系统签名文件。</think>针对`INSTALL_FAILED_SHARED_USER_INCOMPATIBLE`错误,解决方案可分为以下两种路径: --- ### **解决方案一:放弃系统级权限** 1. **删除`android:sharedUserId`属性** - 打开`AndroidManifest.xml` - 移除`android:sharedUserId="android.uid.system"`声明[^1][^2] - 重新编译安装即可 2. **适用场景** - 不需要系统权限的普通应用 - 无法获取系统签名的开发环境(如模拟器/个人手机) --- ### **解决方案二:保留系统级权限** #### **步骤1:获取系统签名文件** - 需从Android系统源码中提取: ```bash # 路径示例 android/build/target/product/security/platform.pk8 android/build/target/product/security/platform.x509.pem ``` 若无法获取源码,可尝试从开发板厂商或公开资源下载[^3][^4] #### **步骤2:签名APK** 使用签名工具`signapk.jar`执行: ```bash java -jar signapk.jar platform.x509.pem platform.pk8 app-debug.apk app-signed.apk ``` 生成带系统签名的`app-signed.apk`[^3][^4] #### **步骤3:清理残留数据** 通过ADB卸载旧版本并重启: ```bash adb root adb uninstall com.xxx.vvv adb reboot ``` #### **注意事项** - 系统签名与设备强关联,不同厂商需对应签名[^3] - 需ROOT权限或设备系统镜像支持[^2] - Android Studio模拟器通常无法使用此方案[^2] --- ### **补充建议** 若出现签名冲突(如`LOCAL_CERTIFICATE`不匹配),可尝试覆盖源码目录下的签名文件: ```bash # 替换路径示例 build/target/product/security/ ``` 用目标系统的`shared.pk8`或`media.pk8`替代默认文件[^3] ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值