热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《NDK:androidstudiocmakelists.txt配置》

1、设置Cmake版本cmake_minimum_required(VERSION3.4.1)2、头文件的加载include_directories(srcmaincppinclu

1、设置Cmake版本

cmake_minimum_required(VERSION 3.4.1)

2、头文件的加载

include_directories(src/main/cpp/include)

3、set 设置变量,方便使用

set(DIR ${CMAKE_SOURCE_DIR}/libs)

${CMAKE_SOURCE_DIR}表示的是CMakeLists.txt所在的目录
DIR就是代表着CMakeLists.txt同级目录下的libs包

《《NDK:android studio cmakelists.txt 配置》》 image.png

变量的使用

${DIR}

4、加载动态库配置一、add_library

动态库在工程中放置有两种方式
第一种 是在main目录的jniLibs目录

《《NDK:android studio cmakelists.txt 配置》》 image.png

动态库加载配置,以“libavcodec-57.so”为例

add_library( avcodec-57 SHARED IMPORTED)
set_target_properties( avcodec-57
PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libavcodec-57.so)

${ANDROID_ABI}就是表示各种平台,armeabi或x86。
add_library( xx ) “配置加载动态库的方式 avcodec-57”动态库的名称,“SHARED ”表示加载的是动态库。
set_target_properties(xx)配置加载动态库的路径

可以把相同的路径设置为变量DIR,使得配置如下

set(DIR ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/)
add_library( avcodec-57 SHARED IMPORTED)
set_target_properties( avcodec-57
PROPERTIES IMPORTED_LOCATION
${DIR}/libavcodec-57.so)

第二种 放置到其他目录,这种方式需要在build.gradle中配置加载路径

《《NDK:android studio cmakelists.txt 配置》》 image.png

在build.gradle中配置加载路径

《《NDK:android studio cmakelists.txt 配置》》 image.png

set(DIR ${CMAKE_SOURCE_DIR}/libs)
add_library(avcodec-56
SHARED
IMPORTED)
set_target_properties(avcodec-56
PROPERTIES IMPORTED_LOCATION
${DIR}/armeabi/libavcodec-56.so)

静态库的加载和动态库的加载方式一样,只需要把SHARED替换成STATIC,每一个so文件或.a文件都需要进行如上的配置。

5、加载动态库配置二、add_library

已经知道了如何配置加载第三方提供的动态库so文件(看本文第4点),有的第三方只提供原文件(C或C++源码),包括自己写的native.cpp的配置如下

方式一

add_library(
native-lib
SHARED
src/main/cpp/native-lib.cpp
src/main/cpp/FFmpegMusic.cpp
....
其他更多文件
)

方式二 file

# 设置加载源文件路径 my_source
file(GLOB my_source src/main/cpp/*.cpp src/main/cpp/*.c)
add_library(
native-lib
SHARED
${my_source}
)

这样就会自动的去加载my_source路径下.c和.cpp文件

6、链接target_link_librarie

#链接
target_link_libraries(
native-lib
avcodec-56
avdevice-56
avformat-56
avutil-54
postproc-53
swresample-1
swscale-3
log
android
OpenSLES)

推荐阅读
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 题目《BZOJ2654: Tree》的时间限制为30秒,内存限制为512MB。该问题通过结合二分查找和Kruskal算法,提供了一种高效的优化解决方案。具体而言,利用二分查找缩小解的范围,再通过Kruskal算法构建最小生成树,从而在复杂度上实现了显著的优化。此方法不仅提高了算法的效率,还确保了在大规模数据集上的稳定性能。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 本文提出了一种基于栈结构的高效四则运算表达式求值方法。该方法能够处理包含加、减、乘、除运算符以及十进制整数和小括号的算术表达式。通过定义和实现栈的基本操作,如入栈、出栈和判空等,算法能够准确地解析并计算输入的表达式,最终输出其计算结果。此方法不仅提高了计算效率,还增强了对复杂表达式的处理能力。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • 优化Vite 1.0至2.0升级过程中遇到的某些代码块过大问题解决方案
    本文详细探讨了在将项目从 Vite 1.0 升级到 2.0 的过程中,如何解决某些代码块过大的问题。通过具体的编码示例,文章提供了全面的解决方案,帮助开发者有效优化打包性能。 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 题目解析给定 n 个人和 n 种书籍,每个人都有一个包含自己喜好的书籍列表。目标是计算出满足以下条件的分配方案数量:1. 每个人都必须获得他们喜欢的书籍;2. 每本书只能分配给一个人。通过使用深度优先搜索算法,可以系统地探索所有可能的分配组合,确保每个分配方案都符合上述条件。该方法能够有效地处理这类组合优化问题,找到所有可行的解。 ... [详细]
  • 在C语言中,指针的高级应用及其实例分析具有重要意义。通过使用 `&` 符号可以获取变量的内存地址,而 `*` 符号则用于定义指针变量。例如,`int *p;` 定义了一个指向整型的指针变量 `p`。其中,`p` 代表指针变量本身,而 `*p` 则表示指针所指向的内存地址中的内容。此外,指针在不同函数中可以具有相同的变量名,但其作用域和生命周期会有所不同。指针的灵活运用能够有效提升程序的效率和可维护性。 ... [详细]
  • 在Java程序设计中,实现高效的分页功能是提升应用性能的关键之一。本文介绍了通过使用 `PageController` 类来处理大数据集的分页操作,该类能够从一个较大的集合中提取出指定大小的小集合。具体实现中,通过优化数据访问和减少内存消耗,确保了分页操作的高效性和稳定性。此外,文章还探讨了分页算法的优化策略,包括缓存机制和懒加载技术的应用,以进一步提高系统的响应速度和用户体验。 ... [详细]
author-avatar
天黑丶請脱衣
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有