Android Studio2.2之后直接可以在創建工程時添加NDK支持了,添加之后,main文件夾下會多出一個native-lib.cpp這個文件,如果只為了一個簡單的NDK接口,貌似這就結束了。直接在native-lib.cpp下編程即可。
但是,如果使用第三方庫,就得重新配置了。到目前為止,網上大半文章都是.mk的配置方法,按照他們的步驟,在AS上一步一步做下去好像很難成功。
Android Studio2.2使用Cmake作為跨平台編譯工具,創建完一個工程后,JNI的配置都由Cmake來管理,在priject文件夾下的CmakeList文件中。
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