JNA的使用比 JNI 更加简单明了,之前我有篇文章:Java调用 C/C++的利器-JNA 讲述了在 Java环境调用 JNI,这里简答记录下 Kotlin下调用 JNI
我们先回顾 下 Java代码
public interface SayLibrary extends Library {
/////////// 如下为接口 //////////
/**
* 根据C提供的接口构造的接口
*
* @param val
* @return
*/
int increase(int val);
/////////// 如下为调用入口 ///////////
/**
* 需要将C编译的dll 或者so 文件放入Java运行目录。
*/
SayLibrary LIBRARY = (SayLibrary) Native.loadLibrary("say", SayLibrary.class);
}
改为 kotlin 很简单
interface SayLibrary : Library {
fun increase(`val`: Int): Int
companion object {
//直接加载
val LIBRARY = Native.loadLibrary("say", SayLibrary::class.java) as SayLibrary
//懒加载的方式
val INSTANCE by lazy { Native.load("waynav", SayLibrary::class.java) as SayLibrary}
}
}
Kotlin在编译后,同 Java没有区别,所以 Java能做的事情 Kotlin 肯定能做。
反过来就不行了噢。