1、先是编写包含 native 方法的类库
package com.miles.libs; public class Hello { // 加载本地库 static { System.loadLibrary("Hello"); } // 本地库中的方法 public native String hello(); }
2、用javah生成 c/c++ 头文件
javah -classpath 编译目录 类名
javah -classpath ./bin/classes com.miles.libs.Hello
生成的头文件:com_miles_libs_Hello.h
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_miles_libs_Hello */ #ifndef _Included_com_miles_libs_Hello #define _Included_com_miles_libs_Hello #ifdef __cplusplus extern "C" { #endif /* * Class: com_miles_libs_Hello * Method: hello * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_miles_libs_Hello_hello (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
PS:此文件在你调用javah命令的目录里面
3、新建jni文件目录 将头文件拷贝进去,在目录时面编写c/c++文件
代码文件:com_miles_libs_Hello.c
#include <jni.h> #include "com_miles_libs_HelloLibs.h" JNIEXPORT jstring JNICALL Java_com_miles_libs_Hello_hello(JNIEnv *env, jobject thiz) { return (*env)->NewStringUTF(env, "Hello JNI !"); }
4、编写 Android.mk文件
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := Hello LOCAL_SRC_FILES := com_miles_libs_Hello.c include $(BUILD_SHARED_LIBRARY)
关于mk文件的编写请自行查阅
5、编译在配置好 ndk 的环境下进行编译
我这里用的是 android-ndk-r8c 这个版本编译的,在过高的版本编译会报错,没有深入研究!