经过一天的磕磕碰碰,终于完成第一个JNI+NDK开发。
(1)下载安装cygwin,我采用的是在线安装方式,这里我们只需要以下组件 : binutils , gcc , gcc-mingw , gdb , make , 不用下全部的组件
(2)下载NDK工具,并配置ndk环境变量
配置完成后,我们开发第一个NDK程序
a:创建android工程
b:在一个java类中声明一个native方法
c:编译并生产头文件
注意事项:先在cmd中编译 javac Jni.java
cd 到该项目下bin目录下并
set classpath=D:\workspace\DiskNumber\src ,到项目的src根目录下,然后运行javah -jni com.tjn.test.TestDll,
d:创建c文件
引入头文件: 首先要包含头文件 jni.h, 该头文件位置定义在 android-ndk-r9c\platforms\android-5\arch-arm\usr\include目录下的 jni.h, 下面是该头文件中定义的一些方法, 包括本项目中使用的 NewString 方法;
- jstring (*NewString)(JNIEnv*, const jchar*, jsize);
- jsize (*GetStringLength)(JNIEnv*, jstring);
- const jchar* (*GetStringChars)(JNIEnv*, jstring, jboolean*);
- void (*ReleaseStringChars)(JNIEnv*, jstring, const jchar*);
- jstring (*NewStringUTF)(JNIEnv*, const char*);
- jsize (*GetStringUTFLength)(JNIEnv*, jstring);
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE := hello
- LOCAL_SRC_FILES := hello.c
- include $(BUILD_SHARED_LIBRARY)
local_src_files := hello.c;//hello.c代表我们创建的c文件
f:编译NDK动态库
进入Cygwin相应目录 : 从Cygwin中的cygdrive 中进入windows的工程jni目录
编译hello.c文件
g:Java中加载动态库
- //静态代码块加载C语言库文件
- static{
- System.loadLibrary("hello");
- }