使用Eclipse开发DNK,个人感觉更加的友好、容易。因此在Eclipse下搭建了一个NDK开发环境和开发流程。
一般的,首先要搭建Android开发环境,eclipse + jdk + adt + sdk 即可。
这里重点讲解ndk开发开发流程。我使用的是android-ndk-r14b开发包。到网上下载
NDK,解压即可。
配置ndk环境
操作流程:window ----->preferences------>Android------>NDK
然后将刚刚解压的ndk下的build导进来即可。
NDK开发流程
1)、新建Android项目 2)、创建类,编写本地方法
3)、使用javah命令生成.h头文件。项目右键--->Android Tools------->add native support。这样就可以生成jni目录,将生成的头文件放到jni目录下。
4)、Android.mk文件配置so库名。
5)、我们看到头文件会出现错误,需要导入jni.h等头文件
项目右键---->properties----->C/C++ Gerneral------>Paths and Symbols 添加入需要的头文件。
将上图所示的ndk下的路径add进来。
这样就可以了,在目录下包含一个includes目录。
6)、实现头文件中定义的函数
7)、build project编译生成.so动态库
8)、加载动态库
9)、调用本地方法
10)、运行结果
以上就是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)