Plattform-APIs
Greifen Sie auf native Funktionen zu
Plattform-APIs ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.
Auf native Funktionen zugreifen
Gemeinsam genutzter Code benötigt manchmal Gerätefunktionen – etwa Speicher, Einstellungen, die Uhrzeit oder Netzwerkfunktionen. KMM bietet mehrere Möglichkeiten, sauber auf native APIs zuzugreifen.
expect/actual für primitive Werte
Für kleine plattformabhängige Werte verwenden Sie expect/actual. Der gemeinsame Code bleibt übersichtlich, während jede Plattform die Details bereitstellt.
// commonMain
expect fun currentTimeMillis(): Long
// androidMain
actual fun currentTimeMillis(): Long = System.currentTimeMillis()Dependency Injection von Plattformcode
Ein flexiblerer Ansatz: Definieren Sie im gemeinsamen Code ein Interface und injizieren Sie aus jeder App eine plattformspezifische Implementierung.
// commonMain
interface Storage {
fun save(key: String, value: String)
fun load(key: String): String?
}Android-Implementierung
Android implementiert das Interface mit SharedPreferences und stellt es dem gemeinsamen Code bereit.
// 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-Implementierung
iOS implementiert dasselbe Interface mit NSUserDefaults aus dem Foundation-Framework.
// 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)
}Native iOS-APIs aufrufen
Von iosMain aus können Sie Apple-Frameworks direkt aufrufen, da Kotlin/Native dafür Interoperabilitätsbindungen generiert.
import platform.UIKit.UIDevice
fun deviceModel(): String = UIDevice.currentDevice.modelAndroid-APIs aufrufen
In androidMain steht Ihnen das gesamte Android SDK zur Verfügung, da der Code gegen die Android-Plattform kompiliert wird.
import android.os.Build
fun deviceModel(): String = Build.MODELFertige Multiplatform-Bibliotheken
Oft benötigen Sie keine eigene Interoperabilität. Bibliotheken kapseln gängige Funktionen bereits:
- multiplatform-settings – Schlüssel-Wert-Speicher
- Ktor – Netzwerkkommunikation
- SQLDelight – lokale Datenbank
Implementierungen bereitstellen
Injizieren Sie plattformspezifische Implementierungen beim Start der App, typischerweise über ein DI-Framework wie Koin, damit der gemeinsame Code die passende Implementierung erhält.
// Android: provide AndroidStorage(prefs)
// iOS: provide IosStorage()
// Shared Repository(storage) uses whichever was injectedDen passenden Ansatz wählen
Leitlinien:
- Kleiner Wert →
expect/actual - Verhalten mit mehreren Methoden → Interface plus Injection
- Häufig benötigte Funktion → eine vorhandene Multiplatform-Bibliothek verwenden
Ausführbares Beispiel für eine Abstraktion
Die Idee mit dem Interface lässt sich in einfachem Kotlin umsetzen. Hier dient eine In-Memory-Implementierung als Ersatz für einen plattformspezifischen Speicher.
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"))
}Kurzer Test
Sie benötigen eine Speicherfunktion mit mehreren Methoden, die auf jeder Plattform unterschiedlich implementiert wird und sich leicht testen lässt. Welcher Ansatz wird empfohlen?
Zusammenfassung
Sie können sauber auf native Funktionen zugreifen:
expect/actualfür primitive Werte- Gemeinsames Interface plus injizierte plattformspezifische Implementierung für Verhalten
- Direkte Interoperabilität in
androidMain/iosMain - Nach Möglichkeit Multiplatform-Bibliotheken wiederverwenden
Damit ist der Kurs KMM Basics abgeschlossen.
Häufig gestellte Fragen
Ist die Lektion „Plattform-APIs“ kostenlos?
Ja — der vollständige Text von „Plattform-APIs“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Plattform-APIs“?
Greifen Sie auf native Funktionen zu Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Kotlin Academy zu starten?
Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Plattform-APIs“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?
Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.