本文有些转载,分结合自己试验所得。

本文操作系统win7 64位, DNK r10版本

1)打开Android开发者的官网 http://developer.android.com/ 找到Develop点击。如果页面打不开,通过代理来访问。

2)本人下载64位的DNK,解压下载的android-ndk32-r10-windows-x86_64.zip,将其放到你想要的目录下。

注:R7之前的版本,必须要安装Cygwin才能使用NDK。从R7开始,Windows版本的NDK提供了一个ndk-build.cmd脚本,可以直接利用这个脚本编译。想要做到这一 点,只要为Eclipse Android工程添加一个Builder,就能实现Eclipse的自动编译NDK,这一点在后面的步骤会有介绍

3) NDK实例的实现

启动Eclipse,新建Android工程(此处名为TestNDK),如图所示:

4)加入DNK的路径

菜单栏Windows->preferences->android->DNK

5) 配置 javah 到 eclipse“(可选),主菜单->Run->External Tools->

External Tools Configurations->Program”,如下图所示,只配置了界面中的Main界面:

目的:此步只是将javah工具添加到eclipse中,javah功能生成.h文件,由于函数从java到c/c++需要按一定的格式标准,并且可以函数名复杂,因此经常使用Javah工具生成函数名,若不添加可以通过cmd控制窗口使用此工具。

Javah工具简单的使用方法

其中java中各个命令的意思是

-classpath <路径>用于装入类的路径
-d <目录>输出目录
-jni 生成 JNI样式的头文件(默认)

-d 生成的.h文件存放的位置目录,

-classpath <路径> 用于装入类的路径,此处使用的是.class文件,并非.Java文件,同时注意包的概念,例如:

Main.java文件位置如上图所示

Main.java的全部内容如下图所示: package mwic32为包定义,-classpath 为包的目录,而非.class文件的目录,不明白一会演示

-jni 是必须的,我因没加导致javah使用错误,因为我们已经加了包的路径了,但保重可能有很多.class类,我们需要javah哪个类呢,由此-jni定义,-jin 内容:包名+类名(没有.class,是类名字)

例子:使用cmd控制台cd到.java文件目录,使用javah工具如下图,其中.bin文件夹自己创建存放包,bin文件夹为空,javac之后产生包

写了这么多就是将javah配到eclipse里面去时,里面参数如何配置

6) 创建builder,此builder的作用是将之前配置好的javah工具添加到builder中,按Ctrl + B,进行build all功能,在编译时同时javah:

选中工程->右击->Properties->builder->import,不要create。

7)创建Android.mk和.cpp文件以及库:

选中工程->右击->Android tools->add native support,填写库名,自动完成以上功能

8)创建.java文件,此文件即是某部分你要在.cpp中实现其功能的文件;

需要完成的函数声明如下:static public native int add(int x, int y); (static可不要,native是必须要)

9)生成.h文件:主菜单->Run->External Tools->(你刚才创建的localtalkiejavah工具)。

生成.h,在.cpp文件实现其函数即可,

10)本身完成工作后,run as 总是异常中断,经网上之如下原因,解决办法extern "C"{  已完成的函数定义 }。

原因:

JNIEnv *env参数的使用

所有JNI接口的第一个参数是JNIEnv *env, 在C中,使用方法是

(*env)->NewStringUTF(env, "Hello from JNI!");

但在C++中,其调用方法是

env->NewStringUTF("Hello from JNI!");

为什么有这种区别呢,看看jni.h中关于JNIEnv的定义就可以知道了:

#if defined(__cplusplus)

typedef _JNIEnv JNIEnv;

#else

typedef const struct JNINativeInterface* JNIEnv;

#endif

可以看到,对于C和C++,定义有所不同,主要原因是C不支持类,所以采用了一种变通的方法。

以上工作已完结,自己一些猜测:

首先javah可不必加入eclipse,我们只是希望更方便才加入的,

其次,加入javah之后也可不必创建builder,我们只是希望更方便,编译时即可实现javah,

实际编写android.mk才是技术,只是刚创建简单的,自己也没学如何编写,就先写到这。

