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$
相關文章
相關標籤/搜索