Android JNI 项目排坑

54 阅读1分钟

一、提示缺少 libc++_shared 库

在cmake构建时添加 -DANDROID_STL=c++_shared 参数即可; 在 build.gradle 中配置如下

android {
    defaultConfig {
        externalNativeBuild {
            cmake {
                arguments: '-DANDROID_STL=c++_shared'
            }
        }
    }
}

二、当使用第三方 xxx.so 动态库,提示无法加载

  1. 在cpp目录下新建 libs 文件夹用于放置so动态库
  2. build.gradle 添加如下配置与jniLibs关联起来
android {
    sourceSets {
        main {
            jniLibs.srcDirs = ['src/main/cpp/libs']
        }
    }
}
  1. 将所用到的so动态库复制到 libs 文件夹下
  2. CMakeLists.txt添加动态库
add_library(xxx_lib SHARED IMPORTED)
set_target_properties(xxx_lib PROPERTIES IMPORTED_LOCATION
        ${CMAKE_SOURCE_DIR}/libs/xxx_lib.so)

三、当所用到so动态库只支持一个平台时构建出错

在构建时只构建所支持的平台如 arm64-v8a

build.gradle中配置如下

android {
    defaultConfig {
        ndk {
            abiFilters 'arm64-v8a'
        }
    }
}