用途:设计 Kotlin Multiplatform 的跨平台边界,决定使用 expect/actual、公共接口加平台绑定,还是各自独立的平台界面。
主要能力与规则:commonMain 保持语义化,描述产品需求而非 Android/iOS 机制(如 currentRegion() 而非带 context 的写法);按能力拆分接口(Clipboard、ShareSheet、Haptics、Biometrics 各自独立,而非一个 Platform 万能对象);actual 保持轻量,只做转换不做决策;当需要 fake、依赖注入、生命周期或运行时选择时,优先用公共接口加各平台绑定,而非 expect class;仅当两个平台真正共用 actual 时才引入中间 source set(skikoMain、appleMain)。
用法要点:平台 UI 绑定应由 Activity 持有,而非 Context 持有;不要用 applicationContext/LocalContext 加 FLAG_ACTIVITY_NEW_TASK 掩盖生命周期问题。绑定在 Android 应用模块的 activity 作用域构造(如 Hilt @InstallIn(ActivityComponent::class) 或 Koin 作用域),Activity 不离开应用模块。
AGP 9 KMP 库约束:com.android.kotlin.multiplatform.library 替代 com.android.library,且拒绝 com.android.application 加 kotlin.multiplatform;BuildConfig 不可用,改用 BuildKonfig 或注入配置;无 build variant;无 NDK/JNI;Compose-MP 资源需显式开启 androidResources { enable = true };consumerProguardFiles 需迁移为 consumerProguardFiles.add(file("rules.pro"));入口(MainActivity、Application、清单、applicationId、targetSdk、versionCode、versionName)移到单独的 androidApp 模块;kapt 不兼容,需迁移到 KSP。
适用场景:KMP 项目的跨平台边界设计与 AGP 9 迁移。限制:具体迁移细节需参考 JetBrains 的 kotlin-tooling-agp9-migration 技能;其他平台细节资料未提供。