安卓jni开发demo

来源:互联网 发布:显示淘宝下架插件 编辑:程序博客网 时间:2024/05/22 08:01

1.在安卓工程(jniTest)下建立一个jni的目录

2.在相关的类中(例如:MainActivity.java)加入loadLibrary

    static int hello = 0;    static{        System.loadLibrary("hello-jni");//注意1        hello = hello();    }     private native static int hello();//注意2    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }

3.生成.h文件

在src目录下 执行javah com.example.test2.MainActivity 后生成.h文件,将其拷贝到jni目录下,如果不需要.h文件,该步骤可以省略。

4.写C(C++)代码和Android.mk文件 (jni目录下),可以参考NDK的sample下的hello-jni的例子。

android.mk:

Android.mk是用来生成so文件的配置文件,我们来看看里面是什么:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := hello-jniLOCAL_SRC_FILES := hello-jni.cinclude $(BUILD_SHARED_LIBRARY)include $(BUILD_SHARED_LIBRARY)表示会生成一个动态链接库,即so文件,生成的库文件名称为lib*.soLOCAL_MODULE    := hello-jni表示将要生成一个名称为libhello-jni.so的库文件LOCAL_SRC_FILES := hello-jni.c表示生成库文件的源文件是hello-jni.c

hello-jni.c:

#include <jni.h>#include <stdlib.h>#include <stdio.h>JNIEXPORT jint JNICALL Java_com_example_test2_MainActivity_hello  (JNIEnv* env, jobject thiz) {    return 100;}

这个函数从根据什么原则生成的呢?是根据src下的HelloJni.java文件中的函数 public native String stringFromJNI();生成的。命名规则为:
Java_(固定开头)com_example_hellojni(用”_”连接的包名)_HelloJni(类名)_stringFromJNI(函数名)

3、新建并配置一个新的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。
4、生成so文件
由于我们勾选了“During auto builds”,所以在工程有所改变的时候,so文件便会自动编译,正确生成以后就能在工程目录下发现多了两个文件夹,文件夹libs\armeabi目录下生成了一个叫libhello-jni.so的文件。至此,使用NDK生成so文件的工作就完成了。
5、so文件的调用
在HelloJni.java文件中有一段代码:
static {
System.loadLibrary(“hello-jni”);
}
使用loadLibrary就可以加载该so文件了,加载的时候不需要写libhello-jni.so,只要写hello-jni就可以了。

参考文章:http://blog.csdn.net/laczff21/article/details/7542236

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0415/1166.html

0 0
原创粉丝点击