补充:有的人create一个builder,加入DNK的ndk-build.cmd,参照:http://www.th7.cn/Program/Android/201409/287799.shtml

我是即import了,同时按照此create了,之前遗忘,特补充。

android的NDK安装及工程实例相关推荐

  1. Android之NDK开发的简单实例

    NDK全称为Native Development Kit,是本地开发工具集.在Android开发中,有时为了能更好的重用以前的C/C++的代码,需要将这些代码编译成相应的so,然后通地JNI以供上层J ...

  2. android图文介绍NDK安装及简单jni demon的实现

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 android NDK可以用来编译android的native方法,也可以将c和c++的代码编译成.s ...

  3. ubuntu14.04 64bit主机下面安装android的NDK开发环境

    通过wget工具下载bin包: $ wget -c http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin 1 2,因为下 ...

  4. Android ndk 安装教程 以及环境变量配置

    现在android ndk 也是非常的方便 第一步 第二步搜索sdk 第三步 把界面切换到SDK Tools 界面 选中ndk  然后在点击Apply 下载即可 然后就是查看ndk 安装到那个目录下面 ...

  5. 【Android 逆向】Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )

    文章目录 一.Visual Studio 中安装 " 使用 C++ 的移动开发 " 开发库 二.Visual Studio 中安装的 Android SDK 和 NDK 位置 三. ...

  6. Appium 移动端自动化 - Android SDK的安装与配置,使用安卓SDK连接手机实例演示

    Android SDK 的安装与配置演示 第一章:Android SDK 的安装 ① 下载 ② 安装过程 ③ 配置 第二章:连接手机 USB 调试 ① 一加8手机连接演示 第一章:Android SD ...

  7. android ndk如何安装,android NDK安装

    Android NDK 是运行于Android 平台上的Native Development Kit 的缩写.Android 应用开发者可以通过NDK 调用C 或C++ 本地代码. NDK的作用: 1 ...

  8. Android之NDK开发学习总结

    Android之NDK开发 http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html 一.NDK产生的背景 Android平台 ...

  9. Android下NDK开发环境搭建

    Android下NDK开发环境搭建 1.     AndroidNDK安装与配置 1.1  NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP部 ...

  10. Android之NDK开发

    一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语 ...

最新文章

  1. python html解析查找字符串_用python的BeautifulSoup分析html
  2. 垃圾邮件过滤 php,垃圾邮件过滤功能
  3. php直接的模块接口,api(接口)模块
  4. 10个顶级的CSS3代码生成器
  5. 微服务很香--麻辣味,但要慢慢消化
  6. Silverlight 5 Beta新特性[5]隐式模板支持
  7. Scrum Meeting博客目录
  8. 非合作博弈篇——非合作博弈的矩阵表示
  9. php中字符串的截取函数,PHP字符串截取和截取函数的介绍
  10. java application.doevents_Application.DoEvents()笔记
  11. 一文搞定卷积神经网络——从原理到应用
  12. swift混编调用oc编写的Xib UIView出现[Storyboard] Unknown class in Interface Builder file.问题的解决
  13. springboot+uniapp上传图片
  14. 计算机软件定时运行,win10系统设置定时运行指定软件的详细方案
  15. BUUCTF:LSB
  16. uniapp ----小程序上下滑动页面,视频自动播放(完整代码)
  17. easyrecovery professional专业版下载 v14.0.0.0 专业版介绍
  18. SQL注入入侵动网SQL
  19. 杭电多校3-Hdu6797 Tokitsukaze and Rescue
  20. Google Code Jam程序设计大赛中国人获冠亚军

热门文章

  1. 陈强教授《机器学习及R应用》课程 第十二章作业
  2. word中将空格替换为_如何在Microsoft Word中将双空格更改为单空格
  3. 多益网络产品专员面经分享
  4. 中国计算机软件行业分析4---外企的商业贿赂
  5. windows server 2003 桌面图标有蓝底如何解决
  6. 桌面图标有蓝底处理刚才
  7. geogebra软件使用总结
  8. 15.6寸键盘的详细介绍
  9. 多屏下dde-dock切换速度太慢
  10. 男神程序员对准男神程序员们的忠告