安装:
sudo apt-get update
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get install openjdk-8-jdk
sudo apt-get install openjdk-8-jdk-headless
设置:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64
export PATH=$PATH:$JAVA_HOME/bin
建立例程目录:
com/yue/test/
com/yue/test/下生成java例程HelloJNI.java:
package com.yue.test;
//HelloJNI.java
public class HelloJNI {
// 声明一个本地方法
public native void sayHello();
// 加载本地库
static {
System.loadLibrary("hellojni");
}
public static void main(String[] args) {
new HelloJNI().sayHello();
}
}
编译 Java 类 (注意当前路径):
javac com/yue/test/HelloJNI.java
生成 JNI 头文件(注意当前路径):
javah -jni com.yue.test.HelloJNI
就会生成一个com_yue_test_HelloJNI.h文件
内容如下:
//com_yue_test_HelloJNI.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_yue_test_HelloJNI */
#ifndef _Included_com_yue_test_HelloJNI
#define _Included_com_yue_test_HelloJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_yue_test_HelloJNI
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_yue_test_HelloJNI_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
c/c++代码:
//
#include <jni.h>
#include <stdio.h>
#include "com_yue_test_HelloJNI.h"
// 实现本地方法
JNIEXPORT void JNICALL Java_com_yue_test_HelloJNI_sayHello(JNIEnv *env, jobject obj) {
printf("Hello from C .so!\n");
}
编译生成共享库:
gcc -shared -fpic -o libhellojni.so -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux HelloJNI.c
执行:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
java com.yue.test.HelloJNI
Hello from C .so!
此过程在3588设备上实现。