1、Developed by JetBrainsKotlin用一套代码连接所有平台:KMP 在 Netvue的深度应用黄盼青2025 Kotlin?多端存在大量重复的业务逻辑没有统一的中台层,各端都必须处理复杂的音视频业务多端实现长期演化,逻辑差异越来越大使用使用KMP前所面对的问题前所面对的问题回顾一下跨平台技术的发展可移植代码(Portable Code)+平台抽象层(PAL)领域领域跨平台开源库跨平台开源库GUIQt、wxWidgets、GTK、Dear ImGui多媒体多媒体/游戏游戏SDL、OpenAL、SFML、OpenGL/Vulkan网络网络Boost.Asio、libcurl、g
2、RPC、Poco通用库通用库Boost、OpenCV构建系统构建系统CMake、Meson音视频音视频FFmpeg、libVLC、Gstreamer、WebRTC可移植代码(Portable Code)+平台抽象层(PAL)优点优点:性能好多平台编译开源资源丰富缺点缺点:对于开发人员要求高开发效率低跨语言成本高框架跨平台WebView-JS Runtime+原生控件-自绘引擎框架跨平台UI 能跨平台,不代表你的应用“真的”跨平台。但当你真正需要访问系统能力时或者没有现成的轮子,你仍然逃不过:跨语言+多端重复实现KMP 能做什么?为什么它真的Write Once,Run Anywhere?跨平台
3、的本质是业务代码的高可复用性expect/actual PAL的语言级实现传统传统PALPAL:通过#ifdef、多平台目录结构、手动代码管理实现跨语言混编、跨IDE开发完全靠开发者自觉维护expect/actualexpect/actual:Kotlin编译器直接识别IDE自动提示统一开发语言expect/actual PAL的语言级实现统一语言和技术栈,可以让Review机制真正落地KN可以使用各种强大的Native开源库统一跨平台语言统一跨平台语言多平台产物能力多平台产物能力输出多平台的可执行程序、静态库、动态库Android Native产物让JNI不再需要使用C+基于LLVM,强大的
4、可移植能力快速构建快速构建JNI快速构建快速构建JNIclass NetvueAndroidFFMpeg(val pDecoderCodec:Long=0L,val pDecoderCodecContext:Long=0L)init System.loadLibrary(avutil)external fun initDecoder(codecId:Int):Boolean.快速构建快速构建JNICName(Java_com_netviewtech_sdk_ffmpeg_jni_NetvueAndroidFFMpeg_initDecoder)fun initDecoder(env:CPointer,instance:jobject,codecId:jint):jboolean.快速构建快速构建JNI./gradlew netvue-sdk:netvue-sdk-ffmpeg-jni:bundleReleaseAarNetvue 如何实现一套代码跨平台共用项目结构模块化项目结构模块化像搭积木一样组合各种模块像搭积木一样组合各种模块将将Flutter SDK KMP化化KMPFlutterPLUGINMethod channelEvent channelTexture加入我们加入我们KotlinThanks!Have aNice Kotlin