MacOS环境下为Android JUnit测试配置OpenCV v4.8.0 Android SDK
在MacOS环境下开发Android应用时,常规代码中OpenCV v4.8.0可正常运行,但执行JUnit本地测试时会抛出如下错误:
java.lang.UnsatisfiedLinkError: no opencv_java4 in java.library.path: [/Users/patrick/Library/Java/Extensions, /Library/Java/Extensions, /Network/Library/Java/Extensions, /System/Library/Java/Extensions, /usr/lib/java, .]
网上常见的修改Homebrew Java公式、改用仪器化测试、编译OpenCV Java源码等方法均已过时或不适用,以下是针对该场景的有效配置方案:
配置步骤
步骤1:提取并转换OpenCV本地库
从OpenCV Android SDK包的opencv-4.8.0-android-sdk/sdk/native/libs路径中,取出与MacOS架构匹配的libopencv_java4.so文件(Intel芯片选x86_64,Apple芯片选arm64),将其重命名为libopencv_java4.dylib(MacOS动态库标准后缀)。步骤2:存放库文件到测试资源目录
在Android项目的app/src/test/resources下创建libs/[对应架构]目录(比如libs/x86_64),将重命名后的libopencv_java4.dylib放入该路径。步骤3:在测试类中手动加载库
在JUnit测试类的静态代码块中指定库文件路径并加载:static { try { String libAbsolutePath = new File("src/test/resources/libs/x86_64/libopencv_java4.dylib").getAbsolutePath(); System.load(libAbsolutePath); } catch (Exception e) { throw new RuntimeException("加载OpenCV库失败", e); } }步骤4:配置测试JVM参数(可选)
若上述步骤仍报错,可在Android Studio的JUnit测试Run Configuration中添加JVM参数:-Djava.library.path=./app/src/test/resources/libs/x86_64
注意事项
- 必须确保库文件的架构与本地MacOS环境完全匹配,否则会出现加载失败。
- 该方案仅适用于本地JUnit测试,仪器化测试的配置逻辑与本地测试不同。
内容的提问来源于stack exchange,提问作者patwis

