AS2.2以后支持Cmake了,以前的Android.mk的方式可以告别了,官方教程

CMakeLists.txt文件的书写

  1. 引入第三方库使用add_library()需要指定是SHARED->.so or STATIC->.a,和IMPORTED,并且每次只能写一个库,如果引入2个第三方库就要写2个add_library()

    add_library(nnSHAREDIMPORTED)
    复制代码
  2. include_directories()用于指定头文件的,一般是在include文件夹下,可以用于第三方库或者自己源文件的头文件.

    include_directories(src/main/jni/armeabi-v7a/include/)
    复制代码
  3. 在引入第三方库时还需要指定set_target_properties()库的路径,也就是.soor.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

  4. 如果要依赖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基本都没啥问题,需要添加的可能有一下几点

  1. 指定需要编译的abi版本,在android{}->defaultCondfig{}

    ndk {abiFilter 'armeabi-v7a'
    }
    复制代码
  2. 指定c++版本和异常处理
    externalNativeBuild {cmake {cppFlags "-std=c++11 -frtti-fexceptions"}
    }
    复制代码

转载于:https://juejin.im/post/5a5724bf5188257334229f8d

AS使用NDK Cmake方式依赖第三方库注意事项相关推荐

  1. iOS架构-静态库.framework之依赖第三方库(7)

    需求分析:     把自己的能力封装成静态库提供给客户使用,但是有些工作市场上已经有很好的公开的代码,或者成本很低的解决方案,我们就可以使用别人公开的.或者低成本采购的技术来为我们服务.制作静态库也是 ...

  2. cmake导入so库_通过CMake方式生成动态库so文件

    JNITest 通过CMake方式生成动态库so文件 简介 Java JNI的本意是Java Native Interface(Java本地接口),它是为了方便Java调用C.C++等本地代码所封装的 ...

  3. (转载)Android studio 导入或依赖第三方库失败

    Android studio 导入或依赖第三方库失败 原文链接 在使用第三方库的时候,需要添加很多仓库,以保证可以能正确快速的下载到我们所需要的类库,但是经常会出现各种问题. 以下为个人问题总结 首先 ...

  4. python如何封装成可调用的库_在python中如何以异步的方式调用第三方库提供的同步API...

    在关于asyncio的基本用法中提到,asyncio并不是多线程.在协程中调用同步(阻塞函数),都占用同一线程的CPU时间,即当前线程会被阻塞(即协程只会在等待一个协程时可能出让CPU,如果是普通函数 ...

  5. 依赖第三方库时出现的问题:Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 16

    导入第三方库时出现了sdk版本不兼容问题 为我们app的module所支持的sdk最低版本与依赖module的sdk最低版本不一致 把15-->16即可

  6. mac上用qt调用自己生成的qt动态库,该动态库又依赖第三方库

    qt下依赖于第三方库生成的动态库的调用 概述 基于声网的sdk如何在自己的动态库中使用 使用基于第三方库的动态库 下面看pro文件中的设置 概述 初次使用mac上的qtCreator生成动态库,该动态 ...

  7. xml解析库对比总结(解析方式,第三方库,TinyXml)

    一. 解析方式 xml的2种解析方式(DOM和SAX解析方式): https://blog.csdn.net/weixin_42472048/article/details/81264570 dom解 ...

  8. vue引入第三方库注意事项

    1.第三方库尽量不要用import引用 错误示范 找不到路径,会报错 2.第三方文件放到public文件夹里,在index.html文件里进行引用 正确做法

  9. Gradle打可运行Jar包(包含依赖第三方库中的类)

    为什么80%的码农都做不了架构师?>>>    使用Gradle来打Jar包,在引入Gradle的java插件后,直接就能实现 在build.gradle文件中引入java插件 pl ...

最新文章

  1. JS中的null和undefined,undefined为啥用void 0代替?
  2. spring-servlet.xml与applicationContext.xml
  3. JQuery 总结(5) 总结各种小应用
  4. Solr配置IK分词器
  5. 日志规范之为什么要使用SLF4J
  6. ruby与python_Ruby对比Python的优势和劣势
  7. 关闭word_Word教程第2讲:文档的基本操作(含视频)
  8. 写java线程导致电脑内存不足_如何写出让java虚拟机发生内存溢出异常OutOfMemoryError的代码...
  9. 709. 转换成小写字母 golang 字符串处理
  10. python compile
  11. 【转】PHP的执行原理/执行流程
  12. 俊杰隐藏文件程序源码分享 C#
  13. bat批量剪切命令_批量处理文件.bat命令手册
  14. JavaScript 基础概念
  15. Cisco防火墙基础介绍及配置
  16. 3.8 js过渡效果
  17. mysql like 原理_MySql原理
  18. php 正则 标点符号,js正则匹配中文标点符号
  19. 架构师之路(七)之五视图方法论
  20. 制作美观GIS地图,掌握这些技巧就够了

热门文章

  1. puppet连载八:linux优化模块
  2. LeetCode刷题(14)
  3. linux mysql集群 备份与恢复,Linux下MySQL的备份和恢复
  4. mysql limit分页_MySQL order by limit 分页数据重复问题
  5. websphere linux版本,安装IBM Websphere on linux
  6. 【第1篇】Python爬虫实战-王者荣耀高清壁纸下载
  7. 通过jQuery获取Select选中的值或文本
  8. [Spring Boot系列]1. 项目搭建之一
  9. [Ext JS 4] 实战之 带week(星期)的日期选择控件
  10. java在linux生成pdf文件,从 Java 应用程序动态生成 PDF 文件