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

来源:互联网 发布:cntv mac客户端 编辑:程序博客网 时间:2024/06/11 04:34

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.mkJNImakefile文件,基本语法如下:

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中定义如下:

 

结果就是:

 

原创粉丝点击