Plattforms-API:er
Få åtkomst till inbyggda funktioner
Plattforms-API:er är en gratis lektion i Kotlin Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Kotlin Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Kotlin Academy innehåller totalt 4 lektioner.
Åtkomst till inbyggda funktioner
Gemensam kod behöver ibland åtkomst till enhetens funktioner – lagring, inställningar, klockan och nätverk. KMM erbjuder flera sätt att få åtkomst till plattformsspecifika API:er på ett tydligt sätt.
expect/actual för primitiva värden
Använd expect/actual för små plattformsspecifika värden. Den gemensamma koden förblir ren, medan varje plattform fyller i detaljerna.
// commonMain
expect fun currentTimeMillis(): Long
// androidMain
actual fun currentTimeMillis(): Long = System.currentTimeMillis()Beroendeinjektion av plattformskod
Ett mer flexibelt tillvägagångssätt är att definiera ett interface i den gemensamma koden och injicera en plattformsimplementation från varje app.
// commonMain
interface Storage {
fun save(key: String, value: String)
fun load(key: String): String?
}Android-implementation
Android implementerar interfacet med SharedPreferences och tillhandahåller det till den gemensamma koden.
// 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-implementation
iOS implementerar samma interface med NSUserDefaults från Foundation-ramverket.
// 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)
}Anropa inbyggda iOS-API:er
Från iosMain kan du anropa Apples ramverk direkt, eftersom Kotlin/Native genererar interoperabilitetsbindningar för dem.
import platform.UIKit.UIDevice
fun deviceModel(): String = UIDevice.currentDevice.modelAnropa Android-API:er
androidMain har hela Android SDK tillgängligt, eftersom det kompileras mot Android-plattformen.
import android.os.Build
fun deviceModel(): String = Build.MODELFärdiga multiplattformsbibliotek
Ofta behöver du inte skapa någon egen interoperabilitet. Bibliotek paketerar redan vanliga funktioner:
- multiplatform-settings — lagring av nyckel-värden
- Ktor — nätverk
- SQLDelight — lokal databas
Tillhandahålla implementationer
Injicera plattformsimplementationer när appen startar, vanligtvis via ett DI-ramverk som Koin, så att den gemensamma koden får rätt implementation.
// Android: provide AndroidStorage(prefs)
// iOS: provide IosStorage()
// Shared Repository(storage) uses whichever was injectedVälja tillvägagångssätt
Riktlinjer:
- Litet värde →
expect/actual - Beteende med flera metoder → interface + injicering
- Vanligt behov → använd ett befintligt multiplattformsbibliotek
Ett körbart exempel på abstraktion
Idén med interface är vanlig Kotlin. Här fungerar en implementation i minnet som ersättning för en plattformsspecifik lagring.
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"))
}Snabbtest
Du behöver en lagringsfunktion med flera metoder, som implementeras på olika sätt på varje plattform och som är enkel att testa. Vilket tillvägagångssätt rekommenderas?
Sammanfattning
Du kan få åtkomst till inbyggda funktioner på ett tydligt sätt:
expect/actualför primitiva värden- Gemensamt interface + injicerad plattformsimplementation för beteenden
- Direkt interoperabilitet i
androidMain/iosMain - Återanvänd multiplattformsbibliotek när det är möjligt
Det avslutar kursen KMM Basics.
Lär dig Kotlin med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 51
- Lektioner
- 203
Vanliga frågor
Är lektionen ”Plattforms-API:er” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Kotlin Academy, inklusive ”Plattforms-API:er”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Kotlin Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Plattforms-API:er”?
Få åtkomst till inbyggda funktioner Ni övar på Kotlin Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Kotlin Academy?
Du behöver inga förkunskaper. Utbildningen i Kotlin Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Plattforms-API:er”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Kotlin Academy-lektionen?
Ja. Varje Kotlin Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- KMM-projektstruktur
- expect och actual
- Dela affärslogik
- Plattforms-API:er