Hable sobre Compose multiplataforma y KMM

Autor: Huang Linqing

Es posible que muchos desarrolladores no conozcan Compose Multiplatform y KMM, por lo que este intercambio presentará Compose Multiplatform y KMM a través de los siguientes puntos, permítanos experimentar el encanto de Kotlin multiplataforma.

  • La relación entre Compose Multiplatform y KMM
  • Práctica de Componer Multiplataforma y KMM
  • ¿Cómo deben elegir los desarrolladores

Lo que debe explicarse aquí es que este intercambio solo se compartirá desde la perspectiva del uso. Como una popularización de la tecnología multiplataforma, no involucrará los principios subyacentes de la multiplataforma, como por qué puede ser multiplataforma. . ¿Por qué no hablar de estos? La razón es muy complicada, simplemente, no sé cómo hacerlo.

La relación entre Compose Multiplatform y KMM

Para entender la relación entre Compose Multiplatform y KMM, solo necesitamos entender qué son Compose Multiplatform y KMM.

¿Qué es KMM?

El nombre completo de KMM es Kotlin Multiplatform Mobile, que corresponde a KMP: Kotlin Multiplatform Project, que en realidad es una colección de Kotlin mobile multiplataforma y proyectos multiplataforma de Kotlin. KMM es más como un término de marketing. No tenemos que preocuparnos por la palabra Móvil. Lo que debes saber es que el KMM del que hablamos a continuación se refiere a Kotlin multiplataforma y no se limita a terminales móviles.

KMM puede simplificar el desarrollo de aplicaciones multiplataforma. A través de KMM, los desarrolladores pueden compartir código común de lógica comercial entre aplicaciones iOS, Android, de escritorio y web, y también pueden escribir código específico de la plataforma cuando sea necesario. Por lo tanto, KMM solo es responsable de la parte de lógica de negocios en multiplataforma.

Por ejemplo, la capa de datos y la capa de dominio de red en esta imagen pueden usar KMM para completar la lógica comercial pública.

Cuando se lanzó KMM en los primeros días, Compose Multiplatform no se había lanzado en ese momento, por lo que todos sintieron que KMM era de mal gusto, porque el 90% de los desarrolladores creían que el trabajo principal del terminal móvil era escribir la interfaz de usuario y qué tipo de cruce. plataforma no podría llamarse multiplataforma ?plataforma?

Sin embargo, esta vista en realidad es incorrecta. Sigue siendo muy beneficioso usar KMM para muchas lógicas comerciales, como sistemas de registro y puntos enterrados.

Más tarde, la aparición de Compose Multiplatform compensó las deficiencias de KMM. Entonces, ¿qué es Compose Multiplatform?

Qué es Redactar Multiplataforma

Jetpack Compose es un marco de interfaz de usuario declarativo lanzado oficialmente por Android. Compose Multiplatform es un marco de trabajo multiplataforma de Compose mantenido por JetBrains. Se centra en la interfaz de usuario multiplataforma y también es compatible con iOS, Android, web, escritorio, etc.

Con Compose multiplataforma, compensa las deficiencias de KMM.

Siempre siento que hay una pregunta embarazosa de que Compose Multiplatform y KMM no son lo mismo. De hecho, no son lo mismo. Después de todo, las actualizaciones de versión y los mantenedores son diferentes. Pero después de todo, el soporte subyacente de Kotlin para Native y JS es la base de Compose Multiplatform. Así que espero que algún día puedan fusionarse, y tanto las actualizaciones de versiones como la compatibilidad con complementos puedan unificarse. Así que prefiero llamarlos plataforma completa de Kotlin directamente.

Bueno, de hecho, ya conoces la relación entre KMM y Compose Multiplatform. A continuación, veamos cómo se implementan Compose Multiplatform y KMM.

Práctica de Componer Multiplataforma y KMM

