Generalidades

Utilice el complemento de validación binaria de Kotlin para verificar la API pública | Autor: Matten Braun | Julio de 2021

Marton Braun

En el proyecto SDK de Android Stream Chat, usamos el complemento Validador de compatibilidad binaria de Kotlin para rastrear todos los cambios que hacemos en la API pública. Este es un complemento propio para JetBrains, aunque todavía se encuentra en la etapa experimental (es el proyecto de incubadora de JetBrains en GitHub).

En este artículo, aprenderá sobre la función del complemento, cómo instalarlo y configurarlo, y cómo usarlo para mejorar su proyecto de biblioteca.

Comencemos con el TL; DR de la función de complemento:

Produce .api Un archivo que describe la API pública de cada módulo. Si se realizan cambios en la API pública, el contenido del módulo debe actualizarse explícitamente. .api Archivo (de lo contrario, la verificación fallará y le alertará de cambios inesperados en la API).

Al hacer esto, puede garantizar que los desarrolladores del proyecto siempre conozcan los cambios exactos que realizaron en la API pública. Dado que el complemento funciona con API binarias, captura cambios incompatibles que pueden no ser obvios al ver el código fuente. Por ejemplo, al escribir código Kotlin, el uso de clases de datos, implementaciones predeterminadas u objetos complementarios puede crear API binarias que normalmente no conoce.

El validador binario se puede usar como un simple complemento de Gradle, lo que hace que la configuración sea muy rápida.Simplemente agregue este código a su nivel superior build.gradle expediente:

Después de agregar el complemento, es hora de configurarlo.Puedes hacer esto en él apiValidation Obstruido. Aquí está la configuración que usamos en el SDK como ejemplo:

Veamos cada opción que usamos:

  1. ignoredPackages Le permite excluir algunos paquetes de la verificación. En nuestro caso, no queremos rastrear los archivos generados por el enlace de vista.También puedes usar ignoredClasses Excluir clases individuales por nombre.
  2. De forma predeterminada, los complementos se habilitarán para todos los módulos del proyecto.usamos ignoredProjects Excluya los módulos no publicados, como la documentación y las aplicaciones de muestra.
  3. Esto nonPublicMarkers La entrada le permite especificar cualquier anotación de Kotlin Opt-in que utilice en la API. Estas anotaciones no se consideran disponibles públicamente. Para obtener más información sobre estos, vea Mastering API Visibility in Kotlin.

Para (re) generar .api Archivo, tienes que ejecutar apiDump Tareas de Gradle.Cuando haga esto por primera vez, debe revisar todos los .api Archivo para asegurar todo lo que contiene Realmente debería ser API pública, luego envíelos a su repositorio.

Aquí hay una pequeña muestra de lo que verá en estos archivos:

Entonces puedes usar apiCheck Tarea de Gradle para verificar si su código fuente actual todavía tiene la misma API que la que envió .api expediente.Esta tarea creará la última .api Viértalos en una carpeta de compilación temporal y compárelos con .api Archivos en el repositorio. Si no coinciden, fallará y notificará la diferencia detectada.

Por ejemplo, vea el siguiente error generado por la tarea después de mover el atributo del constructor de la clase de datos a su cuerpo:

Si estas diferencias son intencionales, debe ejecutar apiDump Vuelva a realizar la tarea y actualice los datos almacenados. .api El archivo ahora incluye cualquier cambio en la API que creó al cambiar el código fuente.correr apiCheck La tarea en este momento se completará con éxito porque la fuente y .api Los archivos se vuelven a sincronizar.

Este es el objetivo del complemento: permitir a los desarrolladores ejecutar explícitamente la tarea de actualizar los archivos de descripción de API cuando entren en contacto con API públicas.

Entonces debes enviar los cambios que introdujiste .api expediente. Estos se mostrarán en envíos y solicitudes de extracción, lo que permitirá a los revisores determinar fácilmente cuándo realizó cambios en la API binaria y capturar cualquier cambio no intencional.

El poder del complemento realmente muestra que si tiene Verificación automática Para asegurarse de que siempre que cambie la API pública, realmente haya actualizado .api El archivo para que coincida.

En Stream, realizamos comprobaciones de dos formas:

  • Use un gancho de git previo a la confirmación para ejecutarlo en nuestro repositorio apiCheck Tarea (y ejecutar automáticamente apiDump Si falla, se le proporcionará) cuando intente crear una nueva confirmación en el repositorio.
  • Verifique los pasos de operación de GitHub en el flujo de trabajo a través de nuestro PR para asegurarse api Antes de fusionar los cambios, el archivo está actualizado.

Este complemento es un Binario Validador. Esto significa que no rastreará los cambios de API públicas que no afecten la compatibilidad binaria. Por ejemplo, la función materializada es parte de la API de nivel de fuente, pero no existe en la API binaria. Afortunadamente, estos cambios deberían ser obvios a partir de los cambios del archivo fuente de todos modos (y no son muy frecuentes).

También hay algunos problemas conocidos en la biblioteca, que puede ver en GitHub. Hemos informado de algunos de ellos nosotros mismos, principalmente sobre el respeto de las etiquetas no públicas, que usamos ampliamente en nuestros proyectos (ver # 36 y # 58).

Incluso con estas limitaciones en mente, el complemento Validador de compatibilidad binaria es una gran herramienta para garantizar que no realizará ningún cambio accidental en la API binaria pública al crear la biblioteca. Compruébalo en GitHub.

También puede encontrar nuestro SDK de chat de Android en GitHub, y puede probar nuestro tutorial de mensajería en la aplicación para comenzar.

Más temas de desarrollo de bibliotecas que podrían interesarle:

LEER  Criando e distribuindo Android SDKs con Gitlab | Autor: Gabriel Marcos | luizalabs | Junio ​​de 2021

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba