KMM项目中能否使用Skia for Kotlin multiplatform mobile实现高级矢量图形
适配KMM移动端的Skia方案现状
你找到的skiko库目前已经支持Android、iOS移动端目标,并非仅支持桌面、Web端。它是JetBrains官方维护的Skia Kotlin全平台绑定,已经完成了移动端的原生库打包、API对齐适配,你可以直接在common层编写Skia相关的矢量图形逻辑,两端无需额外做适配开发,完全满足复杂矢量图形的实现需求。
自主接入原生Skia的实现路径
如果存在特殊定制需求不想依赖第三方封装库,也可以在KMM项目中自行对接原生Skia库:
- Android端:自行编译Skia的Android平台so包,或者引入官方预编译的Skia二进制包,在
androidMain层通过JNI封装Skia的C++ API,对齐common层暴露的公共接口即可 - iOS端:通过Skia官方提供的编译脚本产出iOS静态库,在
iosMain层通过Kotlin/Native的Cinterop能力直接绑定Skia的C API,对齐common层接口即可
该方案的缺点是需要自行处理大量API适配、内存管理、版本兼容问题,研发成本极高,非特殊需求不推荐采用。
Skia方案不可行时的备选矢量图形方案
如果以上两种Skia相关方案都不符合你的项目要求,可以根据需求复杂度选择对应方案:
- 若使用Compose Multiplatform作为UI框架,优先选择官方自带的
androidx.compose.ui.graphics矢量绘制API,全平台对齐实现了路径操作、渐变、蒙版、滤镜、矢量资源渲染等常用能力,和Compose生态完全打通,接入成本为0,可覆盖绝大多数非极端复杂的矢量图形需求 - 若核心需求为矢量资源(SVG、自定义Path等)的渲染、简单编辑,可以选择KMM生态内的成熟图像、图形封装库,内置跨平台矢量渲染能力,接入成本极低
- 若需求非常固定且不想引入大体积第三方依赖,可以通过KMM的expect/actual机制封装双端原生能力,Android端用系统Canvas的矢量API,iOS端用Core Graphics框架实现对应逻辑,公共层仅暴露业务需要的调用接口即可
内容的提问来源于stack exchange,提问作者Dmitry
相关产品推荐
相关产品推荐

