一个完整的NDK编译过程
1、创建android工程
2、编写JAVA类,其中包含nativie方法
public class JNI {
public native void write();
public native void myOpen(String pathname);
}
3、生成JNI头文件
使用javah命令
使用cmd进入android项目的bin目录中,然后执行 javah -classpath . -jni com.android.myjni.JNI这个命令
用法:javah [选项] <类>
其中 [选项] 包括:
-help
-classpath <路径>
-bootclasspath <路径> 用于装入引导类的路径
-d <目录>
-o <文件>
-jni
-version
-verbose
-force
com.android.myjni.JNI指包com.android.myjni下的JNI类,是要生成该类的JNI头文件
例如:com_android_myjni_JNI.h
-* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
-* Header for class com_android_myjni_JNI */
#ifndef _Included_com_android_myjni_JNI
#define _Included_com_android_myjni_JNI
#ifdef __cplusplus
extern "C" {
#endif
-*
JNIEXPORT void JNICALL Java_com_android_myjni_JNI_write
-*
JNIEXPORT void JNICALL Java_com_android_myjni_JNI_myOpen
#ifdef __cplusplus
}
#endif
#endif
4、编写c代码
例如:com_android_myjni_JNI.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include "com_android_myjni_JNI.h"
JNIEXPORT void JNICALL Java_com_android_myjni_JNI_write
{
}
JNIEXPORT void JNICALL Java_com_android_myjni_JNI_myOpen
{
}
5、编写Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= myjni
LOCAL_SRC_FILES := com_android_myjni_JNI.c
include $(BUILD_SHARED_LIBRARY)
6、编译so文件
进行编译so文件:
进入工程目录,执行 ndk-build,例如:~/workspace/MYJni$ ndk-build
则会在libs/armeabi/生成相应的so文件,例如:libmyjni.so
工程目录结构:
src下包含java文件
自己新建一个jni文件,包含com_android_myjni_JNI.h、com_android_myjni_JNI.c、Android.mk文件
so文件会自动在libs/armeabi/下生成
测试代码:
package com.android.myjni;
import android.app.Activity;
import android.os.Bundle;
public class JniTest extends Activity {
}
from:http://blog.csdn.net/student_cui/article/details/6249129