关闭

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

1102人阅读 评论(0) 收藏 举报
分类:

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

 

结果就是:

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    文章声明
    本博客所有文章由本人或原创或部分参考整理自其它文章,所有参考处皆有备注且每篇文章末尾的参考资料会注明所有参考资料来源。若无意间冒犯了您的权利请及时联系告知,非常抱歉。 本博客所有文章仅为技术交流之用,最好不要用于商用。
    个人资料
    • 访问:148703次
    • 积分:1777
    • 等级:
    • 排名:千里之外
    • 原创:51篇
    • 转载:0篇
    • 译文:8篇
    • 评论:32条
    文章分类
    最新评论