文档章节

Android Studio NDK项目中的编译配置

C
 Chendj
发布于 2017/02/10 15:46
字数 633
阅读 175
收藏 1

如果要入门Android NDK的开发,那么就要好好的学习如何的配置底层代码的编译环境了。

1,首先肯定是要有NDK的包,去http://developers.google.cn谷歌的中国官方网站上面去下。

2,到Android Studio 中新建项目,特别注意,一开始新建项目的地方有个勾选框,提示是否要添加c++支持,这里不需要勾选。

3,新项目创建好之后,要点击查看SDK Location的下方,有个Android NDK location 将这里的路径设置成之前的NDK包解压的路径。

4,这里开始进行关键步骤的设置。首先在新建项目的src/main目录中添加jni目录,这个目录的新建要特别注意,不要自己手动的添加。鼠标右击main目录,如下图

然后在main项目目录中就会添加一个jni的目录,在这个目录里,添加c/c++文件。

5,最重要的一步,添加Android.mk和Application.mk的项目编译配置文件。

这两个文件网络上很多相关的介绍说明,这里不多说,将这两个文件自己新建并添加到jni目录中去,ndk-build 命令开始编译的时候会读取这两个配置文件。

6,在配置好上述第五点的两个编译配置文件后,到项目jni项目的build.gradle文件中,修改一下。如图:

上面的sourceSet中的设置,主要是为了设定jni文件编译后生成的动态库so文件存放的位置。

还有下方的externalNativeBuild的设置,需要指定Android.mk文件的具体位置。完成上面的步骤之后。

7,使用Android studio 中的Terminal命令行进入到jni目录下,然后ndk-build命令输入,回车。编译好的so动态库文件,就在libs目录中躺好了,等你使用。嘿嘿嘿。

 

8,在引用jni动态库的项目中,如何引入编写好的动态库文件?首先把之前生成好的SO动态库文件的所有目录,如图:

把这些文件夹全部拷贝到使用库的新建项目中的libs文件夹中。如图:

在使用库的新建项目的build.gradle文件中添加:

sourceSets.main.jniLibs.srcDirs = ['libs']

 如图:

这样,新建的项目就能正常的使用之前写好的底层库了。

 

 

© 著作权归作者所有

共有 人打赏支持
C
粉丝 8
博文 24
码字总数 7791
作品 0
福州
Android工程师
私信 提问
最新靠谱可用的 Mac 环境下 FFmpeg 环境搭建

大家好,我是光源。 最近在尝试搭建 FFmpeg 开发环境时遇到一个蛋疼的事,Google 了 N 篇文章竟然没有一篇是可以跑起来的! 少部分教程是给出了自我矛盾的配置(是的,按照贴出来的代码和配置...

光源_Android
05/13
0
0
[Android] 环境配置之Android Studio开发NDK

======================================================== 作者:qiujuer 博客:my.oschina.net/u/1377710 网站:www.qiujuer.net 开源库:Genius-Android 转载请注明出处:http://my.osc......

Qiujuer
2014/12/21
0
8
在android studio中集成javah, ndk-build进行JNI开发

最近在搞一个android上控制LED灯闪烁的功能,用到了串口编程,搜索了一下,发现Google发布了一个demo,android-serialport-api。有现成的代码和APK,要想自己改JNI也比较简单,就一个C文件。...

LeoLiang
08/04
0
0
Android JNI学习(二)——实战JNI之“hello world”

本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法...

隔壁老李头
05/09
0
0
Android Studio 使用NDK开发

Android Studio 使用NDK编程 使用Android Studio有半年多了,感觉很好用,不就感觉费劲的就是NDK的支持一直不是很好,再Bate版的时候好像0.4.x之前可以使用NDK,当然本身Android Studio本身是...

HaidyCao
2014/12/21
0
17

没有更多内容

加载失败,请刷新页面

加载更多

Go 使用channel控制并发

前言 channel一般用于协程之间的通信,channel也可以用于并发控制。比如主协程启动N个子协程,主协程等待所有子协程退出后再继续后续流程,这种场景下channel也可轻易实现。 场景示例 总结 ...

恋恋美食
21分钟前
1
0
Apache Flink 漫谈系列 - 持续查询(Continuous Queries)

摘要: 实际问题 我们知道在流计算场景中,数据是源源不断的流入的,数据流永远不会结束,那么计算就永远不会结束,如果计算永远不会结束的话,那么计算结果何时输出呢?本篇将介绍Apache Fl...

阿里云官方博客
24分钟前
3
0
斐波那契堆的理解,节点mark属性和势函数

斐波那契堆 看了好多博客,都是照搬算法导论的内容,没有自己的理解,比如为什么有mark属性,势函数的作用,以及为什么叫斐波那契堆,下面说说鄙人的理解。 势函数 势函数是根节点个数加上2...

杨喆
26分钟前
2
0
NIO源码详解

阻塞io和无阻塞io: 阻塞io是指jdk1.4之前版本面向流的io,服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒 ...

沉稳2018
30分钟前
0
0
如何把已经提交的commit, 从一个分支放到另一个分支

在本地master提交了一个commit(8d85d4bca680a5dbcc3e5cfb3096d18cd510cc9f),如何提交的test_2分之上? git checkout test_2git cherry-pick 8d85d4bca680a5dbcc3e5cfb3096d18cd510cc9f......

stephen_wu
34分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部