Android y iOS: cómo manejar dependencias al crear un SDK

Actualmente estoy trabajando en un SDK que está disponible en la plataforma de Android y iOS.

Para Android, enumeramos las dependencias en nuestro archivo Gradle y usamos Maven para proporcionar el SDK (por lo que nuestras dependencias se enumeran en el archivo .pom).

Para iOS, usamos cocoapods para manejar dependendies.

El problema es el siguiente: * Nuestro SDK usa una dependencia en la versión X * Uno de nuestros clientes puede usar la misma dependencia pero en la versión Y * Otro cliente también puede usar la misma dependencia en la versión Z

Por lo tanto, esto lleva a que nuestro SDK potencialmente se rompa en uno de nuestros clientes (si no ambos) porque nos aseguramos de que funciona con la dependencia X, pero no Y y Z.

Por ahora, el código heredado simplemente ha importado el código fuente de las bibliotecas que causan este problema y lo ha puesto en el espacio, de forma que simula que no usamos la misma biblioteca.

Pero en mi opinión, esto no es una solución appriopriate: no tenemos las últimas revisiones, es doloroso actualizar, el cliente tiene dos veces la biblioteca en lugar de uno.

Por lo tanto, por ahora, estoy tratando de pensar en una buena solución potencial, pero no pude encontrar lo que quiero en Google (tal vez no estoy usando las palabras clave correctas: /).

Lo que estaba pensando era proporcionar soporte para una variedad de versiones para cada dependencia. Un poco como "si este método está aquí, ejecutarlo, de lo contrario, utilizar ese método de la versión anterior" (como selector responderTo en iOS). A continuación, el cliente debe ser capaz de utilizar cualquier versión de la dependencia en la condición que está en el rango admitido.

Sin embargo, no sé si es el camino correcto? ¿Hay alguna otra solución?

Gracias 🙂

One Solution collect form web for “Android y iOS: cómo manejar dependencias al crear un SDK”

Para android, hay dos posibles soluciones, una herramienta basada en la construcción, y una arquitectura:

1.- Si crea su biblioteca con maven, puede usar el ámbito "provided" para forzar a su biblioteca a obtener las dependencias del contenedor que lo ejecuta. De esta forma, la dependencia puede ser proporcionada por la aplicación que consume su biblioteca. Tenga en cuenta que esto no le ayudará si las dependencias son muy diferentes.

2.-Abstracción al rescate! Puede subdividir su proyecto en la biblioteca principal y las bibliotecas de complementos. La biblioteca principal mostrará al usuario cada clase un método y será el que llamará desde sus aplicaciones. Dentro de la biblioteca principal, todas las clases importarán cada SDK externo o dependencia de forma indirecta, un envoltorio genérico que puede ser una clase abstracta o una interfaz, y usarlas de esa manera. Por ejemplo, tal vez esté proporcionando una interfaz de usuario mejorada de inicio de sesión de Facebook. Entonces, en lugar de referenciar el SDK de Facebook directamente en su vista, hará referencia a un facebookLoginInterface y lo llamará. Entonces, tendrás un proyecto secundario, facebookLogin41, donde implementarás el facebookLoginInterface con el facebook sdk 4.1, y el segundo, facebookLogin418, donde implementarás la misma interfaz usando el facebook sdk 4.1.8. A continuación, implementar algún tipo de lógica de suministro, como un marco de Inyección de Dependencia (los proveedores de Roboguice son un ejemplo muy bueno), el ámbito de dependencia de maven (proporcionado, por ejemplo), etc, para que la instancia de la biblioteca sea la interfaz de facebookLoginInterface. Finalmente, el cliente sólo importa la biblioteca principal y el proyecto secundario necesario y utiliza la biblioteca principal.

  • Cómo ejecutar la aplicación en diferentes versiones de sdk en android
  • ¿Cómo mostrar selector de fecha para android con solo mes y año campos?
  • ¿Cuál es la diferencia entre ADT y Android SDK?
  • Cómo puedo crear un nuevo proyecto sin appcompat_v7
  • Truecaller android sdk Código de error 3
  • Android: permite la creación de un alias de actividad cuya targetActivity está en un aar / sdk
  • Java falta carpeta de origen necesaria: 'gen'
  • Ejecutar el emulador de Android con la opción -noaudio devuelve "qemu-system-i386.exe: -audio: invalid option"
  • Cómo instalar ADT13 antiguo en Eclipse
  • IntelliJ IDEA 12 - Nuevo asistente de módulo de aplicaciones de Android falla con "no se puede encontrar el directorio de recursos para el módulo"
  • Android Studio: la aplicación no está instalada en el teléfono, pero se ejecuta
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.