Installation error: INSTALL_FAILED_MISSING_SHARED_LIBRARY

本文详细记录了在Odroid7开发板上解决安装带有Google Maps程序时出现的'INSTALL_FAILED_MISSING_SHARED_LIBRARY'错误的过程。通过对比emulator和真机的lib文件夹,导出缺失的共享库,并通过adb命令将其推送到真机的framework文件夹,最终解决了问题。此外,还介绍了如何修改平台权限文件和重启设备的步骤。

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

开发板带的有USB接口的GPS装置

但是经过我的测试 此GPS无法在Odroid T开发板上正常工作

这个问题等到周一和partner碰头了再解决

然后遇到的第二个问题:

运用了Google Maps的程序 在开发板中测试都无法安装 并且报错:

Failure [INSTALL_FAILED_MISSING_SHARED_LIBRARY]

从昨天开始解决这个问题 论坛有说是平台不支持的 有说是其他问题的

尝试了解决方案都未果

今天无奈之下查找了Android开发的QQ群

运气很好的是加入了一个群并且认识了“龙虾哥”

龙虾哥 上海人氏 硕士毕业 目前和一个朋友自行开发Android和iphone项目挣钱

他在听了我遇到的问题之后开始帮我想解决方法

方案1:在项目根目录下来添加libs文件夹以及armeabi和armeabi-v7a两个子文件夹

(因为他是在C平台下开发,然后再用NDK导入)

对比emulator和真机的system/lib文件夹下面的文件

把emulator上有而真机上没有的.os文件导出 并且放入之前我们创建的armeabi和armeabi-v7a两个文件夹

运行 结果失败

然后继续寻找解决方案

查看DDMS中的Logcat

红字标出程序无法加载未知共享库com.google.android.maps.jar

研究中发现 真机中 system/framework文件夹下缺少两个重要文件:

com.google.android.maps.jar

com.google.android.gtalkservice.jar

开始解决:

Enter the shell of your device.

  • adb -d shell

Remount the system partition with read/write permissions.

  • mount -o rw -t yaffs2 /dev/block/mtdblock3 /system

For me the remount was a bit different. The following did the trick

  • mount -o remount,rw /dev/root /

1.从emulator的system/framework文件夹下导出这两个文件

1.1 直接通过DDMS导出

1.2 通过adb命令导出

2. 把导出的这两个文件导入Odroid 7的system/framework文件夹下

2.1 直接通过DDMS导出

2.2 通过adb命令导出:

  • adb -d push com.google.android.maps.jar /system/framework/

或者

  • adb push com.google.android.maps.jar /system/framework/com.google.android.maps.jar

  • adb push com.google.android.gtalkservice.jar /system/framework/com.google.android.gtalkservice.jar

3. 给这两个文件添加权限

把真机中/etc/permissions/platform.xml文件取出来编辑:

<permissions>
...
<!-- This is a list of all the libraries available for application code to link against. -->
<library name="android.awt" file="/system/framework/android.awt.jar"/>
<library name="android.test.runner" file="/system/framework/android.test.runner.jar"/>
<library name="com.android.im.plugin" file="/system/framework/com.android.im.plugin.jar"/>
<library name="com.google.android.maps" file="/system/framework/com.google.android.maps.jar"/>
<library name="com.google.android.gtalkservice" file="/system/framework/com.google.android.gtalkservice.jar"/>
</permissions>
然后再把这个platform.xml文件push回真机的/etc/permissions文件夹中

4.重启真机硬件

并且

  • adb stop

  • adb start

5.尝试安装带有Google Maps的程序

期间又重启了一次开发板(真机)

(如果没有解决再次重启试试)

问题解决

Ps:11月23日补充:

之前用的开发板是Odroid T,今天换了最新版本的Odroid 7

Odroid 7安装的Android版本是2.2   同样不带地图

2.2版本与之前的版本略有不同,大家拷贝是记得必须得用2.2版本的emulator中的

com.google.android.maps.jar

注意看2,2版本的emulator的system/framework

你会发现已经没有了com.google.android.gtalkservice.jar

所以我们只需要把com.google.android.maps.jar push进你的真机文件夹即可

然后转入/etc/permissions

与之前版本不一样,Android2.2不再在platform.xml下更改

而是直接pull出你emulator的  /etc/permissions/com.google.android.maps.xml

然后push进你真机的 /etc/permissions

然后重启真机,这样就可以

解决之后看看 其实问题并不复杂 但没有解决之前是感觉非常的棘手

龙虾哥说的好  遇到问题不要急 多研究研究 要有耐心

在此谢谢龙虾哥的帮助 Thank U

这也是我写的第一篇开发笔记  以后遇到问题  还会继续写的

国内遇到此问题 在论坛上的解决方案基本无效

希望我的日志能给其他人帮助 ^ ^


http://www.cnblogs.com/leaven/archive/2012/06/18/2553038.html

<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] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值