Android NDK HelloWorld配置(Eclipse)

摸索了好久,Ndk终于配置好可以输出HelloWorld了

分享一下配置过程:


一.首先得要先下载安装NDK,推荐去官网。

我用的是windows64位环境,如果一样的话可以下载我网盘放的

http://pan.baidu.com/s/1bntr4oZ

双击exe文件打开,然后他就会自动解压了

二.打开eclipse,指定NDK路径

Android NDK HelloWorld配置(Eclipse)_第1张图片Android NDK HelloWorld配置(Eclipse)_第2张图片

这样总的算是配置完了

三.接下来新建一个Android工程试试。

先添加一个本地支持

右键工程,AndroidTools-AddNativeSupport,名字什么的用默认的就行

Android NDK HelloWorld配置(Eclipse)_第3张图片

这时候会多出一个jni文件夹,先不管他,接着下面的步骤

四.给这个工程配置一下NDK

右键工程,或者点击窗口的Project,选中Properties

然后选中Builders-New-Program

Android NDK HelloWorld配置(Eclipse)_第4张图片

先来配置一下main页面,

1.指定ndk目录下的ndk-build.cmd文件,推荐BrowseFileSystem

2.指定需要配置的工程,推荐BrowseWorkspace

Android NDK HelloWorld配置(Eclipse)_第5张图片

然后配置下refresh

这里打上勾,选中图片上的这些就行

Android NDK HelloWorld配置(Eclipse)_第6张图片

最后是配置的是BuildOptions

1.2两处打上勾,这时3处会报错,这就需要点击4处,选择工程然后确定,这样就配置完成了

Android NDK HelloWorld配置(Eclipse)_第7张图片



五.在src下新建一个类试试

1.试试最简单的,单纯地从c获取一个字符串

Android NDK HelloWorld配置(Eclipse)_第8张图片

2.这个时候eclipse自动就编译完成了,文件夹中找到bin目录下的classes目录

cmd进入到该层目录,然后javah 包名.类名

这样就在当前路径下多出一个.h的文件,拷贝该文件,粘贴到eclipse中的jni目录下

Android NDK HelloWorld配置(Eclipse)_第9张图片

这个时候jni目录下应该是有3个文件了,(加上之前add NativeSupport时自动生成的2个文件)

Android NDK HelloWorld配置(Eclipse)_第10张图片

3.由于这里用的是c而不是c++所以下面修改2个地方

1).修改HelloNdk.cpp的后缀名为.c

2).修改Android.mk中的HelloNdk.cpp为HelloNdk.c

4.编辑HelloNdk.c文件,完成后应该是这样的,代码最好是从.h文件中拷过来,然后再做修改

#include "com_aii_ndk_NdkGetter.h"

JNIEXPORT jstring JNICALL Java_com_aii_ndk_NdkGetter_getString
  (JNIEnv *env, jobject obj){
	return (*env)->NewStringUTF(env,"hello world from ndk");
}
六.这个时候可能会报错,说找不到jni.h、JNICALL等东西的。

既然找不到库文件,就给他导入库

方法如下:

还是找到这个工程的Properties,然后选择c/c++General-Path and Symbols

这个时候右边应该是比较空的,点击add,给他指定一个c/c++库

我选择的路径是这样的:

ndk路径\platforms\android-21\arch-arm\usr\include

Android NDK HelloWorld配置(Eclipse)_第11张图片

完成后,应该就不会报错了,之前的.c文件编辑的时候也能出自动代码提示了

七.大功告成,Project-Clean

运行试试

Android NDK HelloWorld配置(Eclipse)_第12张图片


八.其他说明:

1.在MainActivity中引用了android.support.v7.app包中的类,所以在MainActivity类中javah不好用,还是自己新建一个类比较实在。

2.自动生成的.h代码不要去修改,如果是静态方法,多出的2个参数JNIEnv *,jobject/jclass第一个是虚拟机对象,第二个如果是静态方法就是jclass,否则就是jobject代表当前对象或者当前字节码


现在就知道这么多了。。。

你可能感兴趣的:(eclipse,c,android,android,NDK,NDK)