首页 > 解决方案 > Android- 两个依赖库产生冲突,

问题描述

我需要为我的应用程序使用两个库作为依赖项。一种是用于流式传输闭路电视摄像机,SDK 由公司提供,有助于通过 P2P 连接查看他们的摄像机。我需要为 onvif 流添加另一个库。

例如,如果我将任何库添加com.github.pedroSG94.vlc-example-streamplayer:pedrovlc:2.5.14到您在 android studio 中的演示项目中

 implementation 'com.github.pedroSG94.vlc-example-streamplayer:pedrovlc:2.5.14'

然后虽然应用程序编译但会报告这样的错误

No implementation found for boolean com.company.NetSDK.INetSDK.Init(com.company.NetSDK.CB_fDisConnect) (tried Java_com_company_NetSDK_INetSDK_Init and Java_com_company_NetSDK_INetSDK_Init__Lcom_company_NetSDK_CB_1fDisConnect_2)
2019-06-02 12:25:13.011 15075-15075/com.astrolabetech.iremote E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.astrolabetech.iremote, PID: 15075
    java.lang.UnsatisfiedLinkError: No implementation found for boolean com.company.NetSDK.INetSDK.Init(com.company.NetSDK.CB_fDisConnect) (tried Java_com_company_NetSDK_INetSDK_Init and Java_com_company_NetSDK_INetSDK_Init__Lcom_company_NetSDK_CB_1fDisConnect_2)
        at com.company.NetSDK.INetSDK.Init(Native Method)
        at com.astrolabetech.common.NetSDKLib.init(NetSDKLib.java:51)

这里com.company.NetSDK.INetSDK.Init来自相机公司提供的SDK。

我尝试了多个库,这些库可以显示来自 ONVIF URI 的流,并在应用程序同时具有 NETSDK 时遇到此问题。如果我删除 NETSDK 或 streamplayer:pedrovlc lib,该应用程序将运行。

如何解决这个问题?

编辑:

未压缩的 APK 包含如下 libs 文件夹

未压缩的 apk lib 文件夹

这些库来自 SDK 模块的 JniLibs 文件夹

在此处输入图像描述

标签: android

解决方案


您似乎没有所需库的 64 位版本。因此,您可以通过从构建中删除 64 位 lib 文件夹来解决您的问题,或者将 ABI 属性设置为仅打包 32 位架构。

原因:在Android上安装应用程序时,在APK文件的“lib”文件夹内(解压文件可以看到文件夹),设备搜索本地库的文件夹,如armeabi、armeabi-v7a、arm64-v8a、x86、 x86_64。因此,如果 arm64-v8a 文件夹缺少“lib”文件夹,则库将不会从另一个文件夹安装并且会丢失。因此,您的应用程序必须为每种架构提供全套库,这就是它无法找到“布尔值”的原因。


推荐阅读