android jni 系统信息,android系统Jni介绍

JNI是JAVA标准平台中的一个重要功能,它弥补了JAVA的与平台无关这一重大优点的不足,在JAVA实现跨平台的同时,也能与其它语言(如C、C++)的动态库进行交互,给其它语言发挥优势的机会。

举例说明:

1、java程序清单:

package cn;

public class HelloWorld {

/**

* @param args

*/

static {

System.loadLibrary("hello");

}

public native void DisplayHello();

public static void main(String[] args) {

// TODO Auto-generated method stub

new HelloWorld().DisplayHello();

}

}

2、javac ./cn/HelloWorld.java 编译源文件 ,生成相应的字节码文件HelloWorld.class

cfe67a277d57dc0e11986832266aa2a0.png

3、使用javah生成头文件

javah -jni cn.HelloWorld 为本地方法生成HelloWorld.h文件(在当前目录下生成)

3a4699d2cb31ce15cc1af6f1b5dd5e32.png

内容:

/* DO NOT EDIT THIS FILE - it is machine generated */

#include

/* Header for class cn_HelloWorld */

#ifndef _Included_cn_HelloWorld

#define _Included_cn_HelloWorld

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class: cn_HelloWorld

* Method: DisplayHello

* Signature: ()V

*/

JNIEXPORT void JNICALL Java_cn_HelloWorld_DisplayHello

(JNIEnv *, jobject);

#ifdef __cplusplus

}

#endif

#endif

注:1)、此头文件是不需要用户编译的,直接供其它C、C++程序引用。

2)、此头文件中的Java_cn_HelloWorld_DisplayHello(JNIEnv *, jobject)方法,是将来与动态链接库交互的接口。

4、vi MyHelloWorldImp.c 编写C语言实现 java_cn_HelloWorld_DisplayHello()方法

#include

#include "cn_HelloWorld.h"

#include

JNIEXPORT void JNICALL Java_cn_HelloWorld_DisplayHello

(JNIEnv *env, jobject obj)

{

printf("**From MyHelloWorldImpl.c :");

printf("Hello world ! \n");

return;

}

5、生成动态库

gcc -I/usr/jdk1.5.0_21/include/ -I/usr/jdk1.5.0_21/include/linux/ MyHelloWorldImp.c -o libhello.so -shared -fPIC

在当前目录下生成动态链接库libhello.so文件:

8be7c151d54fca632cf7e04d959bd6bd.png

6、有了具体实现的动态库后,就可以运行JAVA调用JNI程序类的native方法.

java -Djava.library.path=. cn.HelloWorld

结果:

0218d03f3c61bd5dd388f4e261830328.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值