基于linux平台编写首个JNI程序

JNI 是 Java Native Interface 的缩写,中文为 JAVA本地调用。从Java1.1开始,Java Native Interface(JNI) 标准成为 java 平台的一部分,它允许Java代码和其它语言写的代码进行交互。JNI 一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。
    使用 java 与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的,比如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。注意:java 是跨平台的(一次编译到处运行),但是 jvm(java 虚拟机)和 JNI 不是跨平台的。
编写首个 JNI 程序(步骤):
1.编写带有native声明的方法的 java 类
2.使用 javac 命令编译所编写的 java 类,使用 javah 命令生成头文件
3.使用 C/C++ 实现本地方法
4.将 C/C++ 编写的文件生成动态链接库


步骤1:
package com.android.test;
public class Test {
    static
    {
        //不要加库后缀,jvm 会根据平台自动加后缀

        System.loadLibrary("hello");     
    }   
    public native void Output();       
    public static void main(String argv[])   
    {
        Test test = new Test();
        test.Output();   
    }     
}

步骤2:
javac -d . Test.java
javah com.android.test.Test

步骤3:
#include <jni.h>
#include <stdio.h>
#include "com_android_test_Test.h"

JNIEXPORT void JNICALL Java_com_android_test_Test_Output(JNIEnv *env, jobject obj)
{
        printf("Hello JNI\n");
}

步骤4:
#gcc -c -fPIC hello.c
#gcc -shared -fPIC -o libhello.so hello.o
#java com.android.test.Test

posted @ 2013-04-09 17:09  莫回头  阅读(146)  评论(0)    收藏  举报