1、Developed by JetBrains|KotlinKMP 在字节跳动的程化落地实践 吴霖鹏(XDMrWu)抖基础技术架构2025 Kotlin 中开发者会个介绍吴霖鹏抖基础技术架构毕业安电科技学,2018 年加抖 掘:XDMrWu GitHub:XDMrWu前主要参与字节跨端框架 ByteKMP 的建设与业务落地社区账号1.跨端技术选型 2.ByteKMP 建设 3.落地效果与未来规划录1.跨端技术选型多端开发挑战成本显著增加 多端致性难以保障跨端技术对特点缺点C/C+/Rust 性能 上槛 开发 UI/交互逻辑效率低KMP+CMP 性能 能够复 Android 端存量业务代码和基础设
2、施 具备渐进式演进条件 态相对不够成熟Flutter 性能中 具备动态化能 现有代码法复,需要重写 现有研发流程全部重建程序/Web 性能中 很好的动态化能 现有代码法复,需要重写对性能要求 需要渐进式演进能 Android 存量代码基数,才储备充跨端技术选型对性能要求 需要渐进式演进能 Android 存量代码基数,才储备充+跨端技术选型对性能要求 需要渐进式演进能 Android 存量代码基数,才储备充跨端技术选型2.ByteKMP 建设ByteKMP 整体架构ByteKMP 建设研发效率交互能Compose 性能ByteKMP 建设研发效率交互能Compose 性能AS 查看 HiLog
3、AS 查看 FaultLogAS 查看 FaultLogAS 上断点鸿蒙 Kotlin 代码AS 上断点鸿蒙 Kotlin 代码ByteKMP 建设研发效率交互能Compose 性能跨语交互跨语交互Kotlin-ArkTS?/ArkTSLogger.ets export class ArkTSLogger d(tag:string,msg:string)console.log($tag$msg)export const logger=new ArkTSLogger()?/Index.ets export logger form./src/main/ets/ArkTSLogger 跨语交互Kot
4、lin-ArkTSfun call()?/1.获取 demo/logger 模块 val module=nativeHeap.alloc()napi_load_module_with_info(globalEnv,demo/logger,bundleName,module.ptr)?/2.获取 demo/logger 模块导出的 logger 对象 val log=nativeHeap.alloc()napi_get_named_property(globalEnv,module.value,logger,log.ptr)?/3.获取 logger 对象的 d 法 val dFunc=nati
5、veHeap.alloc()napi_get_named_property(globalEnv,log.value,d,dFunc.ptr)?/4.构造参数 tag、msg,将 Kotlin String 转换为 ArkTS string val tag=KmpTag val msg=KmpMsg val tagVar=nativeHeap.alloc()val msgVar=nativeHeap.alloc()napi_create_string_utf8(globalEnv,tag,strlen(tag),tagVar.ptr)napi_create_string_utf8(globalE
6、nv,msg,strlen(msg),msgVar.ptr)?/5.构造参数数组 val argsValue=nativeHeap.allocArray(2)argsValue0=tagVar argsValue1=msgVar?/6.调 d 法 val result=nativeHeap.alloc()napi_call_function(globalEnv,log.value,dFunc.value,2,argsValue,result.ptr)?/ArkTSLogger.ets export class ArkTSLogger d(tag:string,msg:string)consol