Java语言是基于C语言实现的,Java底层的很多API都是通过JNI(Java Native Interface)来实现的。
通过JNI接口C/C++和Java可以互相调用(存在跨平台问题)

JNI-定义native

在java中如果想调用native需要先在类中定义一个nantive方法。

  1. package com.anbai.sec.cmd;
  2. /**
  3. * 本地命令执行类
  4. * Creator: yz
  5. * Date: 2019/12/6
  6. */
  7. public class CommandExecution {
  8. public static native String exec(String cmd);
  9. }

javac -cp . CommandExecution.java -h即可在当前目录生成.class 和.h文件。

JNI-基础数据类型

Java和JNI定义的类型是需要转换的,不能直接使用Java里的类型,也不能直接将JNI、C/C++的类型直接返回给Java。

参考如下类型对照表:

Java类型 JNI类型 C/C++类型 大小
Boolean Jblloean unsigned char 无符号8位
Byte Jbyte char 有符号8位
Char Jchar unsigned short 无符号16位
Short Jshort short 有符号16位
Int Jint int 有符号32位
Long Jlong long long 有符号64位
Float Jfloat float 32位
Double Jdouble double 64位

jstring转char:env->GetStringUTFChars(str, &jsCopy)
char
转jstring: env->NewStringUTF(“Hello…”)
字符串资源释放: env->ReleaseStringUTFChars(javaString, p);