Kotlin Academy · Lekcja

API platformy

Uzyskuj dostęp do natywnych funkcji

Lekcja 4 z 413 kroki

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.model

Wywoł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.MODEL

Gotowe 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 injected

Wybó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/actual dla 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.

Bezpłatny start

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.

Wszystkie lekcje w tym kursie

  1. Struktura projektu KMM
  2. expect i actual
  3. Współdzielenie logiki biznesowej
  4. API platformy
← Powrót do Kotlin Academy