NDK调用非JNI标准的so文件

本文介绍了如何在Android中通过NDK调用非JNI标准的SO库文件。内容包括使用CMakeLists.txt配置第三方库路径,注意set_target_properties的位置,以及在C++代码中封装调用。此外,还展示了简单的C代码示例和build.gradle的配置方法。
摘要由CSDN通过智能技术生成

博客导航

调用so文件有两种方式,一种是标准的jni文件,另外一种不是jni标准。jni标准可以直接用jni标准来调用,非jni标准的需要外面包裹一层jni标准才能调用。下面就演示怎么用。

NKD可以用ndk-build来编译,也可以用cmake来编译。这里用的是cmake。
CMakeList.txt内容。

# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html

# Sets the minimum version of CMake required to build the native library.

cmake_minimum_required(VERSION 3.4.1)

# 这里设置外部代码根目录
set(distribution_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../../distribution)

#调用第三方so文件
add_library(slzr-lib SHARED IMPORTED)
set_target_properties(slzr-lib PROPERTIES IMPORTED_LOCATION
        ${distribution_DIR}/slzr/lib/${ANDROID_ABI}/libslzr.so)

#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
#主so文件配置
add_library(native-lib
        SHARED
        #这里设置需要引入的c文件
#        ${distribution_DIR}/slzr/src/libposapplication.cpp
        native-lib.cpp)

#这里设置生成so文件的输出目录,可以不设置
set_target_properties(native-lib
        PROPERTIES
        LIBRARY_OUTPUT_DIRECTORY
        "${distribution_DIR}/native-lib/lib/${ANDROID_ABI}")

#这里设置外部源码位置
target_include_directories(native-lib PRIVATE
#        ${distribution_DIR}/slzr/src
        ${distribution_DIR}/slzr/include)

find_library(log-lib
        log)


target_link_libraries(native-lib
        slzr-lib   #第三方so文件

        ${log-lib})

CMakeList里面设置了第三方的so库地址。
值得注意的是set_target_properties设置需要放到对应的add_library的下面。target_link_libraries需要加入第三方so文件的名称。
我这里直接生成一个测试的非标准的jni文件给项目来调用。

这里是封装的c++调用。

#include <jni.h>
#include <string>
#include <stdio.h>
#include <iostream>
#include "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值