El error INSTALL_FAILED_MISSING_SHARED_LIBRARY ocurre cuando Android instala apk

Proporcionar a los colegas del grupo de aplicaciones una interfaz de paquete jar basada en el método de complemento y encontraron un error INSTALL_FAILED_MISSING_SHARED_LIBRARY durante la depuración.

El trasfondo de encapsular interfaces en el modo de complemento es proporcionar interfaces stub vacías. La integración de la aplicación es solo para la compilación normal del paquete jar de referencia, y el tiempo de ejecución real depende principalmente del sistema actual, lo que evita la interfaz dominante debido al sistema jar Control derechos, en el caso de que no haya cambios importantes en la interfaz, la aplicación no se preocupa por la implementación real de la interfaz.

Agregue una referencia a la biblioteca dinámica en la aplicación AndroidManifest.xml, de la siguiente manera:

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

Ponlo aquí, cuando el sistema no agrega platform.xml (ruta del dispositivo / system / etc / allow / platform.xml), la aplicación informa del error INSTALL_FAILED_MISSING_SHARED_LIBRARY

Primero echemos un vistazo a dónde se agrega la biblioteca lib abierta a la aplicación por el sistema Android
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" />

Entonces agregamos nuestra propia biblioteca de interfaz al directorio correspondiente del sistema, para comprender el acoplamiento, agregamos directamente nuestra propia compilación 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>

Agregue y compile el Andorid.mk del módulo de interfaz:

########################
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)

La aplicación usa la biblioteca use-library, que se puede resumir en tres puntos:
1. La aplicación usa el stub jar complementario para hacer referencia y compilar;
2. El sistema / sistema / marco tiene una interfaz que depende del sistema para implementar el paquete jar com.test.audio.jar;
3. El sistema /system/etc/permission/platfrom_xx.xml libera la ruta asignada a la biblioteca de llamadas de la aplicación.
.

Supongo que te gusta

Origin blog.csdn.net/jeephao/article/details/107432720
Recomendado
Clasificación