Eclipse下搭建Android的NDK开发环境

338 阅读1分钟

使用Eclipse开发DNK,个人感觉更加的友好、容易。因此在Eclipse下搭建了一个NDK开发环境和开发流程。

一般的,首先要搭建Android开发环境,eclipse + jdk + adt + sdk 即可。

这里重点讲解ndk开发开发流程。我使用的是android-ndk-r14b开发包。到网上下载 NDK,解压即可。

配置ndk环境

操作流程:window ----->preferences------>Android------>NDK 然后将刚刚解压的ndk下的build导进来即可。

NDK配置.png

NDK开发流程

1)、新建Android项目 2)、创建类,编写本地方法

本地方法.png

3)、使用javah命令生成.h头文件。项目右键--->Android Tools------->add native support。这样就可以生成jni目录,将生成的头文件放到jni目录下。

jni目录.png

4)、Android.mk文件配置so库名。

Android.png

5)、我们看到头文件会出现错误,需要导入jni.h等头文件

运行结果.png

项目右键---->properties----->C/C++ Gerneral------>Paths and Symbols 添加入需要的头文件。

include.png

将上图所示的ndk下的路径add进来。

add.png

这样就可以了,在目录下包含一个includes目录。

运行结果.png

6)、实现头文件中定义的函数

运行结果.png

7)、build project编译生成.so动态库

运行结果.png

8)、加载动态库

运行结果.png

9)、调用本地方法

运行结果.png

10)、运行结果

运行结果.png

以上就是eclipse下的ndk开发流程。


给出各文件内容

MainActivity

private TextView mTextView;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mTextView = (TextView)this.findViewById(R.id.mytext);
		mTextView.setText(NDKTest.getStrFromJNI());
	}

NDKTest

public class NDKTest {
	
	public native static String getStrFromJNI();
	
	static{
		System.loadLibrary("myndk");
	}

}

com_example_ndkfile_NDKTest.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_ndkfile_NDKTest */

#ifndef _Included_com_example_ndkfile_NDKTest
#define _Included_com_example_ndkfile_NDKTest
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_ndkfile_NDKTest
 * Method:    getStrFromJNI
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_ndkfile_NDKTest_getStrFromJNI
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif

myndk.c

#include "com_example_ndkfile_NDKTest.h"
#include <jni.h>

JNIEXPORT jstring JNICALL Java_com_example_ndkfile_NDKTest_getStrFromJNI
  (JNIEnv *env, jclass jcls){
	return (*env)->NewStringUTF(env,"hello formjni");
}

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := myndk
LOCAL_SRC_FILES := myndk.c

include $(BUILD_SHARED_LIBRARY)