jni_1th

环境:linux虚拟机
步骤:
  ·编写带有native声明的方法的java类
  ·使用javac命令编译所编写的java类
  ·然后使用javah + java类名生成扩展名为h的头文件
  ·cp上面的头文件,并修改,实现本地方法(这里用c/c++来编写)
  ·将C/C++编写的文件生成动态连接库
  ·ok

HelloWorld.java文件:

public class HelloWorld {
  //所有native关键词修饰的都是对本地的声明
    public native String displayHelloWorld(int a,int b,String c);
    static{
        System.loadLibrary("hello");//载入本地库
    }
    public static void   main(String[] args) {
        String aa=new HelloWorld().displayHelloWorld(5,10,"hello");
        System.out.println(aa);
    }
}              

Javac HelloWorld.java=>编译可得:HelloWorld.class




Javah HelloWorld=>生成HelloWorld.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    displayHelloWorld
 * Signature: (IILjava/lang/String;)V
 */
JNIEXPORT jstring JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *, jobject,jint,jint,jstring);
#ifdef __cplusplus
}
#endif

#endif



cp HelloWorld.h HelloWordl.c并修改得:

#include <stdio.h>
#include <string.h>
#include "HelloWorld.h"

JNIEXPORT jstring  JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj,jint a,jint b,jstring c){

    char buf[100]="string";
//转换为本地的字符串
    char *str = (*env)->GetStringUTFChars(env, c, NULL);    
    printf(str);
    printf("%d\n",a+b);
//将本地的字符串,转换为上层上层apk可用。
    return (*env)->NewStringUTF(env, buf);
}



生成native动态库:                                 

gcc -c  -fPIC -I /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/include -I /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/include/linux HelloWorld.c -o HelloWorld.o

(上面两个路径分别为:jni.h与jvm.h的路径)


gcc -shared HelloWorld.o -o libhello.so


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值