API de plataforma
Acceda a funciones nativas
API de plataforma es una lección gratuita de Kotlin Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Kotlin Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Kotlin Academy incluye 4 lecciones en total.
Acceso a funciones nativas
En ocasiones, el código compartido necesita acceder a funciones del dispositivo: almacenamiento, configuración, reloj y conectividad de red. KMM ofrece varias formas de acceder a las API nativas de manera limpia.
expect/actual para tipos primitivos
Para valores pequeños específicos de la plataforma, use expect/actual. El código común se mantiene limpio, mientras cada plataforma proporciona los detalles.
// commonMain
expect fun currentTimeMillis(): Long
// androidMain
actual fun currentTimeMillis(): Long = System.currentTimeMillis()Inyección de dependencias del código de plataforma
Un enfoque más flexible: defina una interfaz en el código común e inyecte una implementación de la plataforma desde cada aplicación.
// commonMain
interface Storage {
fun save(key: String, value: String)
fun load(key: String): String?
}Implementación para Android
Android implementa la interfaz mediante SharedPreferences y la proporciona al código compartido.
// 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)
}Implementación para iOS
iOS implementa la misma interfaz mediante NSUserDefaults del framework 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)
}Llamar a las API nativas de iOS
Desde iosMain puede llamar directamente a los frameworks de Apple, porque Kotlin/Native genera enlaces de interoperabilidad para ellos.
import platform.UIKit.UIDevice
fun deviceModel(): String = UIDevice.currentDevice.modelLlamar a las API de Android
androidMain tiene disponible todo el SDK de Android, ya que se compila con la plataforma Android.
import android.os.Build
fun deviceModel(): String = Build.MODELBibliotecas multiplataforma listas para usar
A menudo no necesita una interoperabilidad personalizada. Ya existen bibliotecas que encapsulan funciones habituales:
- multiplatform-settings — almacenamiento de clave-valor
- Ktor — redes
- SQLDelight — base de datos local
Proporcionar implementaciones
Inyecte las implementaciones de plataforma al iniciar la aplicación, normalmente mediante un framework de DI como Koin, para que el código compartido reciba la implementación adecuada.
// Android: provide AndroidStorage(prefs)
// iOS: provide IosStorage()
// Shared Repository(storage) uses whichever was injectedElegir un enfoque
Orientaciones:
- Valor pequeño →
expect/actual - Comportamiento con varios métodos → interfaz + inyección
- Necesidad común → use una biblioteca multiplataforma existente
Demostración ejecutable de una abstracción
La idea de la interfaz se expresa con Kotlin básico. Aquí, una implementación en memoria simula un almacén de la plataforma.
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"))
}Comprobación rápida
Necesita una función de almacenamiento con varios métodos, implementada de forma diferente en cada plataforma y fácil de probar. ¿Cuál es el enfoque recomendado?
Resumen
Puede acceder a las funciones nativas de manera limpia:
expect/actualpara tipos primitivos- Interfaz común + implementación de plataforma inyectada para comportamientos
- Interoperabilidad directa en
androidMain/iosMain - Reutilice bibliotecas multiplataforma siempre que sea posible
Con esto termina el curso Fundamentos de KMM.
Preguntas frecuentes
¿La lección «API de plataforma» es gratis?
Sí — el texto completo de «API de plataforma» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Kotlin Academy, actualiza a CoddyKit PRO. El curso de Kotlin Academy incluye 4 lecciones en total.
¿Qué aprenderé en «API de plataforma»?
Acceda a funciones nativas Practicas Kotlin Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Kotlin Academy?
No se requiere experiencia previa. Kotlin Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «API de plataforma»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Kotlin Academy?
Sí. Cada lección de Kotlin Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.