Dado que Compose Multiplatform y KMM tienen una interfaz de usuario reutilizada y una lógica empresarial reutilizada, veamos cómo practicarlo por separado.

Practica KMM

KMM se utiliza para implementar la parte de lógica de negocios.Aquí solo tomamos Android e iOS como ejemplos. Aquí quiero reiterar nuevamente que Compose Multiplatform y KMM se pueden usar de forma independiente, es decir, al usar KMM, puede escribir la interfaz de usuario nativa de Android e iOS respectivamente, y al usar Compose Multiplatform multiplataforma, también puede realizar el negocio de otros terminales respectivamente.

crear proyecto

En Android Studio, podemos usar el complemento Kotlin Multiplatform Mobile para crear rápidamente proyectos compatibles con KMM.

Después de instalar el complemento, abra Android Studio y podemos crear directamente un proyecto que admita KMM.

Al crear, completaremos la información del módulo.

Después de crear el proyecto, la estructura del directorio del proyecto generado se ve así.

androidApp e iOSApp son las bibliotecas de código correspondientes de Android e iOS, y el módulo compartido es la parte que almacena la lógica comercial común de Android e iOS.

El complemento KMM solo crea conjuntos de fuentes de Android e iOS para nosotros. Si desea crear otras plataformas, puede crear carpetas usted mismo y especificar la plataforma de destino.

Después de crear el proyecto, veamos cómo lidiar con la lógica comercial pública.

lógica empresarial común

Podemos poner directamente la lógica que ambos extremos pueden compartir en la carpeta commonMain. Las dependencias de la biblioteca de código abierto se escriben en el directorio commonMain.

Agregue la biblioteca de solicitud de red Ktor y la dependencia de serialización aquí, ya que es multiplataforma de Kotlin, Ktor es una biblioteca de solicitud de red lanzada por Kotlin, por lo que definitivamente es la mejor opción para usar Ktor.

Este fragmento de código es el uso básico de Ktor, el marco de solicitud de red. No explicaremos demasiado. Aquí definimos un método getData para obtener la "Pregunta diaria" en el "Wandroid" de "Hongyang".

Luego, cada uno de nosotros escribe el código de interfaz de usuario de Android o iOS para recibir datos. Aquí mostramos directamente la pantalla de retorno en el texto, y el programa final implementado se ve así.

Implementaremos esta interfaz de usuario más adelante en Compose Multiplatform. De esta manera, hemos realizado un ejemplo de solicitud de datos simple para plataformas duales.

Apoyo comunitario para KMM

En la actualidad, muchas bibliotecas oficiales ya admiten multiplataforma, como el marco de solicitud de red Ktor que acabamos de usar, la inyección de dependencia Koin y los componentes de serialización.

Además, la noticia más amigable para el desarrollo de Android es que Jetpack también comenzó a admitir multiplataforma desde octubre del año pasado, pero actualmente solo hay tres componentes multiplataforma compatibles con Jetpack: Anotaciones, Colecciones y DataStore.

Por supuesto, algunas aplicaciones conocidas también abren algunos componentes, como la biblioteca de paginación de código abierto de Cash App.

Al igual que el diseño de paginación en AndroidX, el módulo común de paginación proporciona la capa de almacenamiento y la capa de modelo de vista; el módulo de tiempo de ejecución de paginación proporciona la capa de interfaz de usuario.

Lo más importante es que la API en paging-common es exactamente la misma que la API en AndroidX, solo que el paquete se migra de androidx.paging a app.cash.paging, por lo que usamos esta parte directamente de acuerdo con Paging en AndroidX. .Puede.

Pero en proyectos reales, depender únicamente del apoyo de la comunidad puede no ser capaz de satisfacer a todas las empresas. Por supuesto, algunos colaboradores de código abierto tienen algunos componentes de código abierto, pero para garantizar la estabilidad, generalmente necesitamos implementar nuestra propia lógica comercial de forma independiente, entonces, ¿cómo nos aseguramos de usar el mismo conjunto de API?

