0Pricing
Kotlin Academy · Урок

API платформ

Получайте доступ к нативным функциям

«API платформ» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.

Доступ к нативным возможностям

Общему коду иногда нужны возможности устройства — хранилище, настройки, часы и сетевой механизм. KMM предлагает несколько способов аккуратно обращаться к нативным программным интерфейсам.

expect/actual для примитивных типов

Для небольших платформенных значений используйте expect/actual. Общий код остаётся чистым, а каждая платформа предоставляет необходимые детали.

// commonMain
expect fun currentTimeMillis(): Long

// androidMain
actual fun currentTimeMillis(): Long = System.currentTimeMillis()

Внедрение зависимостей платформенного кода

Более гибкий подход: определите интерфейс в общем коде и внедряйте платформенную реализацию из каждого приложения.

// commonMain
interface Storage {
    fun save(key: String, value: String)
    fun load(key: String): String?
}

Реализация для Android

Android реализует интерфейс с помощью SharedPreferences и предоставляет его общему коду.

// 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

iOS реализует тот же интерфейс с помощью NSUserDefaults из фреймворка 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)
}

Вызов нативных интерфейсов iOS

Из iosMain можно напрямую вызывать фреймворки Apple, поскольку Kotlin/Native создаёт для них привязки взаимодействия.

import platform.UIKit.UIDevice

fun deviceModel(): String = UIDevice.currentDevice.model

Вызов интерфейсов Android

В androidMain доступен весь Android SDK, поскольку этот код компилируется для платформы Android.

import android.os.Build

fun deviceModel(): String = Build.MODEL

Готовые многоплатформенные библиотеки

Часто создавать собственное взаимодействие с платформой не нужно. Библиотеки уже предоставляют оболочки для распространённых возможностей:

  • multiplatform-settings — хранилище пар «ключ — значение»
  • Ktor — сетевое взаимодействие
  • SQLDelight — локальная база данных

Предоставление реализаций

Внедряйте платформенные реализации при запуске приложения, обычно с помощью фреймворка DI, например Koin, чтобы общий код получил нужную реализацию.

// Android: provide AndroidStorage(prefs)
// iOS: provide IosStorage()
// Shared Repository(storage) uses whichever was injected

Выбор подхода

Рекомендации:

  • Небольшое значение → expect/actual
  • Поведение с несколькими методами → интерфейс + внедрение
  • Распространённая потребность → используйте существующую многоплатформенную библиотеку

Рабочий пример абстракции

Идея интерфейса выражается на обычном Kotlin. Здесь реализация хранилища в памяти заменяет платформенное хранилище.

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"))
}

Проверка знаний

Вам нужна возможность хранения с несколькими методами, реализованная по-разному на каждой платформе и удобная для тестирования. Какой подход рекомендуется?

Итоги

Вы можете аккуратно обращаться к нативным возможностям:

  • expect/actual для примитивных типов
  • Общий интерфейс и внедрённая платформенная реализация для поведения
  • Непосредственное взаимодействие в androidMain/iosMain
  • Повторно используйте многоплатформенные библиотеки, когда это возможно

На этом курс «Основы KMM» завершён.

Часто задаваемые вопросы

Урок «API платформ» бесплатный?

Да — полный текст урока «API платформ» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.

Чему я научусь в уроке «API платформ»?

Получайте доступ к нативным функциям Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Kotlin Academy?

Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «API платформ»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Kotlin Academy?

Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Структура проекта KMM
  2. expect и actual
  3. Совместное использование бизнес-логики
  4. API платформ
← Назад к Kotlin Academy