API platformy
Uzyskuj dostęp do natywnych funkcji
API platformy to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.
Dostęp do funkcji natywnych
Współdzielony kod czasami potrzebuje funkcji urządzenia — pamięci masowej, ustawień, zegara czy obsługi sieci. KMM oferuje kilka sposobów na uporządkowany dostęp do natywnych interfejsów API.
expect/actual dla typów prostych
W przypadku niewielkich wartości zależnych od platformy należy użyć mechanizmu expect/actual. Wspólny kod pozostaje przejrzysty, a każda platforma dostarcza szczegóły implementacji.
// commonMain
expect fun currentTimeMillis(): Long
// androidMain
actual fun currentTimeMillis(): Long = System.currentTimeMillis()Wstrzykiwanie kodu platformowego
Bardziej elastyczne podejście polega na zdefiniowaniu interfejsu we wspólnym kodzie i wstrzyknięciu implementacji platformowej z poziomu każdej aplikacji.
// commonMain
interface Storage {
fun save(key: String, value: String)
fun load(key: String): String?
}Implementacja dla Androida
Android implementuje interfejs za pomocą SharedPreferences i udostępnia go wspólnemu kodowi.
// 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)
}Implementacja dla iOS
iOS implementuje ten sam interfejs za pomocą NSUserDefaults z frameworka Foundation.
// 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)
}Wywoływanie natywnych interfejsów API iOS
Z poziomu iosMain można bezpośrednio wywoływać frameworki Apple, ponieważ Kotlin/Native generuje dla nich powiązania interoperacyjne.
import platform.UIKit.UIDevice
fun deviceModel(): String = UIDevice.currentDevice.modelWywoływanie interfejsów API Androida
androidMain ma dostęp do całego Android SDK, ponieważ jest kompilowany względem platformy Android.
import android.os.Build
fun deviceModel(): String = Build.MODELGotowe biblioteki wieloplatformowe
Często nie ma potrzeby tworzenia własnej interoperacyjności. Istnieją już biblioteki opakowujące typowe funkcje:
- multiplatform-settings — przechowywanie par klucz-wartość
- Ktor — obsługa sieci
- SQLDelight — lokalna baza danych
Udostępnianie implementacji
Implementacje platformowe należy wstrzykiwać podczas uruchamiania aplikacji, zazwyczaj za pośrednictwem frameworka DI, takiego jak Koin, aby wspólny kod otrzymał właściwą implementację.
// Android: provide AndroidStorage(prefs)
// iOS: provide IosStorage()
// Shared Repository(storage) uses whichever was injectedWybór podejścia
Wskazówki:
- Mała wartość →
expect/actual - Zachowanie obejmujące wiele metod → interfejs + wstrzykiwanie
- Typowa potrzeba → istniejąca biblioteka wieloplatformowa
Uruchamialny przykład abstrakcji
Pomysł interfejsu opiera się na zwykłym Kotlinie. W tym przykładzie implementacja przechowująca dane w pamięci zastępuje magazyn platformowy.
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"))
}Szybkie sprawdzenie
Potrzebna jest funkcja przechowywania danych z kilkoma metodami, implementowana różnie na każdej platformie i łatwa do testowania. Jakie podejście jest zalecane?
Podsumowanie
Do funkcji natywnych można uzyskiwać dostęp w uporządkowany sposób:
expect/actualdla typów prostych- wspólny interfejs + wstrzyknięta implementacja platformowa w przypadku zachowania
- bezpośrednia interoperacyjność w
androidMain/iosMain - w miarę możliwości ponowne wykorzystanie bibliotek wieloplatformowych
Na tym kończy się kurs podstaw KMM.
Ucz się Kotlin dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 51
- Lekcje
- 203
Często zadawane pytania
Czy lekcja „API platformy” jest bezpłatna?
Tak — pełny tekst „API platformy” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „API platformy”?
Uzyskuj dostęp do natywnych funkcji Ćwiczysz Kotlin Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Kotlin Academy?
Nie wymagamy żadnego doświadczenia. Kotlin Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „API platformy”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Kotlin Academy?
Tak. Każda lekcja Kotlin Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.