android jni通过cmake使用第三方静态库和动态库

本文介绍如何使用CMake构建包含外部静态库和动态库的JNI项目。通过配置build.gradle和CMakeLists.txt文件,实现对第三方库的集成,并生成所需的.so文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

google 官方现在推荐使用cmake来构建jni。


本人正好工作需要使用第三方的静态库和动态库,写此文 权当做个记录。


首先修改app的build.gradle文件 


ndk {
    abiFilter 'armeabi'
}
externalNativeBuild {
    cmake {
        arguments '-DANDROID_PLATFORM=android-13',
                '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_static'
    }
}


externalNativeBuild {
    cmake {
        path 'src/main/cpp/CMakeLists.txt'
    }
}

sourceSets {
    main {
        // copy libusb1.0.so to APK
        jniLibs.srcDirs = ['/home/chenhf/libusb/android/libs']
    }
}

创建CMakeLists.txt文件 
# Sets the minimum version of CMake required to build the native
# library. You should either keep the default value or only pass a
# value of 3.4.0 or lower.

cmake_minimum_required(VERSION 3.4.1)

# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds it for you.
# Gradle automatically packages shared libraries with your APK.


set(LIBHARDWARE_DIR /home/chenhf/workspace/android/PSAMDemo/app/libhardware)
add_library(hardware STATIC IMPORTED)
set_target_properties(hardware PROPERTIES IMPORTED_LOCATION ${LIBHARDWARE_DIR}/${ANDROID_ABI}/libhardware.a)


set(LIBUSB_DIR /home/chenhf/libusb/android/libs)
add_library(usb SHARED IMPORTED)
set_target_properties(usb PROPERTIES IMPORTED_LOCATION ${LIBUSB_DIR}/${ANDROID_ABI}/libusb1.0.so)



set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")

add_library(psamwrapper SHARED psamwrapper.cpp)
target_link_libraries(psamwrapper hardware usb android log)

最后会生成so文件,最终结果见下图



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值