JNI入门

来源:互联网 发布:datagridview查询数据 编辑:程序博客网 时间:2024/05/06 22:57

首先声明一点,Eclipse不仅仅适合于开发Java应用程序。Eclilpse为Java开发提供了极好的支持,它的设计初衷也是为了Java。但得益于它的设计架构,Eclipse能够为包括C语言在内的任何语言的开发提供支持。一个名为CDT的插件,使得在Eclipse里能对C/C++进行开发。
首先说明几个概念
NDK(Native Development Kit)是一系列工具的集合。它提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。
JNI(Java Native Interface)它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。

接下来我将来展示一下一个简单的JNI开发
1.配置NDK环境
(这里使用最新ndk,以前做Android的项目要用到NDK就必须要下载NDK,安装Cygwin(模拟Linux环境用的),下载CDT(Eclipse C/C++开发插件),还要配置编译器,环境变量,特别麻烦,新版就不需要了)
下载用于开发Android NDK的插件,ADT版本在20以上,就能安装NDK插件,另外NDK集成了CDT插件。地址:http://pan.baidu.com/s/1bKvDjK
下载后放到eclipse目录的plugins目录下,重启eclipse,点击Window->Preferences->Android->NDK,设置NDK路径
这里写图片描述
ndk自己可以去官网下,这里附上我的ndk包(http://pan.baidu.com/s/1jH5SlaY)
2.生成so文件
(一)新建一个Android工程(NDKBuild)
在工程上右键点击Android Tools->Add Native Support…,
然后给我们的.so文件取个名字,例如:NDKBuild(我用默认的)
这里写图片描述
目录结构如
这里写图片描述
其中Android.mk文件中”LOCAL_MODULE:=NDKBuild”这个变量很有用
(二)编写java文件,使用native方法

public class Print {    static {        System.loadLibrary("NDKBuild");    }    public native String printHello();}

其中,loadLibrary中的参数就是LOCAL_MODULE的值
(三)编写jni
进入bin/classes目录下,使用javah命令生成头文件
这里写图片描述
首先,路径不要搞错,是bin/classes目录。其次”javah -jni com.example.ndkbuild.Print”最后的参数是”包名+类名”
这样,在bin/classes目录下就有com_example_ndkbuild_Print.h头文件,把它放到jni文件夹下打开
然后将头文件自动生成的方法名copy到NDKBuild.cpp中,注意加上形参

#include <jni.h>#include <string.h>#include "com_example_ndkbuild_Print.h"JNIEXPORT jstring JNICALL Java_com_example_ndkbuild_Print_printHello(        JNIEnv *env, jobject j) {    return env->NewStringUTF("hello");}

此时如果不确定是否有错,可以run as Android Application。如果有错,Console会报错
此时的文件目录:
这里写图片描述
3.加载so并使用
在MainActivity.java添加如下代码:

public class MainActivity extends Activity {    static {        System.loadLibrary("NDKBuild");    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Print print = new Print();        Log.i("Print", print.printHello());    }}

后台会打印hello的。

0 0
原创粉丝点击