Skip to content

杂项

如果你要在native平台上开发机器人,这里有我写好的几个库用来帮助你使用一些Kotlin官方没有给出的API

zlib解压缩

zlib和gzip不是一个东西, zlib常用于网络数据的压缩例如知名沙盒游戏: Minecraft(Java版) 的网络 数据包就是用到了zlib压缩, 而gzip是一种文件压缩的常见方式, 常见的压缩后的文件后缀名为: .gz

Github地址: https://github.com/RTAkland/kzlib

它支持除wasm和wasi之外的所有Kotlin multiplatform的平台, 使用方法详见README

嵌入式资源

在Kotlin/Native中一个程序会被编译为一个可执行文件, 而这个文件和Jvm的.jar不同 jar本质上是一个压缩包 Jvm虚拟机会读取这个压缩包内的.class文件和资源,然而在native平台中并没有这种API,但是可以换一种方法来实现: 既然只能存放代码,那就使用gradle插件把资源文件以代码的形式自动生成进一个kt文件内(可以使用zlib压缩),编译时gradle会自动添加自动 生成的代码的代码集(sourceSet)到可知性文件内,再使用插件runtime提供的API来获取资源文件即可。

Github地址: https://github.com/RTAkland/KEmbeddableResources

需要使用gradle8.10及以上版本使用, 使用方法详见README

日志

如果你需要一个轻量级并且跨平台的日志库, 你可以选择klogging 它支持除wasi平台外的所有kotlin multiplatform平台使用, 使用方法详见README

Github地址: https://github.com/RTAkland/KLogging

更方便的cinterop

在kotlin中使用cinterop需要使用def文件来定义.hc头文件和.a等动态/静态链接库文件,但是 他们必须都是绝对路径,如果是系统内置、可以使用系统包管理器或手动安装到系统的库是适用的,如果是自己写的 c库,那必须将编译好的库文件和头文件放在git仓库内一并提交,这就导致了其他开发者必须修改路径才能使用,并且 每次提交前都要将其改回来,于是我写了一个gradle插件: kdef。 这个插件可以使用相对路径来定义头文件和库文件 每次def后重新运行一次任务同步一次即可

Github地址: https://github.com/RTAkland/kdef

使用文档: http://blog.rtast.cn/posts/2025-05/1/

最后

如果你有更多自己写的/别人写的库想要放在这里供其他人参考, 可以在PR中修改本文件 来添加

以Apache-2.0开源协议开源