esperar 与 real

Confiamos en las palabras clave esperadas y reales en Kotlin. Expect es la forma en que esperamos lograrlo, y real es la forma de lograrlo, que es un poco similar a la interfaz y la clase de implementación. Por ejemplo, ahora queremos implementar la lógica empresarial: encienda el sistema Bluetooth.

Primero necesitamos definir esta interfaz usando esperar en commonMain

Luego nos damos cuenta del método para activar Bluetooth en los directorios androidMain e iOSMain en el módulo de recursos compartidos.

De esta forma, nos aseguramos de que se utilice la misma API para llamar a múltiples plataformas, y la persona que llama no necesita prestar atención a la implementación específica. Así que aquí, sabemos acerca de KMM. A partir de lo anterior, podemos ver que KMM se puede usar en proyectos reales en la actualidad, pero podemos esperar. El RoadMap de Kotlin dice que la versión oficial se lanzará este año. Podemos esperar juntos. A continuación, practiquemos juntos Compose Multiplatform.

Practica Componer Multiplataforma

Compose Multiplatform se centra en la reutilización de la interfaz de usuario.Como mencionamos anteriormente, existe un problema vergonzoso de que las versiones y complementos de KMM y Compose Multiplatform no están unificados. Podemos crear rápidamente un proyecto KMM en Android Studio con la ayuda del complemento KMM, pero actualmente, si queremos crear rápidamente un proyecto Compose Multiplatform, solo podemos usar la nueva versión de IDEA.

crear proyecto

Descargue la última versión de IDEA y cree un proyecto Compose Multiplatform, pero lo que es aún más vergonzoso es que IDEA no puede crear proyectos para la plataforma iOS porque iOS aún se encuentra en la etapa alfa.

Entonces, si queremos usar la plataforma completa de Kotlin, hay dos formas:

  • Use IDEA para crear un proyecto y agregar la configuración de dependencia de KMM
  • Use Android Studio para crear un proyecto y agregue la configuración Compose Multiplatform
  • Utilice el proyecto de plantilla oficial

Aquí, basado en el proyecto KMM que acabo de crear, agrego la configuración de Compose Multiplatform sobre la base de KMM.

Después de configurar el proyecto, solo consultamos la función de la pregunta diaria para realizarlo. Por supuesto, debemos haber pisado muchos escollos durante la configuración. He registrado todos estos en mi blog.

Realice una visualización de datos de red de doble extremo

El código en iOSApp.swift se ve así.

Main_iosKt.MainViewController se obtiene creando el archivo main.ios.kt en el directorio iOSMain del módulo compartido, el código es el siguiente:

Por lo tanto, podemos escribir el método Compose para analizar datos de red e implementarlo en el directorio commain del módulo compartido y luego llamarlo en Aplicación.

Todos pueden entender este código y es completamente consistente con Jetpack Compose. Los datos se muestran a través del método Mensaje, aquí solo se muestra el autor y el título, el código es el siguiente:

Entonces podemos ejecutar programas de Android e iOS de esta manera. Cabe señalar aquí que podemos ejecutar programas de iOS directamente con el complemento KMM, pero existe un requisito previo de que Xcode aún esté instalado. Se muestran los efectos de Android e iOS. en la figura de abajo.

Podemos ver que el efecto de la página es completamente consistente y, en lo que respecta a esta función en la página, se ha logrado el 100 % de reutilización de la lógica comercial y la interfaz de usuario. ¡Cómo no es genial tailandés!

Escritorio y Web

Usamos Android e iOS como ejemplos anteriores. De hecho, Desktop y Web son lo mismo. En comparación, creo que Desktop es relativamente maduro, y la interfaz de usuario también puede reutilizar Jetpack Compose por completo. Me di cuenta de los efectos de Desktop y Web respectivamente en este ejemplo.

