Platform-API'er
Få adgang til native funktioner
Platform-API'er er en gratis Kotlin Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Kotlin Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Kotlin Academy-kurset indeholder 4 lektioner i alt.
Adgang til platformsspecifikke funktioner
Fælles kode har nogle gange brug for enhedsfunktioner — lagring, indstillinger, uret og netværksmotoren. KMM giver flere måder at få ren adgang til platformsspecifikke API'er.
expect/actual til primitive værdier
Til små platformspecifikke værdier kan du bruge expect/actual. Den fælles kode forbliver ren, mens hver platform udfylder detaljerne.
// commonMain
expect fun currentTimeMillis(): Long
// androidMain
actual fun currentTimeMillis(): Long = System.currentTimeMillis()Afhængighedsinjektion af platformskode
En mere fleksibel tilgang er at definere en grænseflade i fælles kode og injicere en platformimplementering fra hver app.
// commonMain
interface Storage {
fun save(key: String, value: String)
fun load(key: String): String?
}Android-implementering
Android implementerer grænsefladen med SharedPreferences og leverer den til den fælles kode.
// androidMain
import android.content.SharedPreferences
class AndroidStorage(private val prefs: SharedPreferences) : Storage {
override fun save(key: String, value: String) {
prefs.edit().putString(key, value).apply()
}
override fun load(key: String): String? = prefs.getString(key, null)
}iOS-implementering
iOS implementerer den samme grænseflade med NSUserDefaults fra Foundation-rammeværket.
// iosMain
import platform.Foundation.NSUserDefaults
class IosStorage : Storage {
private val defaults = NSUserDefaults.standardUserDefaults
override fun save(key: String, value: String) = defaults.setObject(value, key)
override fun load(key: String): String? = defaults.stringForKey(key)
}Kald af platformsspecifikke iOS-API'er
Fra iosMain kan du kalde Apples rammeværker direkte, fordi Kotlin/Native genererer interoperabilitetsbindinger til dem.
import platform.UIKit.UIDevice
fun deviceModel(): String = UIDevice.currentDevice.modelKald af Android-API'er
androidMain har hele Android SDK tilgængeligt, fordi det kompileres mod Android-platformen.
import android.os.Build
fun deviceModel(): String = Build.MODELFærdige multiplatform-biblioteker
Ofte har du ikke brug for tilpasset interoperabilitet. Biblioteker indpakker allerede almindelige funktioner:
- multiplatform-settings — lagring af nøgleværdier
- Ktor — netværk
- SQLDelight — lokal database
Levering af implementeringer
Indsæt platformimplementeringer ved appens opstart, typisk via et afhængighedsinjektionsrammeværk som Koin, så den fælles kode modtager den rigtige implementering.
// Android: provide AndroidStorage(prefs)
// iOS: provide IosStorage()
// Shared Repository(storage) uses whichever was injectedValg af tilgang
Retningslinjer:
- Lille værdi →
expect/actual - Adfærd med flere metoder → grænseflade + injektion
- Fælles behov → brug et eksisterende multiplatform-bibliotek
En kørbar abstraktionsdemonstration
Idéen med grænseflader er helt almindelig Kotlin. Her fungerer en implementering i hukommelsen som et platformslager.
interface Storage {
fun save(key: String, value: String)
fun load(key: String): String?
}
class MemoryStorage : Storage {
private val map = mutableMapOf<String, String>()
override fun save(key: String, value: String) { map[key] = value }
override fun load(key: String): String? = map[key]
}
fun main() {
val s: Storage = MemoryStorage()
s.save("name", "Ada")
println(s.load("name"))
}Hurtigt tjek
Du har brug for en lagringsfunktion med flere metoder, som implementeres forskelligt på hver platform og nemt kan testes. Hvad er den anbefalede tilgang?
Opsummering
Du kan få ren adgang til platformsspecifikke funktioner:
expect/actualtil primitive værdier- Fælles grænseflade + injiceret platformimplementering til adfærd
- Direkte interoperabilitet i
androidMain/iosMain - Genbrug multiplatform-biblioteker, når det er muligt
Det afslutter kurset KMM Basics.
Lær Kotlin med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 51
- Lektioner
- 203
Ofte stillede spørgsmål
Er lektionen “Platform-API'er” gratis?
Ja — alle 3 lektioner i læringssporet Kotlin Academy, inklusive “Platform-API'er”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Kotlin Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Platform-API'er”?
Få adgang til native funktioner Du øver dig i Kotlin Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Kotlin Academy?
Der kræves ingen tidligere erfaring. Kotlin Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Platform-API'er”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Kotlin Academy-lektion?
Ja. Alle Kotlin Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.