总结一下Eclipse环境下用NDK编译JNI使用的.so库的详细步骤:
1.下载NDK(注意区分32位/64位系统);
2.解压NDK到任意目录(最好没有中文,有中文是否可用没有测试过);
3.配置NDK环境变量:
将NDK解压路径添加到高级系统设置-->系统变量-->Path中(例如我的ndk路径:D:\android-ndk32-r10b-windows-x86\android-ndk-r10b);
4.Eclipse中配置NDK:
Window-->Preferences-->Android-->NDK,添加NDK Location(同上路径);
5.创建JNI Android工程:
1)编写native方法:
<pre>
public class FirstJni{
public native String fromJniStr();
// 使用loadLibrary加载so文件,加载的时候不需要写lib
static{
System.loadLibrary("first-jni");
}
}
</pre>
2)生成头文件
用命令行方式进入工程目录的bin\classes目录下-->javah com.example.j_one.FirstJni-->生成com_example_jone_FirstJni.h文件;
<pre>
/* DO NOT EDIT THIS FILE - it is machine generated */
include <jni.h>
/* Header for class com_example_jone_FirstJni */
ifndef _Included_com_example_jone_FirstJni
define _Included_com_example_jone_FirstJni
ifdef __cplusplus
extern "C" {
endif
/*
- Class: com_example_jone_FirstJni
- Method: fromJniStr
- Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_jone_FirstJni_fromJniStr
(JNIEnv *, jobject);
ifdef __cplusplus
}
endif
endif
</pre>
该头文件需要使用的是根据Java中native方法所生成的C方法名称。命名规则为:
Java_(固定开头)com_example_jone(用"_"连接的包名)_FirstJni(类名)_fromJniStr(函数名)
3)创建jni文件夹,编写C文件
<pre>
include <string.h>
include <jni.h>
jstring Java_com_example_jone_FirstJni_fromJniStr( JNIEnv* env, jobject thiz )
{
return (*env)->NewStringUTF(env, "Message from First JNI !");
}
</pre>
4)编写Android.mk文件
<pre>
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := first-jni #表示将要生成一个名称为libhello-jni.so的库文件
LOCAL_SRC_FILES := first-jni.c #表示生成库文件的源文件是hello-jni.c
include $(BUILD_SHARED_LIBRARY) #表示会生成一个动态链接库,即so文件,生成的库文件名称为lib*.so
</pre>
6.新建并配置一个新的Builder
1) 点击Project->Properties->Builders->New,新建立一个Builder。在弹出的对话框上面点击Program,点击OK;
2) 在弹出的对话框【Edit Configuration】中,配置选项卡【Main】:
Location中需要填入nkd-build.cmd的路径(NDK安装目录下)。
WorkingDiretcoty中需要填入HelloJni的工程根目录。
3) 在【EditConfiguration】中,配置选项卡【Refresh】:
勾选“Refresh resources upon completion”,
勾选“The entire workspace”,
勾选“Recuresively include sub-folders”。
4)在【EditConfiguration】中,配置选项卡【Build Options】:
勾选“After a “Clean””,
勾选“During manual builds”,
勾选“During auto builds”,
勾选“Specify working set of relevant resources”。
点击“Specify Resources…”勾选TestNDK工程的“jni“目录,Finish!
保存设置,点击OK。
7.生成so文件
由于我们勾选了“During auto builds”,所以在工程有所改变的时候,so文件便会自动编译,正确生成以后就能在工程目录下发现多了两个文件夹,文件夹libs\armeabi目录下生成了一个叫libfirst-jni.so的文件。至此,使用NDK生成so文件的工作就完成了。
网友评论