首页 > 解决方案 > libs 和 jniLibs 的 Android Studio 依赖问题

问题描述

我有一个需要使用 OpenCV 和另一个第三方库的应用程序。我按照这个stackoverflow 指令导入最新版本的 OpenCV (v3.4.3) 并将 .so 文件复制到 /app/src/main/jniLibs。第三方库打包成aar文件放在/app/libs文件夹下。

我的应用程序的 build.gradle 如下所示:

dependencies {
implementation project(':openCVLibrary343')
implementation(name: 'custom', ext: 'aar')
...

build.gradle 也有这个设置(我认为)指示 Android Studio 在 libs 文件夹中查找第三方库:

repositories {
flatDir {
    dirs 'libs'
}

虽然代码编译得很好,但我在尝试运行应用程序时遇到了错误。基本上,Android Studio 抱怨第三方库已经找不到了。但是当我使用“构建>分析APK”查看APK文件的lib文件夹中的内容时,我发现第三方库中的so文件实际上在那里。

有没有人有类似的问题?我一直在寻找答案,但没有找到任何特别相关的东西。我正在使用带有最新版本 Gradle 的 Android Studio 3.2。

标签: androidandroid-studioopencvgradleandroid-gradle-plugin

解决方案


好的,我自己解决了这个问题。问题是我的第三方库只为 armeabi-v7a 提供了一个 .so 文件,而 OpenCV 有许多其他文件夹用于不同的系统。如果将所有文件夹复制到 jniLibs,Android 会期望 armeabi-v7a 以外的文件夹具有相同的 .so 文件。所以它抱怨并停止了应用程序。

解决方案是从 jniLibs 文件夹中删除 OpenCV 中的所有其他文件夹,并仅保留 armeabi-v7a。


推荐阅读