欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android 安装apk时出现INSTALL_FAILED_MISSING_SHARED_LIBRARY错误

程序员文章站 2022-03-11 23:23:44
给app组的同事提供基于add-on方式的jar包接口,调试过程中出现调试时遇到INSTALL_FAILED_MISSING_SHARED_LIBRARY错误。以add-on方式封装接口的背景是,提供stub的空接口,app集成只是为了正常的引用jar包编译,而真正的运行时主要依赖当前的系统,这也就避免了由于系统jar主导接口的控制权,在接口没有大变化的情况下,app不用理会接口的实际实现。app AndroidManifest.xml中添加对动态库的引用,如下:

给app组的同事提供基于add-on方式的jar包接口,调试过程中出现调试时遇到INSTALL_FAILED_MISSING_SHARED_LIBRARY错误。

以add-on方式封装接口的背景是,提供stub的空接口,app集成只是为了正常的引用jar包编译,而真正的运行时主要依赖当前的系统,这也就避免了由于系统jar主导接口的控制权,在接口没有大变化的情况下,app不用理会接口的实际实现。

app AndroidManifest.xml中添加对动态库的引用,如下:

<uses-library android:name="com.test.audio" />

置于此处,当系统没有添加的platform.xml(device路径/system/etc/permission/platform.xml)中时,应用报INSTALL_FAILED_MISSING_SHARED_LIBRARY错误

我们先看看android系统对应用开放的lib库是添加在哪里
framework/base/data/etc/platform.xml

    <!-- This is a list of all the libraries available for application
         code to link against. -->

    <library name="android.test.mock"
            file="/system/framework/android.test.mock.jar" />
    <library name="android.test.runner"
            file="/system/framework/android.test.runner.jar" />
    <library name="javax.obex"
            file="/system/framework/javax.obex.jar" />
    <library name="org.apache.http.legacy"
            file="/system/framework/org.apache.http.legacy.jar" />

于是我们添加自己的接口库到系统相应目录下,为了解耦合,直接单独添加自己的xml编译
platform_test_audio.xml

<?xml version="1.0" encoding="utf-8"?>

<permissions>
    <library name="com.test.audio"
            file="/system/framework/com.test.audio.jar" />
</permissions>

接口模块的Andorid.mk添加编译:

########################
include $(CLEAR_VARS)
LOCAL_MODULE := platform_test_audio.xml
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)

#LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
**# 接口模块的jar包名,app运行真正依赖的库**
LOCAL_MODULE := com.test.audio
LOCAL_SRC_FILES := $(call all-java-files-under, libaudio/src/main/java)

# LOCAL_DEX_PREOPT := false

LOCAL_JAVA_LIBRARIES += framework

LOCAL_REQUIRED_MODULES := platform_test_audio.xml

include $(BUILD_JAVA_LIBRARY)

app使用use-library库,总结起来就是3点:
1.app 使用add-on的stub jar引用编译;
2.系统/system/framework存在运行依赖系统的接口具体实现jar包com.test.audio.jar;
3.系统/system/etc/permission/platfrom_xx.xml放开指定给app调用库的路径。
.

本文地址:https://blog.csdn.net/jeephao/article/details/107432720

相关标签: 偶遇记录