android---NDK开发helloworld(jni)

1)打开Android开发者的官网http://developer.android.com/找到Develop点击。

2)进入后再点击Tools

3)进入后在左侧找到NDK点击,可以见到各种平台的NDKr10,选择需要的下载。

5)解压下载的android-ndk32-r10-windows-x86_64.zip,将其放到你想要的目录下。

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

6) NDK实例的实现

启动Eclipse,新建Android工程(此处名为TestNDK)

7)在TestNDK工程的根目录下新建文件夹jni,之后找到NDK的安装目录(sampleshello-jnijni)下的 Android.mk和hello-jni.c 这两个文件,将其拷贝到TestNDK->jni文件夹下面。

注:如果你很好奇jni文件夹里的hello-jni.c里的函数命名如此刁钻,是怎么写的,并且你如果你想的更远,已经在考虑自己以后怎么写这种文件,那么我告诉你它里面的函数命名是直接粘贴的一个头文件里的内容。这个头文件可以通过反编译下边提到的HelloJni.java得到。如果你以后要确实要进行NDK开发,那么你肯定要掌握反编译的方法。为了你能够少走弯路,推荐我的另一篇文章《1分钟攻克NDK开发中javah不能反编译的问题》,链接网址http://blog.csdn.net/golden1314521/article/details/23039417

8) 找到NDK的安装目录(sampleshello-jnisrccomexamplehellojni)下的HelloJni.java文件,将其拷贝到TestNDK工程src文件夹对应的包下。

9) 修改项目文件AndroidManifest.xml,将activity标签下的android:name =“com.zhw.testndk. MainActivity”修改为 android:name =“com.example.hellojni.HelloJni”。(注:此处的

TestNDKACtivity为项目自动生成的,项目不同,此处也会不同)

10) 新建并配置一个Builder

点击Project->Properties->Builders->New,新建立一个Builder。在弹出的对话框上面点击Program,OK!如图所示

在弹出的对话框【Edit Configuration】中,配置选项卡【Main】:

Location中需要填入nkd-build.cmd的路径(NDK安装目录下)。

Working Diretcoty中需要填入TestNDK的工程根目录。如图所示:

注:不要漏了

配置选项卡【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…”勾选TestNDK工程的“jni“目录,Finish!

当在console里面看到如图八所示的信息,则表示一切正常,此时就已经是自动编译代码了。

注:如果不成功:Project->clean->选择工程->点击OK

10)右键点击工程TestNDK,Run As ->Android Application, 运行程序。当出现图所示信息时,NDK实例运行成功!

如果程序运行出错,显示“应用程序**(进程:com.example.***)意外停止,请重试”的错误提示

这个错误产生的原因极有可能是你的JNI文件的命名或包的声明写错了。查一下程序运行的日志logcat,显示错误为“java.lang.UnsatisfiedLinkError:stringFromJNI”,说的是Java层调用本地方法stringFromJNI时,却没有找到这个本地方法,所以除了错。

那么Android虚拟机怎么查找这个本地方法的呢?先说一下Android工程的环境:包名称是com.example.testndk,应用名称是HelloJni,如果Java层调用了本地方法String stringFromJNI(),那么Android虚拟机就会由这三个变量生成一个名字:jstring Java_com_example_testndk_HelloJni_stringFromJNI( JNIEnv*env, jobject thiz ) ,并在本地方法中严格按照这个名字查找同名的本地方法。如果找不到,就会返回上图的错误。所以要确认一下JNI文件的命名或包的声明是否与Java文件中的一致。

在本地文件(即C或C++文件)改正此错误后,运行,正常显示。

时间: 2024-11-14 12:36:51

android---NDK开发helloworld(jni)的相关文章

Android ndk开发swig编译jni接口配置文件(二)

之前写过一篇Android ndk开发swig编译jni接口.看这篇看不懂,看以去看看.c++与Java有些语言结构还是有一定区别,比如c++结构体,一些函数的返回值等都是有所不同,进行swig编译要进行一些预处理,也就是配置一下就行.下面说说几种情况. 一.一般情况下string,数组,枚举类型等配置Unix.i %module Survey %include "std_string.i" %include "arrays_java.i" %include &qu

android NDK开发编译C++文件出现Type 'jint' could not be resolved和Unresolved inclusion: <jni.h>的解决办法

今天在编译android NDK工程的时候,在jni文件夹下的cpp文件中报了一大堆错误,诸如:Unresolved inclusion: <jni.h>.Type 'jint' could not be resolved.Type 'jintArray' could not be resolved等,根据经验,这样的错误肯定是没有包含相应的头文件导致的. 解决方案: 选中工程,右键->Properties,点击C/C++ General展开,点击Path and Symbols,在右边

