Chinaunix首页 | 论坛 | 博客
  • 博客访问: 391947
  • 博文数量: 80
  • 博客积分: 1982
  • 博客等级: 上尉
  • 技术积分: 1737
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-26 22:41
文章存档

2013年(9)

2012年(71)

分类: LINUX

2012-10-20 18:55:26

    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
#include
#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


                       ——忠于梦想 勇于实践    linux_xpj@opencores.org

阅读(1199) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~