Java Native Interface

All source code is available at github.

  • Create java class with native method
[yunpxu@yunpxu-mac jni]$ cat src/com/jni/HelloWorld.java 
package com.jni;

public class HelloWorld {

    static {
        System.loadLibrary("HelloWorld");
    }

    public native String sayHello(String msg);

    public static void main(String[] args) {
        new HelloWorld().sayHello("Hello JNI");
    }
}
  • Compile java and generate C header file
[yunpxu@yunpxu-mac jni]$ javac -d out/ -h src/com/jni/c  src/com/jni/HelloWorld.java
[yunpxu@yunpxu-mac jni]$ tree
.
├── jni.iml
├── out
│   └── com
│       └── jni
│           └── HelloWorld.class
└── src
    └── com
        └── jni
            ├── HelloWorld.java
            └── c
                └── com_jni_HelloWorld.h

7 directories, 4 files
  • Write HelloWorld.c
[yunpxu@yunpxu-mac jni]$ cat src/com/jni/c/HelloWorld.c 
#include <stdio.h>
#include <jni.h>
#include "com_jni_HelloWorld.h"

JNIEXPORT jstring JNICALL Java_com_jni_HelloWorld_sayHello
  (JNIEnv *env, jobject obj, jstring str) {
    printf("%s\n",(*env)->GetStringUTFChars(env, str,0));
    return str;
}
int main()
{

}
  • Generate shared library
[yunpxu@yunpxu-mac jni]$ gcc -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/darwin/"  -o out/libHelloWorld.jnilib src/com/jni/c/HelloWorld.c
[yunpxu@yunpxu-mac jni]$ tree out/
out/
├── com
│   └── jni
│       └── HelloWorld.class
└── libHelloWorld.jnilib
  • Run java
[yunpxu@yunpxu-mac jni]$ cd out/ && java com.jni.HelloWorld
Hello JNI
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容