Android Studio中的CmakeList NDK配置

时间:2023-03-08 22:28:34

Android Studio2.2之后直接可以在创建工程时添加NDK支持了,添加之后,main文件夹下会多出一个native-lib.cpp这个文件,如果只为了一个简单的NDK接口,貌似这就结束了。直接在native-lib.cpp下编程即可。

  但是,如果使用第三方库,就得重新配置了。到目前为止,网上大半文章都是.mk的配置方法,按照他们的步骤,在AS上一步一步做下去好像很难成功。

  Android Studio2.2使用Cmake作为跨平台编译工具,创建完一个工程后,JNI的配置都由Cmake来管理,在priject文件夹下的CmakeList文件中。

Android Studio中的CmakeList NDK配置

CMake有一套自己的编写规则,按照引入方式的不同,先写两个demo

1,native-lib文件调用第三方库

  第三方库是被编译成so库直接调用的,配置so库的时候,对应的头文件也要添加上

  

#譬如加载一个FFMPEG模块

1 include_directories(${pathToFFMPEG}/include) #添加ffmpeg对应的头文件目录,${pathToFFMPEG}为前面配置过的路径,可以替换为include_directories(E:/ffmpeg/include)这种路径格式
2 add_library( ffmpeg SHARED IMPORTED) #添加库文件,实际上就是引入so文件,IMPORT代表从第三方引入的意思
3 set_target_properties( ffmpeg PROPERTIES IMPORTED_LOCATION ${pathToProject}/app/src/main/jniLibs/${ANDROID_ABI}/libffmpeg.so#这句话是ffmpeg对应的so文件,so文件是放到JNILibs这个文件夹中
4 target_link_libraries( $\{log-lib} native-lib ffmpeg) #为native-lib加载ffmpeg库.

  这样配置好就可以在native-lib里调用ffmpeg模块了

2,自己编写的cpp文件

#加载coreAlg核心代码
add_library(coreAlg SHARED src/main/cpp/coreAlg.cpp )#添加库文件,这种实际上是有AS给编译成so文件了
target_link_libraries(native-lib ${log-lib} coreAlg)#native-lib里调用coreAlg