Struktur Proyek KMP: commonMain, androidMain, iosMain
Pahami hierarki source set dan cara kode dibagikan di berbagai target.
Struktur Proyek KMP: commonMain, androidMain, iosMain adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Kotlin Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Kotlin Academy mencakup 4 pelajaran total.
Apa Itu KMP?
Kotlin Multiplatform (KMP) memungkinkan Anda menulis kode Kotlin bersama yang dikompilasi menjadi JVM, Android, iOS (melalui Kotlin/Native), dan JS. Kode khusus platform berada dalam set sumber terpisah.
// Typical KMP module structure:
// shared/
// src/
// commonMain/kotlin/ <- shared code
// androidMain/kotlin/ <- Android-only
// iosMain/kotlin/ <- iOS-only
// commonTest/kotlin/ <- shared tests
fun main() { println("KMP: one codebase, many targets") }Hierarki Set Sumber
Set sumber membentuk hierarki. commonMain adalah akarnya; androidMain dan iosMain bergantung padanya. Kode dalam commonMain terlihat oleh semua target.
// build.gradle.kts (Kotlin DSL)
kotlin {
androidTarget()
iosX64()
iosArm64()
iosSimulatorArm64()
sourceSets {
val commonMain by getting {
dependencies { /* shared deps */ }
}
val androidMain by getting
val iosMain by getting
}
}commonMain: Logika Bersama
Letakkan logika bisnis, model domain, repositori, dan kasus penggunaan dalam commonMain. Kode ini dikompilasi untuk semua target.
// commonMain/kotlin/com/example/domain/User.kt
data class User(val id: String, val name: String, val email: String)
// commonMain/kotlin/com/example/repository/UserRepository.kt
interface UserRepository {
suspend fun getUser(id: String): User?
suspend fun saveUser(user: User)
}androidMain: Spesifik Android
androidMain dapat menggunakan kelas Android SDK. Penggunaan umumnya adalah implementasi khusus Android untuk deklarasi expect/actual.
// androidMain/kotlin/com/example/platform/PlatformLogger.kt
import android.util.Log
class AndroidLogger : Logger {
override fun log(msg: String) = Log.d("App", msg)
}
// androidMain/kotlin/com/example/di/PlatformModule.kt
// Koin or Hilt module that binds AndroidLogger to LoggeriosMain: Spesifik iOS
iosMain memiliki akses ke framework Apple melalui interoperabilitas Kotlin/Native. Gunakan set ini untuk implementasi API expect/actual di iOS.
// iosMain/kotlin/com/example/platform/PlatformLogger.kt
import platform.Foundation.NSLog
class IosLogger : Logger {
override fun log(msg: String) = NSLog(msg)
}
// iOS uses Kotlin/Native runtime; no JVM hereKonfigurasi Gradle untuk Target iOS
Untuk iOS, biasanya Anda mendeklarasikan tiga target: x64 (simulator pada Intel), arm64 (perangkat), dan simulatorArm64 (simulator pada Apple Silicon).
// build.gradle.kts
kotlin {
iosX64()
iosArm64()
iosSimulatorArm64()
sourceSets {
val iosMain by creating {
dependsOn(commonMain.get())
}
val iosX64Main by getting { dependsOn(iosMain) }
val iosArm64Main by getting { dependsOn(iosMain) }
val iosSimulatorArm64Main by getting { dependsOn(iosMain) }
}
}Dependensi Bersama di commonMain
Tambahkan dependensi bersama (Ktor, SQLDelight, kotlinx.serialization, Koin) ke commonMain. Driver khusus platform diletakkan dalam set sumber platform.
// commonMain dependencies example:
// implementation("io.ktor:ktor-client-core:2.3.0")
// implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1")
// implementation("io.insert-koin:koin-core:3.4.0")
// androidMain:
// implementation("io.ktor:ktor-client-okhttp:2.3.0")
// iosMain:
// implementation("io.ktor:ktor-client-darwin:2.3.0")commonTest: Pengujian Bersama
Pengujian dalam commonTest berjalan pada semua target. Gunakan pustaka pengujian Kotlin dan tulis pengujian unit yang tidak bergantung pada target untuk logika bisnis bersama.
// commonTest/kotlin/UserRepositoryTest.kt
import kotlin.test.Test
import kotlin.test.assertEquals
class UserRepositoryTest {
@Test
fun testUserCreation() {
val user = User("1", "Alice", "alice@example.com")
assertEquals("Alice", user.name)
}
}Set Sumber Menengah
Anda dapat membuat set sumber menengah yang digunakan bersama oleh sebagian target, misalnya nativeMain untuk semua target native, atau appleMain untuk iOS + macOS.
// Create appleMain shared between iOS and macOS:
sourceSets {
val appleMain by creating { dependsOn(commonMain.get()) }
val iosMain by getting { dependsOn(appleMain) }
val macosMain by getting { dependsOn(appleMain) }
}Tata Letak Berkas Proyek
Pohon direktori modul bersama KMP yang umum dan memisahkan tanggung jawab dengan jelas.
// shared/
// build.gradle.kts
// src/
// commonMain/kotlin/
// domain/ User.kt, Post.kt
// repository/ UserRepository.kt
// usecase/ GetUserUseCase.kt
// androidMain/kotlin/
// repository/ RoomUserRepository.kt
// iosMain/kotlin/
// repository/ CoreDataUserRepository.kt
// commonTest/kotlin/ GetUserUseCaseTest.ktIntegrasi CocoaPods / SPM
Plugin Gradle KMP menghasilkan XCFramework (atau pod CocoaPods) yang Anda tambahkan ke proyek Xcode, sehingga kode Kotlin bersama dapat digunakan sebagai framework native.
// build.gradle.kts for CocoaPods:
kotlin {
cocoapods {
name = "Shared"
version = "1.0"
ios.deploymentTarget = "14.0"
framework { baseName = "Shared" }
}
}
// Run: ./gradlew :shared:podPublishReleaseXCFrameworkPemeriksaan Singkat
Di mana logika bisnis bersama (model domain, kasus penggunaan) seharusnya ditempatkan dalam proyek KMP?
Ringkasan
commonMain berisi logika bersama (domain, repositori, kasus penggunaan). androidMain/iosMain berisi implementasi platform. commonTest menjalankan pengujian pada semua target. Dependensi dibagi: API bersama di commonMain, driver platform di set sumber platform.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Struktur Proyek KMP: commonMain, androidMain, iosMain” gratis?
Ya — teks lengkap “Struktur Proyek KMP: commonMain, androidMain, iosMain” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Kotlin Academy, upgrade ke CoddyKit PRO. Kursus Kotlin Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Struktur Proyek KMP: commonMain, androidMain, iosMain”?
Pahami hierarki source set dan cara kode dibagikan di berbagai target. Kamu berlatih Kotlin Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Kotlin Academy?
Tidak diperlukan pengalaman sebelumnya. Kotlin Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Struktur Proyek KMP: commonMain, androidMain, iosMain” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Kotlin Academy ini?
Ya. Setiap pelajaran Kotlin Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Struktur Proyek KMP: commonMain, androidMain, iosMain
- Mekanisme expect/actual untuk API Platform
- Membagikan Lapisan Repository dan Use Case
- Injeksi Dependensi dalam KMP dengan Koin