使用CMake编译Arm64安卓版OpenVINO时未生成Java API文件
背景信息
- 操作环境:Ubuntu 20.04
- 目标架构:Arm64(安卓设备)
- OpenVINO版本:2021.4.1 + OpenVINO Contrib 2021.4
- 已执行操作:
- 安装OpenJDK 8:
sudo apt-get install -y openjdk-8-jdk - 下载Android NDK r20
- 克隆对应版本的OpenVINO及Contrib仓库
- 启用
BUILD_java_api参数编译,但未生成inference_engine_java_api.jar,仅得到.so和.a文件
- 安装OpenJDK 8:
排查与解决步骤
1. 确保CMake正确识别Java环境
OpenVINO的Java API编译依赖JDK路径的正确检测,即使安装了OpenJDK 8,CMake仍可能无法自动识别。需在CMake配置阶段检查输出日志,确认是否存在类似Found Java: /usr/lib/jvm/java-8-openjdk-amd64/bin/javac (found version "1.8.0_XXX")的记录。若未检测到,需手动指定Java相关参数:
-DJAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 \ -DJAVA_AWT_INCLUDE_PATH=/usr/lib/jvm/java-8-openjdk-amd64/include \ -DJAVA_AWT_LIBRARY=/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/libawt.so \ -DJAVA_JVM_LIBRARY=/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so
2. 同步OpenVINO与Contrib版本
当前使用的OpenVINO为2021.4.1,Contrib为2021.4,版本小差异可能导致Java API模块加载失败。需将Contrib版本同步为2021.4.1:
git clone --branch 2021.4.1 https://github.com/openvinotoolkit/openvino_contrib.git
3. 完善Android NDK配置
Android NDK r20需在CMake中明确指定路径与安卓平台参数,确保交叉编译环境正确:
-DCMAKE_TOOLCHAIN_FILE=/path/to/android-ndk-r20/build/cmake/android.toolchain.cmake \ -DANDROID_ABI=arm64-v8a \ -DANDROID_PLATFORM=android-24
替换/path/to/android-ndk-r20为实际解压路径,android-24是OpenVINO 2021.4要求的最低安卓版本。
4. 确认编译目标与依赖项
Java API依赖动态库支持,需确保BUILD_SHARED_LIBS=ON,同时显式开启核心模块:
-DBUILD_SHARED_LIBS=ON \ -DBUILD_INFERENCE_ENGINE=ON \ -DBUILD_INFERENCE_ENGINE_C_API=ON
配置完成后执行make help,检查是否存在inference_engine_java_api相关编译目标,若不存在则说明模块未被正确启用。
5. 分析编译日志定位问题
重新执行编译并保存日志,搜索关键信息排查错误:
make -j$(nproc) 2>&1 > build.log
在build.log中搜索java_api或jar关键词,查看是否存在依赖缺失、路径错误等跳过或失败提示。
6. 检查Jar文件的实际生成路径
OpenVINO 2021.4.1的Java API Jar文件可能不在预期路径,可检查以下目录:
openvino/build/inference_engine/thirdparty/java_api/openvino/build/bin/aarch64/Release/
内容的提问来源于stack exchange,提问作者Abdelmalek Djamaa

