ubuntu下JNI之HelloWorld相互传String值

一、准备步骤ubuntu下配置好java、gcc相关的环境。java

2.编写java文件linux

class JniTest {

    private native String getLine(String prompt);

    public static void main(String args[]) {
        JniTest jnitest = new JniTest();
        String input = jnitest.getLine("Type a line: ");
        System.out.println("User typed: " + input);
    }

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

}

三、编译java文件生成classandroid

javac JniTest.java

四、生成 .h 文件ubuntu

javah -jni JniTest

五、根据.h文件编写c代码命令行

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class JniTest */
#ifndef _Included_JniTest
#define _Included_JniTest
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     JniTest
 * Method:    getLine
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */

JNIEXPORT jstring JNICALL Java_JniTest_getLine
  (JNIEnv *JniEnv, jobject obj, jstring inputstr){
	  char outputstr[50];
	 int lenght = (*JniEnv)->GetStringLength(JniEnv,inputstr);
	 printf("inputstr lenght= %d" ,lenght);
	 printf("请输入一个字符串返回给java");
	 scanf("%s",outputstr);
	 return (*JniEnv)->NewStringUTF(JniEnv,outputstr);
  }
#ifdef __cplusplus
}
#endif
#endif

六、若是配置了android NDK的环境,能够用android,mk来编译生成so,从androidNDK的sample里找到一份Android.mk文件,与生成的JniTest.c代码放入jni文件夹下。或者直接用第7步的gcc命令来生成code

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := JniTest
LOCAL_SRC_FILES := JniTest.c
include $(BUILD_SHARED_LIBRARY)

七、生成so文件,-I的做用是指定jni.h头文件的位置字符串

gcc JniTest.c -I /home/guoshijie/下载/jdk1.8.0_111/include -I /home/guoshijie/下载/jdk1.8.0_111/include/linux -fPIC -shared -o libJniTest.so

八、执行classget

由于生成的so并无放入系统的lib库里,因此须要指定lib库路径input

能够用以下命令指定当前命令行窗口的lib库路径string

/home/guoshijie/test/testc/jni 下放的是生成的so

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/guoshijie/test/testc/jni

或者用

java -Djava.library.path=./jni JniTest

 

执行出的结果以下

guoshijie@guoshijie-virtual-machine:~/test/testc$ java -Djava.library.path=./jni JniTest
inputstr lenght= 13请输入一个字符串返回给javaaaa
User typed: aaa
guoshijie@guoshijie-virtual-machine:~/test/testc$
相关文章
相关标签/搜索