濟南建設網站企業(yè)報價青島網站建設方案優(yōu)化
一、JNI的作用:
1.使Java與本地其他類型語言(C、C++)交互;
2.在Java代碼調用C、C++等語言的代碼?或者 C、C++調用Java代碼。
由于JAVA具有跨平臺的特點,所以JAVA與本地代碼的交互能力弱,采用JNI特性可以增強JAVA與本地代碼的交互能力。
二、AndroidStudion中JNI的使用方法:
1、在AS,點擊File ->Setting,下載NDK?和?CMake。
?2、配置環(huán)境變量:
path中添加環(huán)境變量:C:\Users\a\AppData\Local\Android\Sdk\ndk\26.0.10404224\build(我的環(huán)境)。
配置的是NDK在系統(tǒng)里安裝的位置。
?
?三、測試demo:
1. 新建一個工程JNITest,在工程的包名下,新建一個JAVA類,類名為JNITest:
package com.example.myapplication;public class JNITest {public native String getJNIString();
}
2. 使用javac命令編譯JNITest.java文件,生成JNITest.class文件。
在工程目錄下執(zhí)行如下命令:javac .\JNITest.java
執(zhí)行完畢后可以看到包名下面生成了對應的class文件,如下圖所示:
?3. 生成JNITest.class文件后,需要生成對應的.h文件:
在工程目錄下執(zhí)行如下命令:javah -d app/src/main/jni -classpath app/src/main/java/ -jni -v com.example.myapplication.JNITest
執(zhí)行完畢后可以看到在app/src/main目錄下生成了jni目錄,目錄里生成了對應的.h文件,文件名為com_example_myapplication_JNITest.h
4. 在jni目錄下,新建一個cpp文件,命名為JNITest.cpp,文件里實現(xiàn)JNITest.java文件里定義的本地方法:
右擊jni->New->C/C++ Source File->輸入JNITest
JNITest.cpp 文件代碼:
#include <jni.h>
#include "JNITest.h"JNIEXPORT jstring JNICALL Java_com_example_myapplication_JNITest_getJNIString(JNIEnv* env, jobject)
{return env->NewStringUTF("Hello From JNITest Function(getJNIString)");
}
com_example_myapplication_JNITest.h 文件代碼:
#include <jni.h>
/* Header for class com_example_myapplication_JNITest */#ifndef _Included_com_example_myapplication_JNITest
#define _Included_com_example_myapplication_JNITest
#ifdef __cplusplus
extern "C" {
#endif
/** Class: com_example_myapplication_JNITest* Method: getJNIString* Signature: ()Ljava/lang/String;*/
JNIEXPORT jstring JNICALL Java_com_example_myapplication_JNITest_getJNIString(JNIEnv *, jobject){{return env->NewStringUTF("Hello From JNITest Function(getJNIString)");}};#ifdef __cplusplus
}
#endif
#endif
5. 在jni目錄下,再新建一個Android.mk文件:
右擊jni目錄->New->File->輸入Android.mk,在文件里寫入如下配置:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := JNITest LOCAL_SRC_FILES := JNITest.cpp include $(BUILD_SHARED_LIBRARY)
再新建文件夾:Application.mk,寫入配置:
APP_PLATFORM := android-21 APP_ALLOW_MISSING_DEPS=true
6. 在終端進入到項目"app/src/main/jni"目錄下,執(zhí)行ndk-build,執(zhí)行后在app/src/main目錄下自動生成lib文件夾,生成好的so庫文件就在lib文件夾下,如下圖所示: