You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin Multiplatform能否支持Java类库及Java API?技术问询

Kotlin Multiplatform项目中使用自研Java API的方案

能不能直接使用?

分平台来看:

  • JVM目标平台(如Android、JVM桌面应用):完全可以直接使用。Kotlin和Java天生互操作,你只需要在KMM项目的jvmMain源集中直接导入自研的Java类,像在普通Java/Kotlin项目里一样调用即可。
  • 非JVM平台(如iOS、Web、原生桌面等):不行。这些平台不支持Java字节码,无法直接解析执行Java API。

非JVM平台的最优解决方案

方案1:用expect/actual机制封装适配

这是KMM处理跨平台差异的标准方式,核心是把Java API的逻辑抽象成共享接口,再针对不同平台实现:

  1. 在共享模块的commonMain里定义expect声明,只保留你需要的功能接口,不依赖具体Java实现:
    // commonMain/.../ApiWrapper.kt
    expect fun fetchBusinessData(): String
    
  2. 在jvmMain里用actual实现,直接调用你的Java API:
    // jvmMain/.../ApiWrapper.kt
    actual fun fetchBusinessData(): String {
        return com.yourcompany.yourapi.JavaDataFetcher.fetch() // 调用自研Java API
    }
    
  3. 在非JVM平台(比如iosMain)的actual实现里,用对应平台的原生逻辑完成相同功能:
    // iosMain/.../ApiWrapper.kt
    actual fun fetchBusinessData(): String {
        // 这里用iOS原生逻辑实现等价功能,比如调用Swift网络库或本地逻辑
        return "iOS平台获取的业务数据"
    }
    

方案2:将Java API迁移为Kotlin代码

如果你的Java API逻辑不依赖特定Java生态库,推荐直接把Java代码转换成Kotlin:

  • IntelliJ IDEA/Android Studio自带Java转Kotlin的工具,选中Java文件右键就能转换,转换后代码基本可以直接在commonMain中使用,所有KMM平台都能调用,省去多平台适配的工作量。

方案3:封装Java API为JVM库,为非JVM平台提供替代实现

如果Java API无法迁移,可以把它打包成独立的JVM库,在KMM的JVM源集中依赖该库;同时针对非JVM平台,开发或寻找功能等价的Kotlin/原生库来替代Java API的功能。


内容的提问来源于stack exchange,提问作者Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 04:15:05