android通过jni接口与c、c++互调

来源:互联网 发布:excel数据汇总 编辑:程序博客网 时间:2024/05/22 09:42

都知道java和c的互相调用是通过jni接口,这里我也来说一下在andorid里面如果调用c和c++代码。

废话不多说这里我们的任务是在ADT里面能编译c/c++的源文件为.so的链接库。

工欲善其事必先利其器:

这里我们需要的器就是:

1:ndk 下载地址 http://developer.android.com/tools/sdk/ndk/index.html

2:ADT 就是android开发的eclipse开发环境

3: 安装一下CDT这样看c和c++的代码感觉舒服点

好了就这几个就够了,以前很多质料上面都说要用到cygwin但是我没有用到.

第一步:

下载好ndk解压到任何的一个地方。

第二步:

然后用ADT新建一个andorid工程我这里随便新建一个就叫androidndktest

第三部:

进入解压的ndk目录找到E:\android-ndk-r9c\samples\hello-jni这里面的jni东西拷贝到ADT的工程目录里面现在的样子一般就是这样


好了我们继续:打开jni里面的hello-jni.c文件修改如下

#include <string.h>#include <jni.h>/* This is a trivial JNI example where we use a native method * to return a new VM String. See the corresponding Java source * file located at: * *   apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java */jstringJava_com_example_ndktest_MainActivity_stringFromJNI( JNIEnv* env,                                                  jobject thiz ){    return (*env)->NewStringUTF(env, "Hello from JNI !  Compiled with ABI ");}

这里我有必要解释一下,这个是我们的c代码,它的函数名字可能有点长,但是没关系,其实这是jni规定的最开始的Java反正你照着写就对了com_example_ndktest这一串就是包名字了,后面的就是java的哪个类要调用它还有它的名字就这么简单,返回的是一个String的字符串,然后我们来看看在java里面怎么调用它
//声明c的接口public native String stringFromJNI();static {System.loadLibrary("hello-jni");}

最总要的就是这两句话 第一句是声明,第二句是加载编译好的so库,但是现在我们还没有编译,这里我们来配置好所有东西然后跑起来看看效果

在项目上右键properties然后出现这个界面选择builders新建一个然后看图配置





配置完毕过后编译器就会自动编译了,编译完成过后点击run这样就可以在android上跑起来了。


这里是我的java代码

public class MainActivity extends Activity {//声明c的接口public native String stringFromJNI();static {System.loadLibrary("hello-jni");}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView textView = (TextView) findViewById(R.id.hello);textView.setText(stringFromJNI());}}

0 0
原创粉丝点击