You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android模拟器中libvsomeip3.so无法加载的问题求助

问题分析

启动vsomeip Java示例时触发java.lang.UnsatisfiedLinkError,核心原因:

  • libServiceVsomeipHelloWorldServiceJNI.so依赖的libvsomeip3.so未被打包进APK,加载时无法找到
  • 构建完成后libvsomeip3.so被自动删除,而libvsomeip3-cfg.so等文件保留,是因为Android Gradle Plugin(AGP)默认仅打包直接被应用JNI库依赖或明确指定的库,libvsomeip3.so属于间接依赖,未被AGP检测到,因此被清理。
快速修复方案

方案1:通过CMake强制安装libvsomeip3.so到输出目录

修改顶层CMakeLists.txt,在add_subdirectory(external/vsomeip)之后添加以下代码:

# 强制将libvsomeip3.so安装到AGP识别的库输出目录
install(TARGETS vsomeip3
        LIBRARY DESTINATION ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ANDROID_ABI})

此配置会让CMake将libvsomeip3.so复制到AGP保留的路径,避免被构建后清理。

方案2:手动复制库到jniLibs目录

  1. 在构建完成后,从CMake输出目录(通常是app/.cxx/cmake/debug/x86_64/)找到libvsomeip3.so
  2. 将其复制到app/src/main/jniLibs/x86_64/目录下(若目录不存在则手动创建)
  3. 在build.gradle的android块中添加以下配置,确保AGP打包该目录下的库:
sourceSets {
    main {
        jniLibs.srcDirs = ['src/main/jniLibs']
    }
}

方案3:明确JNI库与libvsomeip3的依赖关系(解决启用JNI模块的额外问题)

取消顶层CMakeLists.txt中#add_subdirectory(app/src/main/cpp)的注释,然后在app/src/main/cpp/的CMakeLists.txt中添加:

target_link_libraries(ServiceVsomeipHelloWorldServiceJNI
        PUBLIC vsomeip3)

此配置会让AGP检测到JNI库对libvsomeip3.so的直接依赖,自动打包libvsomeip3.so及其关联的libvsomeip3-cfg.so等依赖库,同时解决启用JNI模块时的缺失库问题。

额外说明

AGP的"未使用库清理"机制会自动删除未被应用代码直接依赖的库,这是导致libvsomeip3.so被清理的根本原因。通过上述方案明确依赖关系或强制保留库,即可解决问题。

内容的提问来源于stack exchange,提问作者kingvittu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:10:47