1、MainActivity.kt
class MainActivity : AppCompatActivity() {
private val TAG = "MainActivity"
var strings = arrayOf("apple", "pear", "banana")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val jniReference = JNIReferenceType()
sample_text.setOnClickListener {
sample_text.text = jniReference.callNativeStringArray(strings);
}
}
}
2、JNIReferenceType.kt
package com.example.demo.jni
/**
* author : huangyi
* date : 2020/2/10
* desc :
*/
class JNIReferenceType {
external fun callNativeStringArray(strArray: Array<String>): String
companion object {
init {
System.loadLibrary("referenceType-lib")
}
}
}
3、jni_reference_type.cpp
//
// Created by huangyi on 2020/2/10.
//
#include <base.h>
/**
* |Java |Native
* |boolean |jboolean
* |byte |jbyte
* |char |jchar
* |short |jshort
* |int |jint
* |long |jlong
* |float |jfloat
* |double |jdouble
*/
/**
* |Java Reference |Native |Java Reference |Native
* |All objets |jobject |char[] |jcharArray
* |java.lang.Class |jclass |short[] |jshortArray
* |java.lang.String |jstring |int[] |jintArray
* |Object[] |jobjectArray |long[] |jlongArray
* |boolean[] |jbooleanArray |float[] |jfloatArray
* |byte[] |jbyteArray |double[] |jdoubleArray
* |java.lang.Throwable |jthrowable
*/
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_demo_jni_JNIReferenceType_callNativeStringArray(JNIEnv *env, jobject thiz,
jobjectArray str_array) {
int len = env->GetArrayLength(str_array);
LOGD("len is %d", len);
//拿到对象数组的首元素
jstring firstStr = static_cast<jstring>(env->GetObjectArrayElement(str_array, JNI_FALSE));
const char *str = env->GetStringUTFChars(firstStr, JNI_FALSE);
LOGD("first string is %s", str);
env->ReleaseStringUTFChars(firstStr, str);
return env->NewStringUTF(str);
}
运行结果:
2020-02-17 01:54:19.787 330-330/com.example.demo D/HUANGYI: len is 3
2020-02-17 01:54:19.787 330-330/com.example.demo D/HUANGYI: first string is apple