?? Android Studio 版本 ???
??? Java中基礎(chǔ)數(shù)據(jù)類(lèi)型對(duì)應(yīng)Native的數(shù)據(jù)類(lèi)型 ??
* Java中基礎(chǔ)數(shù)據(jù)類(lèi)型對(duì)應(yīng)Native中的數(shù)據(jù)類(lèi)型 * |Java |Native | * |boolean |jboolean | * |byte |jbyte | * |short |jshort | * |int |jint | * |long |jlong | * |float |jfloat | * |double |jdouble |
?? Java中引用數(shù)據(jù)類(lèi)型 對(duì)應(yīng)Native中的數(shù)據(jù)類(lèi)型 ???
* Java中引用數(shù)據(jù)類(lèi)型 對(duì)應(yīng)Native中的數(shù)據(jù)類(lèi)型 * |Java Reference |Native |Java Reference |Native | * |All objects |jobject |c(diǎn)har[] |jcharArray | * |java.lang.Class |jclass |short[] |jshortArray | * |java.lang.String |jstring |int[] |jintArray | * |Object[] |jobjectArray |long[] |jlongArray | * |boolean[] |jbooleanArray |float[] |jfloatArray | * |byte[] |jbyteArray |double[] |doubleArray | * |java.lang.Throwable |jthrowable
??? 創(chuàng)建? JNIReferenceType ??
package com.cmake.ndk1.jni; public class JNIReferenceType { static { System.loadLibrary("reference-type-lib"); } public native String callNativeStringArray(String[] strArray); }
?? 生成可關(guān)聯(lián)的庫(kù)鏈接 ??
為了讓Java能夠調(diào)用reference-type-lib庫(kù)中的函數(shù),您需要使用 CMake 構(gòu)建腳本中的?target_link_libraries()?命令來(lái)關(guān)聯(lián)reference-type-lib 庫(kù)
target_link_libraries( # Specifies the target library. ndk1 person-lib dynamic-lib basic-type-lib string-lib reference-type-lib # Links the target library to the log library # included in the NDK. ) )
??? 提供給 Natvie層 調(diào)用的日志庫(kù)鏈接 ??
target_link_libraries( # Specifies the target library. reference-type-lib # Links the target library to the log library # included in the NDK. ${log-lib})
??? Native層 實(shí)現(xiàn) callNativeStringArray 函數(shù) ??
#include <base.h> #include <string> #include <jvm.h> /** * Java中基礎(chǔ)數(shù)據(jù)類(lèi)型對(duì)應(yīng)Native中的數(shù)據(jù)類(lèi)型 * |Java |Native | * |boolean |jboolean | * |byte |jbyte | * |short |jshort | * |int |jint | * |long |jlong | * |float |jfloat | * |double |jdouble | */ /** * Java中引用數(shù)據(jù)類(lèi)型 對(duì)應(yīng)Native中的數(shù)據(jù)類(lèi)型 * |Java Reference |Native |Java Reference |Native | * |All objects |jobject |c(diǎn)har[] |jcharArray | * |java.lang.Class |jclass |short[] |jshortArray | * |java.lang.String |jstring |int[] |jintArray | * |Object[] |jobjectArray |long[] |jlongArray | * |boolean[] |jbooleanArray |float[] |jfloatArray | * |byte[] |jbyteArray |double[] |doubleArray | * |java.lang.Throwable |jthrowable */ extern "C" JNIEXPORT jstring JNICALL Java_com_cmake_ndk1_jni_JNIReferenceType_callNativeStringArray(JNIEnv *env, jobject thiz, jobjectArray str_array) { //獲取數(shù)組長(zhǎng)度 int len = env->GetArrayLength(str_array); //打印長(zhǎng)度 LOGD("len is %d", len); //獲取對(duì)象數(shù)組的某一個(gè)元素(首元素) //獲取其他數(shù)組類(lèi)型的某一個(gè)元素可以使用類(lèi)似的方式 jstring jStringValue = static_cast<jstring>(env->GetObjectArrayElement(str_array, 0)); // 打印jStringValue需要通過(guò) GetStringUTFChars 轉(zhuǎn)換,再打印 const char *str = env->GetStringUTFChars(jStringValue, 0); LOGD("string value is %s", str); //釋放掉jStringValue的內(nèi)存空間 env->ReleaseStringUTFChars(jStringValue,str); //將str返回給應(yīng)用層 return env->NewStringUTF(str); }
?? 調(diào)用Native層相關(guān)函數(shù)????
package com.cmake.ndk1; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import com.cmake.ndk1.jni.JNIReferenceType; import com.cmake.ndk1.jni.JNIString; public class MainActivity5 extends AppCompatActivity { private String[] stringArrays={"字符串1","字符串2","字符串3"}; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); JNIReferenceType referenceType=new JNIReferenceType(); final TextView textView=findViewById(R.id.sample_text); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String str=referenceType.callNativeStringArray(stringArrays); Log.d("MainActivity5",String.valueOf(str)); } }); } }
運(yùn)行結(jié)果 :?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-549731.html
D/LOG_JNI: len is 3 D/LOG_JNI: string value is 字符串1 D/MainActivity5: 字符串1
?下載案例文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-549731.html
到了這里,關(guān)于Android Java代碼與JNI交互 引用類(lèi)型轉(zhuǎn)換(五)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!