美文网首页
JNI基础-C调用java方法

JNI基础-C调用java方法

作者: 伊泽瑞额 | 来源:发表于2020-02-20 12:29 被阅读0次

    为了让自己更加熟悉开发流程,再把流程重新记录下。

    1.打开eclipse 创建Java 工程 以C 获取java 的uuid 为例:创建本地方法
    package com.amn;
    
    import java.util.UUID;
    
    public class JniSimple {
    
        public static void main(String[] args) {
    
            callStaticMethod();
        }
        
        
        private native static void callStaticMethod();
        
        public static String getUUID() {
            
            return UUID.randomUUID().toString();
        }
        
        static {
            System.load();
        }
    
    }
    
    2. 创建native 方法后 通过命令 进入项目的src 目录下生产头文件 刷新Java工程得到com_amn_JniSimple.h文件

    命令: javah -d ../jni -jni com.amn.JniSimple
    com.amn.JniSimple:当前类的限定名。

    image.png image.png
    3.复制 .h头文件到cpp工程中,然后再c工程中添加这个头文件。
    image.png

    1.c 工程中点击头文件 --添加—> 现有项 选中 .h文件,
    2.复制jni.h 和jni_md.h文件到cpp工程中(这俩个文件再jdk 安装目录下) 我的是D:\JavaJdk\jdk1.8.0_31\include\win32

    4.实现 .h文件声明的函数
    #include "com_amn_JniSimple.h"
    
    JNIEXPORT void JNICALL java_com_amn_JniSimple_callStaticMethod
    (JNIEnv * env, jclass jclz){
    
        //1. 调用getuuid 的static 方法 
        /*jobject(JNICALL *CallStaticObjectMethod)      (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
        CallStaticObjectMethod() 需要NIEnv *env, jclass clazz, jmethodID methodID, ... 这些参数
    
        */
        //2.获取_jmethodID
        jmethodID j_md = (*env)->GetStaticMethodID(env,jclz,"getUUID","()Ljava/lang/String");
    
        jstring j_uuid=(*env)->CallStaticObjectMethod(env, jclz, j_md);
        // jstring 转成 c 的 string
        char * c_uuid=(*env)->GetStringUTFChars(env,j_uuid,NULL);
    
        printf("c_uuid = %s",c_uuid);
    
    }
    
    5.生成一个dll 文件 给java 调用,进入配置管理器 因为是64操作系统选择64 平台

    点击生成---->生成解决方案 从而生成dll文件

    5 加载动态库
    static {
            System.load("D:/VisualStudio/work_place/NDK_02/x64/Debug/NDK_02.dll");
        }
    
    

    相关文章

      网友评论

          本文标题:JNI基础-C调用java方法

          本文链接:https://www.haomeiwen.com/subject/qrpphctx.html