android cmake 第三方,【NDK】Android Studio2.2+使用CMake依赖多个第三方库

Android Studio2.2出来后,支持CMake构建工具,我们做NDK开发会容易很多:

支持一键生成native方法

支持在C语言中有代码提示

如果在C中写错了会有错误提示

支持在C中打断点进行debug

...

官方教程:

但是如果我在想在CMake中依赖多个第三方库,我在网上找了很久都没找到怎么使用,怎么弄都同步不过去,折腾了很久终于弄好了,记录下。

依赖的第三方库

假如我要依赖的第三方库是:libcurl.a和jsoncpp.a。

项目工程结构如下:

5f29fd671750

工程结构.png

Error

missing and no known rule to make it

我以前怎么试都编译不过去,最后发现依赖的第三方库要放到JniLibs的不同CPU架构下,不然会爆出错误:

Error:error: '../../../../src/main/libs/libjsoncpp.a', needed by '../obj/armeabi/libnative-lib.so', missing and no known rule to make it

undefined reference to AndroidBitmap_getInfo

5f29fd671750

Paste_Image.png

函数未定义,这个错误类似于在c语言中使用android_log一样,如果你在C语言中使用了AndroidBitmap,也要依赖Bitmap库:jnigraphics。需要从NDK中找到这个库并使用依赖log库的方法将其添加。

解决办法如下:

find_library( jnigraphics-lib

jnigraphics )

target_link_libraries( StackBlur

${log-lib}

${m-lib}

${jnigraphics-lib} )

CMake.txt

add_library( ): .c或者.cpp文件要假如里面;

include_directories( ) :第三库使用到的头文件;

依赖第三方库

每次只能写一个:

add_library(curl STATIC IMPORTED)

set_target_properties(curl

PROPERTIES IMPORTED_LOCATION

${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libcurl.a)

STATIC:表示静态的.a的库。

SHARED:表示.so的库。

${CMAKE_SOURCE_DIR}:表示CMake.txt的当前文件夹路径。

${ANDROID_ABI}:编译时会自动根据CPU架构去选择相应的库。

依赖NDK中的库

find_library( jnigraphics-lib

jnigraphics )

target_link_libraries( StackBlur

${log-lib}

${m-lib}

${jnigraphics-lib} )

最后附上Cmake.txt:

cmake_minimum_required(VERSION 3.4.1)

add_library(native-lib

SHARED

src/main/cpp/native-lib.cpp

src/main/cpp/JniUtils.cpp

src/main/cpp/web_task.cpp )

include_directories( src/main/cpp/include/jsoncpp

src/main/cpp/include/curl

)

add_library(curl STATIC IMPORTED)

set_target_properties(curl

PROPERTIES IMPORTED_LOCATION

${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libcurl.a)

add_library(jsoncpp STATIC IMPORTED)

set_target_properties(jsoncpp

PROPERTIES IMPORTED_LOCATION

${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libjsoncpp.a)

# 不能向下面格式写,会出现 Error:error: '../../../../src/main/libs/libjsoncpp.a', needed by '../obj/armeabi/libnative-lib.so', missing and no known rule to make it

# add_library(curl STATIC IMPORTED)

# set_target_properties(curl

# PROPERTIES IMPORTED_LOCATION

# ${CMAKE_SOURCE_DIR}/src/main/libs/libcurl.a)

# add_library(jsoncpp STATIC IMPORTED)

# set_target_properties(jsoncpp

# PROPERTIES IMPORTED_LOCATION

# ${CMAKE_SOURCE_DIR}/src/main/libs/libjsoncpp.a)

find_library( # Sets the name of the path variable.

log-lib

log )

target_link_libraries( # Specifies the target library.

native-lib

jsoncpp

curl

${log-lib} )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值