脚本宝典收集整理的这篇文章主要介绍了AS使用NDK Cmake方式依赖第三方库,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
AS使用NDK @R_757_1512@方式依赖第三方库注意事项
AS2.2以后支持Cmake了,以前的AndROId.mk
的方式可以告别了,官方教程
CMakeLists.txt文件的书写
-
引入第三方库使用add_library()
需要指定是SHAred
->.so
or statIC
->.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
):
![cpu架构.png](http://upload-images.jianshu.io/upload_images/1638086-d0faebf2a7f41dee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
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基本都没啥问题,需要添加的可能有一下几点
以上是脚本宝典为你收集整理的AS使用NDK Cmake方式依赖第三方库全部内容,希望文章能够帮你解决AS使用NDK Cmake方式依赖第三方库所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。