引子
Kotlin Native 可以编译成 *.so 也就是我们常说的动态库,自然也就可以被 Android 的 Jni 调用,显然 Kotlin Native 官方的 NativeActivity 的例子已经说明这一点。
不过,想要在 Jni 和 Kotlin Native 之间无缝衔接或者直接连接,那还是不行滴,目前还只能通过 C wrap 一下才行的,这个与 Kotlin Native 的 python 例子是一致的。
且不说 Kotlin Native 运行在 Android 当中是否合适,单单是能够运行这一点,已经让我们看到了 Kotlin 称霸 Android 线上线下(Java、C/C++)的希望,也许某一天,我们写 Native 代码都只用 Kotlin Native 了呢。
还有人说 React Native,我前面已经写过例子了啊,除了 JSX ,其他的 KotlinJs 也毫无压力嘛。
称霸宇宙,指日可待。
如何构建
用 Kotlin Native 交给 Android 调用,其实还是有点儿小坑的,主要是 soname 的问题,我把我跑通的工程放到了 github 上面,大家可以愉快的先 star 再 clone 啦。
GitHub: Hello-Kni https://github.com/enbandari/hello-kni
代码其实也很简单,是直接用 Google 官方的 hello-jni 改的,在 Kotlin Native 层输出了一行日志,返回了一个字符串,仅此而已:
在 C 代码中调用:
我们可以看到有个叫 的头文件,这就是 Kotlin Native 生成的。另外,为了让我们的 Android 工程找到 Kotlin Native 的依赖,需要在 CMake 当中配置:
同时,也需要让 gradle 知道这个 so 库要打包进 apk,所以:
构建步骤如下:
1.安装 Kotlin Native 编译器,当然你也可以自己编译。把编译器的路径(包含 konan 命令的目录)添加到 $PATH。
2.运行以下命令得到 Kotlin Native 编译好的依赖:
3.运行 app。
运行效果:
领取专属 10元无门槛券
私享最新 技术干货