Aquí hay un poco más sobre la Web. En los primeros días, Compose for Web se implementó usando Compose HTML. Compose HTML es una biblioteca orientada a Kotlin/JS que proporciona componentes Composable para crear interfaces de usuario web con HTML y CSS. Entonces, la fragmentación El problema es muy grave, no se puede decir que no se pueda reutilizar con Jetpack Compose, pero no tiene nada que ver.

Por ejemplo, los datos en nuestro diagrama de implementación muestran que Compose HTML está escrito así. En ese momento, fue un colapso ver esto. Afortunadamente, Kotlin lanzó Kotlin/Wasm en la versión 1.8.20. El último Compose for Web está basado en Kotlin/Wasm y actualmente se encuentra en etapa experimental. La página se puede reutilizar por completo con Jetpack Compose, así que preste atención al método de escritura de Compose HTML y deje de aprender.

El oficial proporciona algunas plantillas para Compose Multiplatform, y también hay plantillas para Kotlin/Wasm, pero no hay una plantilla para Compose Wasm para Web. Por lo tanto, abro una plantilla en github, y todos los que estén interesados ​​pueden usarla.

Al igual que el problema de los componentes que acabamos de mencionar, con la madurez de la tecnología Compose Multiplatform, tarde o temprano el oficial lanzará un nuevo complemento para admitir tanto KMM como Compose Multiplatform.

Interoperabilidad con la interfaz de usuario nativa

Al usar Jetpack Compose para desarrollar Android, en algunos escenarios es posible que necesitemos usar Jetpack Compose y XML anidado, entonces este tipo de escenario definitivamente existirá en multiplataforma, en iOS, puede usar UIKitView en la interfaz de usuario compartida Plataforma compleja integrada -widgets específicos como mapas, vistas web, reproductores multimedia, cámaras y más.

En resumen, estos ciertamente no son factores que obstaculicen el desarrollo multiplataforma de Compose Multiplatform.

¿Cómo deben elegir los desarrolladores

En la actualidad, la fuerza principal de la competencia multiplataforma con Compose debería ser Flutter. A muchas personas siempre les gusta compararlos. Ahora, la comparación es definitivamente que Compose Multiplatform definitivamente no es tan bueno como Flutter, pero esta comparación es un poco intimidante Compose Multiplatform . Después de todo, Compose Multiplatform aún es muy joven.

Por supuesto, este es un tema muy abierto, solo expreso mi opinión personal. Flutter siempre tendrá barreras de idioma, pero KMM y Compose Multiplatform son casi un regalo para los desarrolladores de Android. Por supuesto, hay dos grupos de personas que pueden dificultar el uso de KMM y Compose Multiplatform.

  • No he usado Jetpack Compose

Para aquellos que nunca han usado Jetpack Compose, puedo entender perfectamente que algunos componentes, como mapas y WebViews, pueden tardar algún tiempo en ser compatibles.Después de todo, no hay ningún problema en usar XML ahora. Todavía hay algunas personas que nunca han experimentado Kotlin.

  • No he usado Kotlin

Excluyendo a aquellos que se dedican a Farmework o al nivel inferior, de hecho, no tengo forma de entenderlo o incluso sentirme un poco sin palabras. Las razones que mucha gente me dijo es que Java también se puede usar, el jefe no permite que se use, y los proyectos de la empresa están desactualizados, de hecho, todo eso son excusas ahora.

Si ya usa Kotlin, sugiero aprender Jetpack Compose, en primer lugar, esta es una tendencia y, en segundo lugar, ampliará sus habilidades multiplataforma. Si desea seguir participando en el desarrollo de Android en los próximos años, no veo ninguna razón para decir que no.

Si tiene un socio pequeño que no es muy bueno en Jetpack Compose, puede consultar "Notas de cubo de la familia Jetpack Compose" :https://qr18.cn/A0gajp

Supongo que te gusta

Origin blog.csdn.net/weixin_61845324/article/details/131585649
Recomendado
Clasificación