android - 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。
解决方案
好的,我自己解决了这个问题。问题是我的第三方库只为 armeabi-v7a 提供了一个 .so 文件,而 OpenCV 有许多其他文件夹用于不同的系统。如果将所有文件夹复制到 jniLibs,Android 会期望 armeabi-v7a 以外的文件夹具有相同的 .so 文件。所以它抱怨并停止了应用程序。
解决方案是从 jniLibs 文件夹中删除 OpenCV 中的所有其他文件夹,并仅保留 armeabi-v7a。
推荐阅读
- java - WebView 和 DownloadListener 发出两个 GET 请求?如何改变这种行为?
- sql - 获取视图列表及其执行时间
- c# - 如何检测在 C# WPF 的列表视图中单击了哪一行和哪一列
- javascript - 检测 Node.js 的 Net 模块中的“数据”事件收到的完整数据
- javascript - jquery onchange函数没有调用
- python - 将 BeautifulSoup 汤转换为 lxml 元素
- macos - macOS中如何通过进程找到线程id?
- ffmpeg - FFMpeg 复制直播流(限制为 60 秒文件)
- batch-file - 用于执行文件夹中所有脚本的 Windows 批处理脚本
- android - 我如何在 imageview 上设置 textview 并在水平 Recycler View 内的图像边界底部设置文本中心