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

Android Studio项目中链接.so库失败,CMake报错testlib未找到

解决Android Studio中链接原生.so库时的CMake变量NOTFOUND问题

你在接入本地.so库时碰到的testlib变量找不到的错误,是CMake配置里很常见的一类问题,我给你梳理几个实用的排查和解决方向:

1. 确认.so文件的存放路径符合规范

Android Studio对原生库的存放位置有明确要求,你需要把.so文件放到对应ABI架构的目录下:

  • 直接存放在项目内的话,路径应为src/main/jniLibs/<abi>/libtestlib.so,其中<abi>可以是armeabi-v7a、arm64-v8a、x86、x86_64这些常用架构。
  • 如果是通过CMake的IMPORTED方式引入,要确保在CMake脚本里准确指定了.so文件的路径。

2. 修正CMakeLists.txt中的库配置逻辑

你需要明确将.so库声明为IMPORTED目标,以下是标准的配置示例:

# 声明要导入的共享库
add_library(testlib SHARED IMPORTED)

# 为不同ABI架构指定对应的.so文件路径
set_target_properties(testlib PROPERTIES
    IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libtestlib.so
)

# 如果该.so库需要关联头文件,记得指定头文件目录
target_include_directories(你的JNI模块名称 PRIVATE ${CMAKE_SOURCE_DIR}/src/main/jni/include)

# 最后将导入的库链接到你的JNI模块
target_link_libraries(你的JNI模块名称 testlib ${log-lib})

注意:把示例里的你的JNI模块名称替换成你项目中实际的CMake目标名,${ANDROID_ABI}会自动匹配当前编译的架构,不用手动硬编码

3. 验证gradle配置的正确性

在app模块的build.gradle中,要确保CMake配置指向了正确的脚本文件,同时指定的ABI架构和.so文件的存放目录一致:

android {
    ...
    defaultConfig {
        ...
        externalNativeBuild {
            cmake {
                arguments "-DANDROID_STL=c++_shared"
                abiFilters 'armeabi-v7a', 'arm64-v8a' // 此处要和你存放.so的ABI目录完全对应
            }
        }
    }
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt" // 你的CMakeLists文件实际路径
            version "3.22.1" // 匹配你项目使用的CMake版本
        }
    }
}

4. 清理缓存后重新构建

有时候旧的构建缓存会导致配置不生效,你可以尝试:

  • 点击Android Studio工具栏的Build -> Clean Project
  • 接着执行Build -> Rebuild Project
  • 也可以手动删除项目根目录下的.cxx和build目录后重新构建

如果按照上述步骤操作后还是有问题,你可以把完整的CMakeLists.txt内容贴出来,我再帮你精准定位问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:29:28