您的位置:首页 > 移动开发 > Android开发

Android:Windows 下搭建NDK-JNI开发环境

2013-12-05 23:27 549 查看

http://down.51cto.com/data/1033886 原版的doc文档我上传到了51CTO

Step 1:下载NDK r9

直接在Android Develop官网上下载NDK r9版本(如果无法登陆官网可以考虑使用自由门代理软件),解压缩后然后再环境变量中添加进去。此版本的优势是内部集成了ndk-build,可以作为替代原来的庞杂的cygwin来对native method进行编译。

部分我也放到了自己的网盘上:
http://yunpan.cn/QDjUeXchBRUHK
android-ndk-r9-windows-x86_64.zip

android-ndk-r8e-windows-x86_64.zip

android-ndk-r8e-windows-x86.zip

android-ndk-1.6_r1-windows.zip

Step 2:新建Android工程

新建一个类JniInterface,并在其中声明native method。

Step 3:编辑生成Class文件

使用命令行进入JniInterface.java这个类的目录下,并使用javac JniInterface.java这个命令生成类对应的class文件。

Step 4:生成.h头文件

将我们新生成的.class文件复制到bin文件对应的目录下,这里就是对应的包的目录下。:

然后cd命令回到/bin/classes这个目录下,使用javah -jni com.wxyyx.jnidemo.JniInterface这个命令编辑生成头文件。

命令格式:javah -jni 包名+类名

生成的头文件内容:

/* DO NOT EDIT THIS FILE - it is machine generated */

#include <jni.h>

/* Header for class com_wxyyx_jnidemo_JniInterface */

#ifndef _Included_com_wxyyx_jnidemo_JniInterface

#define _Included_com_wxyyx_jnidemo_JniInterface

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class: com_wxyyx_jnidemo_JniInterface

* Method: IntFromJNI

* Signature: ()I

*/

JNIEXPORT jint JNICALL Java_com_wxyyx_jnidemo_JniInterface_IntFromJNI

(JNIEnv *, jobject);

/*

* Class: com_wxyyx_jnidemo_JniInterface

* Method: StringFromJNI

* Signature: ()Ljava/lang/String;

*/

JNIEXPORT jstring JNICALL Java_com_wxyyx_jnidemo_JniInterface_StringFromJNI

(JNIEnv *, jobject);

#ifdef __cplusplus

}

#endif

#endif

Step 5:编辑.c文件

将刚才生成的头文件复制到项目的jni目录下(没有则新建一个jni目录):

新建一个.c文档并将.h头文件包含进去:

Step 5:编辑Android.mk文件

Android.mk是JNI的makefile文件,基本语法如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := JniInterface

LOCAL_SRC_FILES := com_wxyyx_jnidemo_JniInterface.c

include $(BUILD_SHARED_LIBRARY)

最简单的只要指定生成的库名称与调用的头文件就可以了。

Step 6:编译



进入到工程的根目录下使用ndk-build命令,就生成了libJniInterface.so文件。

Step 7:调用Native Method

这里的虚拟机推荐使用genymotion,但是不要使用Nexus one这个型号的机器。

在JniInterface.class中添加一句声明:

static {

System.loadLibrary("JniInterface");

}

这边的库的名字不要lib也不要.so这些前缀与后缀。

在MainActivity中定义如下:



结果就是:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: