AVD模拟器报INSTALL_FAILED_MISSING_SHARED_LIBRARY安装错误排查
问题根因
你之前将EMDK的jar包放入SDK optional 目录、修改optional.json的操作,仅能解决编译阶段找不到EMDK类的报错,不会影响APK打包逻辑,也不会给AVD虚拟设备的系统镜像添加对应共享库。
Android系统安装APK时校验<uses-library>声明,本质是检查系统分区预装的共享库列表,谷歌官方提供的原生AVD镜像没有内置Zebra的com.symbol.emdk库,因此必然触发INSTALL_FAILED_MISSING_SHARED_LIBRARY安装错误。
解决方案
根据你的调试需求二选一即可:
方案1:仅需在AVD调试非EMDK相关业务逻辑
不需要换模拟器,改2处配置即可:
- 修改Manifest中的
uses-library声明,添加android:required="false"属性,告诉系统这个库不是安装必需项:
<application> <!-- 其他原有配置 --> <uses-library android:name="com.symbol.emdk" android:required="false" /> </application>
- 所有涉及EMDK调用的代码位置,加运行时库存在校验,避免非Zebra设备上触发类找不到崩溃:
// Java示例 private boolean isEMDKAvaliable() { try { Class.forName("com.symbol.emdk.EMDKManager"); return true; } catch (ClassNotFoundException e) { return false; } }
触发打印、扫码等EMDK相关逻辑前先做判断,返回false时直接跳过对应逻辑即可,不影响其他业务功能在AVD上的调试。
注意:该配置不影响实体Zebra设备的运行,Zebra设备系统自带EMDK库,相关功能可正常触发。
方案2:需要在模拟器上调试EMDK相关打印/扫码功能
不要使用谷歌原生AVD镜像,替换为Zebra官方提供的对应Android版本的设备模拟器镜像,这类镜像默认预装了对应版本的EMDK共享库,既不会触发安装校验错误,也自带模拟的硬件能力,可以直接调试EMDK相关业务逻辑。
内容的提问来源于stack exchange,提问作者rdejulis
相关产品推荐
相关产品推荐