跟我学Android NDK开发(一)

Android NDK 开发跟其它开发一样,首先需要配置好开发环境,本文以 Ubuntu系统为例介绍如何进行 Android NDK 开发环境的配置. 1. 简介 什么是 Android NDK 呢? NDK(Native Development Kit) 是一个允许开发者用一些本地语言(C/C++)编写 Android App 的部分功能的工具集.对于一些特定的 App,NDK 非常有利于我们直接使用现成的用 C/C++ 编写的代码库(但对于大多数 App 来说,NDK 是没有必要的).使用

Android NDK开发(二)——从Hello World学起

转载请注明出处:http://blog.csdn.net/allen315410/article/details/41805719  上篇文章讲述了Android NDK开发的一些基本概念,以及NDK的环境搭建,相信看过的朋友NDK开发环境搭建应该是没有问题了,还没有搭建或者不知道怎么搭建的朋友请点击这里.那么这篇文章,我们跟刚学Java编程语言一样,从世界知名程序"Hello World!"开始,开发出我们的第一个NDK程序. NDK目录简单介绍 在进行NDK开发之前,我们有必须熟悉

Android NDK开发篇(五):Java与原生代码通信(数据操作)

尽管说使用NDK能够提高Android程序的运行效率,可是调用起来还是略微有点麻烦.NDK能够直接使用Java的原生数据类型,而引用类型,由于Java的引用类型的实如今NDK被屏蔽了,所以在NDK使用Java的引用类型则要做对应的处理. 一.对引用数据类型的操作 尽管Java的引用类型的实如今NDK被屏蔽了,JNI还是提供了一组API,通过JNIEnv接口指针提供原生方法改动和使用Java的引用类型. 1.字符串操作 JNI把Java的字符串当作引用来处理,在NDK中使用Java的字符串,须要相

Android NDK 开发(三)--常见错误锦集合Log的使用【转】

转载请注明出处:http://blog.csdn.net/allen315410/article/details/41826511  Android NDK开发经常因某些因素会出现一些意想不到的错误,很多时候调试这些错误的时候,显得比调试Java代码要复杂,一方面是导致错误的原因很多很杂,另一方面NDK开发涉及到C/C++代码的编写,很多程序员对此不熟悉.那么这篇博客就总结一下,在NDK开发中经常出现的一些问题,并且尝试提供一些正确的解决方案,方便在开发时能够快速定位到错误,更改错误,当然了,错

Android NDK 开发

NDK全称:Native Development Kit. 1.NDK是一系列工具的集合. * NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.这些工具对开发者的帮助是巨大的. * NDK集成了交叉编译器,并提供了相应的mk文件隔离平台.CPU.API等差异,开发人员只需要简单修改mk文件(指出"哪些文件需要编译"."编译特性要求"等),就可以创建出so. * NDK可以自动地将so和Java应用一起

Android NDK 开发(四)java传递数据到C【转】

转载请注明出处:http://blog.csdn.net/allen315410/article/details/41845701 前面几篇文章介绍了Android NDK开发的简单概念.常见错误及处理和从第一个Hello World开始实际做一个简单的JNI开发示例,相信看完之后,大家对NDK开发有了一个概念上的认识了,那么接下来我们需要再深入一下NDK的开发,我们知道NDK开发就是使用JNI这层“协议”在Java和C之间起个“桥梁”的作用,将Java和Native C之间联立起来,让Java

Android NDK开发(八)——应用监听自身卸载,弹出用户反馈调查

转载请注明出处:http://blog.csdn.net/allen315410/article/details/42521251 监听卸载情景和原理分析 1,情景分析 在上上篇博客中我写了一下NDK开发实践项目,使用开源的LAME库转码MP3,作为前面几篇基础博客的加深理解使用的,但是这样的项目用处不大,除了练练NDK功底.这篇博客,我将讲述一下一个各大应用中很常见的一个功能,同样也是基于JNI开发的Android应用小Demo,看完这个之后,不仅可以加深对NDK开发的理解,而且该Demo也可

Android NDK开发常见错误

错误一: make: *** No rule to make target `/cygdrive/d/1-workspace/showmap-android-opengles/jni/showmap_opengles_OpenGLESRenderer.c', needed by `/cygdrive/d/1-workspace/showmap-android-opengles/obj/local/armeabi/objs/OpenGLESMap/showmap_opengles_OpenGLES