AS使用NDK Cmake方式依賴第三方庫
阿新 • • 發佈:2018-02-11
com exce needed 路徑 創建 images logs 每次 phi
AS使用NDK Cmake方式依賴第三方庫註意事項
AS2.2以後支持Cmake了,以前的
Android.mk
的方式可以告別了,官方教程
CMakeLists.txt文件的書寫
引入第三方庫使用
add_library()
需要指定是SHARED
->.so
orSTATIC
->.a
,和IMPORTED
,並且每次只能寫一個庫,如果引入2個第三方庫就要寫2個add_library()
add_library( nn SHARED IMPORTED )
include_directories()
用於指定頭文件的,一般是在include
include_directories(src/main/jni/armeabi-v7a/include/)
在引入第三方庫時還需要指定
set_target_properties()
庫的路徑,也就是.so
or.a
庫文件的路徑,這裏要註意的是為了區分CPU架構,不同版本的.so
文件放的路徑也不一樣,所以要用${ANDROID_ABI}
來指定路徑,這也讓我們必須把對應CPU架構的.so
文件放在指定CPU架構目錄下(這裏只有armeabi-v7a
):
如果直接寫相對路徑可能會出現set_target_properties(nn PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/src/main/jni/${ANDROID_ABI}/lib/libnn.so )
Error:error: ‘../../../../src/main/libs/libjsoncpp.a‘, needed by ‘../obj/armeabi/libnative-lib.so‘, missing and no known rule to make it
如果要依賴NDK中的庫
find_library( jnigraphics-lib jnigraphics ) target_link_libraries( StackBlur ${log-lib} ${m-lib} ${jnigraphics-lib} )
附上CMakeLists.txt全部內容:
cmake_minimum_required(VERSION 3.4.1) add_library( native-lib SHARED src/main/cpp/native-lib.cpp ) # 添加實驗室nn.so庫 add_library( nn SHARED IMPORTED ) set_target_properties(nn PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/src/main/jni/${ANDROID_ABI}/lib/libnn.so ) # 指定頭文件路徑 include_directories(src/main/jni/armeabi-v7a/include/) find_library( log-lib log ) target_link_libraries( native-lib nn ${log-lib} )
Gradle的書寫
AS創建時就是使用的cmake,所以Gradle基本都沒啥問題,需要添加的可能有一下幾點
指定需要編譯的
abi
版本,在android{}
->defaultCondfig{}
下ndk { abiFilter ‘armeabi-v7a‘ }
指定c++版本和異常處理
externalNativeBuild { cmake { cppFlags "-std=c++11 -frtti-fexceptions" } }
AS使用NDK Cmake方式依賴第三方庫