AS使用NDK Cmake方式依赖第三方库注意事项
AS2.2以后支持Cmake了,以前的
Android.mk
的方式可以告别了,官方教程
CMakeLists.txt文件的书写
引入第三方库使用
add_library()
需要指定是SHARED
->.so
orSTATIC
->.a
,和IMPORTED
,并且每次只能写一个库,如果引入2个第三方库就要写2个add_library()
add_library(nnSHAREDIMPORTED) 复制代码
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(nnPROPERTIES 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-libSHAREDsrc/main/cpp/native-lib.cpp )# 添加实验室nn.so库
add_library(nnSHAREDIMPORTED)set_target_properties(nnPROPERTIES IMPORTED_LOCATION${CMAKE_SOURCE_DIR}/src/main/jni/${ANDROID_ABI}/lib/libnn.so)
# 指定头文件路径
include_directories(src/main/jni/armeabi-v7a/include/)find_library( log-liblog )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"} } 复制代码
转载于:https://juejin.im/post/5a5724bf5188257334229f8d
AS使用NDK Cmake方式依赖第三方库注意事项相关推荐
- iOS架构-静态库.framework之依赖第三方库(7)
需求分析: 把自己的能力封装成静态库提供给客户使用,但是有些工作市场上已经有很好的公开的代码,或者成本很低的解决方案,我们就可以使用别人公开的.或者低成本采购的技术来为我们服务.制作静态库也是 ...
- cmake导入so库_通过CMake方式生成动态库so文件
JNITest 通过CMake方式生成动态库so文件 简介 Java JNI的本意是Java Native Interface(Java本地接口),它是为了方便Java调用C.C++等本地代码所封装的 ...
- (转载)Android studio 导入或依赖第三方库失败
Android studio 导入或依赖第三方库失败 原文链接 在使用第三方库的时候,需要添加很多仓库,以保证可以能正确快速的下载到我们所需要的类库,但是经常会出现各种问题. 以下为个人问题总结 首先 ...
- python如何封装成可调用的库_在python中如何以异步的方式调用第三方库提供的同步API...
在关于asyncio的基本用法中提到,asyncio并不是多线程.在协程中调用同步(阻塞函数),都占用同一线程的CPU时间,即当前线程会被阻塞(即协程只会在等待一个协程时可能出让CPU,如果是普通函数 ...
- 依赖第三方库时出现的问题:Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 16
导入第三方库时出现了sdk版本不兼容问题 为我们app的module所支持的sdk最低版本与依赖module的sdk最低版本不一致 把15-->16即可
- mac上用qt调用自己生成的qt动态库,该动态库又依赖第三方库
qt下依赖于第三方库生成的动态库的调用 概述 基于声网的sdk如何在自己的动态库中使用 使用基于第三方库的动态库 下面看pro文件中的设置 概述 初次使用mac上的qtCreator生成动态库,该动态 ...
- xml解析库对比总结(解析方式,第三方库,TinyXml)
一. 解析方式 xml的2种解析方式(DOM和SAX解析方式): https://blog.csdn.net/weixin_42472048/article/details/81264570 dom解 ...
- vue引入第三方库注意事项
1.第三方库尽量不要用import引用 错误示范 找不到路径,会报错 2.第三方文件放到public文件夹里,在index.html文件里进行引用 正确做法
- Gradle打可运行Jar包(包含依赖第三方库中的类)
为什么80%的码农都做不了架构师?>>> 使用Gradle来打Jar包,在引入Gradle的java插件后,直接就能实现 在build.gradle文件中引入java插件 pl ...
最新文章
- JS中的null和undefined,undefined为啥用void 0代替?
- spring-servlet.xml与applicationContext.xml
- JQuery 总结(5) 总结各种小应用
- Solr配置IK分词器
- 日志规范之为什么要使用SLF4J
- ruby与python_Ruby对比Python的优势和劣势
- 关闭word_Word教程第2讲:文档的基本操作(含视频)
- 写java线程导致电脑内存不足_如何写出让java虚拟机发生内存溢出异常OutOfMemoryError的代码...
- 709. 转换成小写字母 golang 字符串处理
- python compile
- 【转】PHP的执行原理/执行流程
- 俊杰隐藏文件程序源码分享 C#
- bat批量剪切命令_批量处理文件.bat命令手册
- JavaScript 基础概念
- Cisco防火墙基础介绍及配置
- 3.8 js过渡效果
- mysql like 原理_MySql原理
- php 正则 标点符号,js正则匹配中文标点符号
- 架构师之路(七)之五视图方法论
- 制作美观GIS地图,掌握这些技巧就够了
热门文章
- puppet连载八:linux优化模块
- LeetCode刷题(14)
- linux mysql集群 备份与恢复,Linux下MySQL的备份和恢复
- mysql limit分页_MySQL order by limit 分页数据重复问题
- websphere linux版本,安装IBM Websphere on linux
- 【第1篇】Python爬虫实战-王者荣耀高清壁纸下载
- 通过jQuery获取Select选中的值或文本
- [Spring Boot系列]1. 项目搭建之一
- [Ext JS 4] 实战之 带week(星期)的日期选择控件
- java在linux生成pdf文件,从 Java 应用程序动态生成 PDF 文件