网站首页 > 技术文章 正文
在Android Studio中开发NDK和以往的Eclipse ADT不同,现在Android Studio除了支持Android.mk之外还支持使用CMake来作为其c/c++的构建工具。
Android.mk
用于向构建系统描述源文件和共享库。 它实际上是一小段一小段的Makefile 片段。主要用于定义构建系统和环境变量所未定义的项目范围设置。
配置项目
在Android Studio(截止2.3.3版本)中使用Android.mk需要自己手动来进行配置(Gradle)。
如图1
打开project中需要添加ndk的module的build.gradle,
图中的配置意思是:
1、 android.debugConfig.externalNativeBuild
配置编译过程的参数
可以添加如下图2的配置:
如果熟悉c/c++开发,应该对cflag/cppflag这些参数不陌生。具体需要根据项目来进行配置。比如需要使用c++11
则可以配置:
cppFlags "-std=c++11 "
在图1中配置的abiFilters是指定编译指定cpu架构x86与armeabi-v7a两种。
2、 android.debugConfig.ndk
装载打包配置
在图1中的配置表示只会将x86与armeabi-v7a打包进入apk,
这个配置可以保证,如果引用的第三方库存在全架构的库文件,而不会把所有的都打包进入apk中。
3、 android.externalNativeBuild
构建配置文件路径
这个路径可以随意填写,相对路径地址与build.gradle文件同级。
编写好Android.mk之后,当我们在执行打包的时候就会先将配置的静态/动态编译出来。
跨平台的编译配置工具,它可以根据配置来生成不同平台、不同编译器的Makefile、vs sln等。通过编写CMakeLists.txt可以控制编译过程。
Cmake的配置方法与Android.mk的方式基本一样。区别只在两个externalNativeBuild中的ndkBuild换成cmake就可以了。
CMakeLists.txt的语法相对比Android.mk更简单。
使用的比较多的配置就下面几种:
set(x y)
设置一个变量x 值为y
file(GLOB x y z …)
集合x存放有y、z…,一般涌来配置自己的源文件
add_library(x STATIC/SHARED IMPORTED)
添加一个静态/动态库,方式为导入
set_target_properties(x PROPERTIES IMPORTED_LOCATION y)
配合上面的使用设置导入路径
include_directories(x)
引入头文件路径x, 这样我们自己编写的代码中能够使用 #include <> 而不需要使用#include ""
add_subdirectory(x)
会去查找src/main/cpp/librtmp目录下查找CMakeLists.txt文件,并加入到当前构建中(分模块)
target_link_libraries(x y z …)
链接库(就是配置我们自己编写的c/c++的依赖,和java中配置jar包一个意思)
给大家看一个我工程当中用到的一个例子:
在例子中第四行我引入了另一个CMakeLists.txt,在这个txt中会编译一个静态库,能够作为预编译库来使用:
......
(CMakeLists.txt高亮是我自己编写的一个IDEA/Android Studio插件)
猜你喜欢
- 2024-10-27 NDK开发——FFmpeg视频解码 ffmpeg ndk
- 2024-10-27 Camera基本代码架构 camera calibrator
- 2024-10-27 android 功耗分析方法和优化(1) 功耗app
- 2024-10-27 Cocos Creator v2.3.2 发布了!全新 Launcher 效率飞起!
- 2024-10-27 如何androd动态注册编写计算器 淘宝动态评分计算器在线
- 2024-10-27 高通平台OV8856 Camera的bring up总结
- 2024-10-27 高通平台移植GC2145 Camera驱动 高通驱动安装
- 2024-10-27 《坎公骑冠剑》光炮Android Mk.99技能与背景故事
- 2024-10-27 ubuntu移植libwebp到Android平台 ubuntu移植到arm
- 2024-10-27 步步为营,十分钟学会 Native JNI(附带彩蛋)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)