Android Studio NDK开发(一):准备工作(CMake方式)

前言

NDK即Native Development Kit,是Google在Android开发中提供的用于快速创建native工程的一系列工具的集合,帮助开发者快速开发C/C++的动态库,并自动将so和java应用一起打包成apk,极大地减轻了开发人员的打包工作。
而我们经常还会听到JNI,那么JNI和NDK之间有什么区别呢?首先JNI即Java Native Interface,是Java语言提供的一种Java和C/C++通信机制,Java可以通过JNI来调用本地的C/C++代码,本地的C/C++可以通过JNI来调用Java代码。
总得来说,JNI是Java语言提供的一种特性,是Java调用native的一种机制,可以说JNI和Android并没有实质的关系。而NDK是Google公司帮助Android开发者通过C/C++编写应用的开发工具集合,包含了C/C++的头文件、库文件、说明文档和示例代码。

Android Studio CMake方式

Android Studio目前可以有两种方式配置NDK的开发环境,个人将其分为传统的配置方式和CMake方式
传统的配置方式需要配置Android.mk、Application.mk和gradle,这种方式复杂而且配置繁琐,在这里就不做赘述。这里要着重强调的是CMake方式,Android Studio 2.2已经对NDK开发做了很好的支持。下面介绍CMake方式:
首先创建工程,在Android Studio中File->New->New Project,会出现下图

1.png

这里我们需要注意的是将Include C++ support打上对勾,由于目前是最新的Android Studio(3.0),已经很好的支持了Kotlin,所以下面有Include Kotlin support,最好勾上,这样可以方便的进行Kotlin语言的开发。至于警告,是因为我这张图是为了展示给你们看,后来添加的,但是之前已经有这个程序了,可不用管。接下来就是Next->Next->Next->Next->Finish。

2.png

点开项目目录结构,可以看到Android Studio替我们多生成了三个文件夹,分别是.externalNativeBuild、cpp和CMakeLists.txt。
.externalNativeBuild是系统自动生成的,包含一些硬件信息,可以不用管。
cpp文件中默认是有一个C++文件native-lib.cpp,我们也可以自己手动添加C/C++文件,内容需要自己编写。下面是默认生成的,当然我们可以修改相应的代码。

3.png

CMakeList.txt是CMake脚本配置的文件,配置的是关于库的一些信息,需要自己配置。下面两张图就是默认生成的,我们需要注意的就是这里的native-lib需要和System.loadLibrary("native-lib")中的一致。首先需要说明的是#号是注释的意思,相当于//。add_library:创建一个library,添加C/C++文件;find_library:表示依赖NDK中的库,一般不需要手动去更改;target_link_libraries:表示将目标库与NDK中的库进行连接。如果有多个库时,可以添加多个add_library和target_link_libraries。

4.png
5.png

再来看看gradle配置:

6.png

最后来看Java代码:

7.png

这里需要注意的就是需要加上System.loadLibrary(...)去加载库文件,同时C/C++在Java中的声明必须加上native关键字。

下载NDK和构建工具

依次选择File -> Project Structure:

8.png

如果之前没有下载过NDK,会显示download NDK,点击就可以下载NDK,最终我的配置是这样的:

9.png

依次选择Tools -> Android -> SDK Manager -> SDK Tools:

10.png

依次选中CMake、LLDB和NDK。要编译和调试本地代码,需要这些组件。
NDK:让你能在Android上面使用C/C++代码的工具集,提供了一系列的工具,帮助开发者快速开发C/C++ ,极大地减轻了开发人员的打包工作。
CMake:外部构建工具。如果你准备只使用ndk-build的话,可以不使用它。
LLDB:Android Studio上面调试本地代码的工具。

一键生成方法名

当以上配置都完成时,编写一个Native方法,直接Alt + Enter就可以生成对应的方法,这样就可以在对应的C/C++文件中找到该函数的实现。

11.png

展望

下一篇博客我将利用Android Studio从零开始编写C/C++代码,进行NDK开发。
Android NDK开发(二):Welcome to JNI

参考链接:http://blog.csdn.net/banketree/article/details/12167145

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,738评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,377评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,774评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,032评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,015评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,239评论 1 278
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,724评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,374评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,508评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,410评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,457评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,132评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,733评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,804评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,022评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,515评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,116评论 2 341