一、前言
JNI作为Java与native沟通的桥梁,项目开发中难免要使用到;而我们除了自己开发JNI之外,有时候还要在Android Studio引入别人开源的C++第三方库,并在jni层实现第三方库的调用。
二、流程
1.导入头文件和实现文件
将第三方库下载下来之后可以得到一个这种样子的文件夹fmodstudioapi11009android找到api下面的lowlevel就是android平台的相关资源:
- examples 例子
- inc 头文件
- lib 执行文件(so文件)
将inc复制到cpp文件夹下:
这就完成了头文件的导入,光导入头文件是无法实现功能的,因为头文件只是做函数的声明,所以还要导入实现文件,so文件。
2.导入so文件
将so文件导入到jniLibs文件夹下:
3.导入jar
最后还要导入以下jar包资源,先将jar包复制到libs文件夹下,再导入。
implementation files('libs\\fmod.jar')
4.CMakeLists.txt配置
导入了资源要将资源配置到CMakeLists.txt文件才能进行使用。
导入头文件:
include_directories("inc")
批量导入.c .h .cpp文件:
#批量查询到.c .h .cpp文件
file(GLOB allCpp *.c *.h *.cpp *.hpp)
add_library( # Sets the name of the library.
qq_sounddemo
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
${allCpp})//将这些文件导入到qq_sounddemo里面去
设置库文件路径,就是要链接到的so文件路径:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/../jniLibs/${CMAKE_ANDROID_ARCH_ABI}")
链接具体的库到qq_sounddemo.so里面去,不然使用会报错:找不到对应的库:
target_link_libraries( # Specifies the target library.
qq_sounddemo
# Links the target library to the log library
# included in the NDK.
${log-lib}
fmod
fmodL
)