Android Kotlin jni 示例
本文的目的是简要介绍在Kotlin
中使用jni
首先新建一个Android
工程,勾选 include C++ support
,然后一路点击Next
,直至Finish
打开MainActivity.kt
, 我们发现在Android Studio 3.0 Preview
下,编译报错,其实是Preview
版本的jni
模板不对,函数定义和静态代码块还是Java
的版本。Kotlin对应的静态代码块关键字是init
。
public native String stringFromJNI();
static {
System.loadLibrary("native-lib");
}
修改后编译通过:
init {
System.loadLibrary("native-lib")
}
external fun stringFromJNI(): String
demo额外定义了一个initFromJNI
函数:
external fun intFromJNI(): Int
对应c++
函数:
extern "C"
JNIEXPORT jint
JNICALL
Java_com_zzk_androidkotlindemo_MainActivity_intFromJNI(
JNIEnv *env,
jobject) {
__android_log_write(ANDROID_LOG_DEBUG, TAG,
"Java_com_zzk_androidKotlindemo_MainActivity_intFromJNI");
return 1 << 8;
}
在TextView
中显示两个函数的调用结果:
val tv = findViewById(R.id.sample_text) as TextView
tv.text = stringFromJNI() + "\nintFromJNI->${intFromJNI()}"
编译运行:
demo很简单,Android Studio后续的正式版本很快就会修复这个模板问题。