windows下用ADT进行android NDK开发的具体教程(从环境搭建、配置到编译全过程)
郑重申明:如需转载本博客,请注明出处,谢谢!
这几天在学习android NDK的开发。那么首先让我们来看看android NDK开发的本质是什么。
NDK(Native Development Kit),即本地开发工具,简单地说。就是在开发android应用程序的时候,在java类中调用native函数,而native函数的接口也是在java类中定义的,可是native函数终于由本地的C/C++代码实现。简单地说,就是在java中调用C/C++函数。
至于为什么要用NDK,我总结了一下,大致有下面几方面原因:
1.提升程序执行效率:众所周知。在处理复杂运算或者对速度、内存要求苛刻的程序中,C/C++比java的效率要高出非常多,比方人脸识别、OCR字符识别等图像处理程序,用C/C++实现无疑是首选。
2.与硬件打交道:java之所以能跨平台,是由于全部的代码都是由JVM(java虚拟机)来解释的。这样就屏蔽了底层硬件体系结构的差异。
可是假设我们的程序须要与底层硬件打交道,或者与驱动程序交互,那么就要用C/C++来写代码了。
3.复用现有的程序:比方你有之前已经用C/C++实现了的程序,想移植到android平台上来,则能够直接通过NDK拿来用。不用再所有改写成java的。
如今就来说说android NDK开发的一般步骤吧。
一、准备工作:搭建android开发环境,包括jdk、ADT(新版的已经包括了eclipse IDE)、SDK等的下载安装,不会的自行百度,相关文章太多了,我在此不再赘述。
二、在官网上下载NDK,网址:http://developer.android.com/tools/sdk/ndk/index.html。依据自己的操作系统平台(windows32或windows64或Linux或Mac)下载对应版本号的NDK,然后双击解压到对应的目录。
三、新建一个普通的android应用程序(注意最小支持的API版本号要>=14)。假设是新手,不清楚这个,能够百度、谷歌。
四、在ADT开发环境中设置NDK的路径
点击Window菜单,选择Preference,点击Android展开后点击NDK,设置NDK路径,点击Apply,例如以下图所看到的:
五、加入Native Support
右键project。->Android Tools->Add Native Support。输入将要生成的.so文件的名字,点finish,例如以下图:
六、设置C/C++的Paths and Symbols
右键project,->Properties,点击C/C++ General展开,点击Path and Symbols,在右边Includes下。点击Add。把NDK目录下的jni头文件和对应的C++头文件加入进来。这一步很重要,否则会报错,详情请见我的还有一篇文章:http://blog.csdn.net/u013149325/article/details/40371873
七、在project源文件的包中加入一个类,用于定义native函数接口。例如以下图:
八、依据上一步中定义的接口,生成C/C++头文件
能够用javah命令生成头文件,详见我的还有一篇文章:http://blog.csdn.net/u013149325/article/details/40263413,我一開始也是在cmd窗体下用javah命令生成的,后来发现直接在ADT中配置相关选项,就能够生成头文件。
不得不说如今ADT太强大了。假设你的ADT不支持相关功能,能够下载最新版本号的。
在菜单条中点Run->External Tools->External Tools Configurations,右键Program->New,在右边的main子窗体配置例如以下图,Name能够自己随便取一个名字。
然后点Refresh。例如以下图勾选:
再点Common,勾选例如以下:
在菜单条button下点javah,就能够发如今jni目录以下生成了.h头文件,如右图
九、编写C/C++源文件,编译生成.so文件
.so文件事实上是Linux系统下的动态链接库,就相当于我们windows下的dll。而android系统是基于Linux的,所以会用到它。网上有非常多人建议用Cygwin来生成.so文件,本人亲自实验也成功了。可是能在ADT集成开发环境里面自己主动生成会更加方便。
编译project后,在jni目录以下会生成一个与project同名的.cpp文件。打开它,在这里面编写C++代码。
例如以下图:
这里面要包括上一步生成的.h头文件,然后在这里面实现native函数。假设不理解JNIEnv *、jclass、jintArry这些类型,能够深入学习JNI编程相关知识。假设你须要多个.h和.cpp文件。仅仅要把它们都放在jni目录下就能够了。
右键Project,Properties->Builders->New,新建立一个Builder。
在弹出的对话框上面点击Program,点击OK,在弹出的对话框【Edit
Configuration】中,配置选项卡【Main】,Location中须要填入nkd-build.cmd的路径(NDK安装文件夹下)。WorkingDiretcoty中填入project根文件夹。例如以下图:
配置选项卡【Refresh】:勾选“Refresh resources upon completion”,勾选“The entire workspace”。勾选“Recuresively include sub-folders”,例如以下图:
配置选项卡【Build Options】: 勾选“After a “Clean””。 勾选“During manual builds”,勾选“During auto builds”,勾选“Specify working set of relevant resources”。例如以下图:
在上图中,点击“Specify Resources…”勾选Testproject的“jni“文件夹。点Finish。再点OK保存。例如以下图:
在project的jni目录以下新建一个Makefile类型的文件,文件名称为Application。
(注:假设你不知道怎么新建Makefile类型的文件,能够把jni目录下的Android.mk文件在原地复制一份。然后重命名为Application。打开Application.mk之后改动里面的内容就可以)。
例如以下图:
编辑Application.mk文件,依据你的模拟器处理器类型和SDK级别添加例如以下两行。当中APP_ABI 指定处理器类型。能够指定多个。
APP_ABI := armeabi-v7a
APP_PLATFORM := android-19
因为我们勾选了“During auto builds”,所以在project有所改变的时候,so文件便会自己主动编译。正确生成以后就能在project文件夹下发现多了一个libs文件夹,例如以下图:
好了,android NDK程序的环境搭建配置、编译的具体流程到这里就结束了。我正在尝试android NDK中在C/C++源码中设置断点跟进去调试,等我调试成功了就再写博客与大家分享。
windows下用ADT进行android NDK开发的具体教程(从环境搭建、配置到编译全过程)的更多相关文章
- Windows下搭建Android NDK开发环境及命令行编译
首先说明本文内的相关安装操作参考<Pro Android C++ with the NDK>一书. 安装 Windows搭建Android NDK开发环境需要安装如下部分(同时需要配置对应 ...
- android NDK开发环境搭建
android NDK开发环境搭建 2012-05-14 00:13:58 分类: 嵌入式 基于 Android NDK 的学习之旅-----环境搭建 工欲善其事必先利其器 , 下面介绍下 Eclip ...
- 简单的调用OpenCV库的Android NDK开发 工具Android Studio
前言 本博客写于2017/08/11, 博主非专业搞安卓开发, 只是工作的需要倒腾了下Android NDK相关的开发, 博文中有什么不正确.不严格的地方欢迎指正哈 本文后续也许还会有删改, 就 ...
- 跟我学Android NDK开发(一)
Android NDK 开发跟其它开发一样,首先需要配置好开发环境,本文以 Ubuntu系统为例介绍如何进行 Android NDK 开发环境的配置. 1. 简介 什么是 Android NDK 呢? ...
- Android NDK开发
Android NDK 开发教程(极客学院) 一.Android NDK环境搭建 使用最新ndk,直接抛弃cygwin,以前做Android的项目要用到NDK就必须要下载NDK,下载安装Cygwin( ...
- Android NDK 开发(三)--常见错误锦集合Log的使用【转】
转载请注明出处:http://blog.csdn.net/allen315410/article/details/41826511 Android NDK开发经常因某些因素会出现一些意想不到的错误, ...
- Android NDK 开发(二) -- 从Hlello World学起【转】
转载请注明出处:http://blog.csdn.net/allen315410/article/details/41805719 上篇文章讲述了Android NDK开发的一些基本概念,以及NDK ...
- Android NDK开发及调用标准linux动态库.so文件
源:Android NDK开发及调用标准linux动态库.so文件 预备知识及环境搭建 1.NDK(native development Kit)原生开发工具包,用来快速开发C.C++动态库,并能自动 ...
- android NDK开发在本地C/C++源码中设置断点单步调试具体教程
近期在学android NDK开发,折腾了一天,最终可以成功在ADT中设置断点单步调试本地C/C++源码了.网上关于这方面的资料太少了,并且大都不全,并且调试过程中会出现各种各样的问题,真是非常磨人. ...
随机推荐
- php xml 的基本操作类
class xmlMessage{ protected $doc; protected $rootKey; public function __construct() { $this->doc ...
- docker私有仓库yum安装 docker-registry
[root@riyimei-node1:/root]> yum install docker-registryLoaded plugins: fastestmirror, langpacksLo ...
- 关于Jwt的一些思考
在使用jwt的过程中发现了两个问题续期和退出的问题. 续期 因为jwt的token在签发之后是有过期时间的,所以就存在管理这个过期时间的问题.我看网上有提出解决方案的大致有下面几个 每次更新过期时间, ...
- 紫书 习题 8-16 UVa 1618 (中途相遇法)
暴力n的四次方, 然而可以用中途相遇法的思想, 分左边两个数和右边两个数来判断, 最后合起来判断. 一边是n平方logn, 合起来是n平方logn(枚举n平方, 二分logn) (1)两种比较方式是相 ...
- vue2.0移动端自定义性别选择提示框
这篇文章主要是简单的实现了vue2.0移动端自定义性别选择的功能,很简单但是经常用到,于是写了一个小小的demo,记录下来. 效果图: 实现代码: <template> <div c ...
- Windows下安装Linux虚拟机的用途和好处
Windows一般是办公界面,主要做代码编辑查看,资料查找,还有发邮件,也可以用Windows下的其他的有用软件,Linux主要作为编译工具,基本上开发都是在Linux平台下编译,例如编译驱动就需要在 ...
- ACM数学知识体系
在盛情收到学弟邀请给他们整理ACM数学方面的知识体系,作为学长非常认真的弄了好久,希望各学弟不辜负学长厚爱!!!非常抱歉因为电脑全盘格式化好多word.PPT都丢失,我尽量具体地给大家找到各知识点学习 ...
- 搭建基于qemu + eclipse的kernel调试环境(by quqi99)
作者:张华 发表于:2016-02-06版权声明:能够随意转载.转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 使用q ...
- Datazen图表创建和公布
Datazen是被微软收购的移动端全平台的数据展现解决方式.此篇主要介绍怎样创建和公布图表. 如前面介绍,Datazen图表的创建和公布是通过Publisher的应用,它是Windows 8应用 ...
- input range 模拟滑块
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...