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 🙂

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.

  • El emulador de Eclipse se congela
  • ¿Qué sucede con eclipse, adt-plugin y android-sdk?
  • ¿Por qué algunas API de Android no aparecen en la pestaña de destino de AVD Manager?
  • Integración de Android Sdk en Android Studio
  • Android studio 2.3 canary falta 'Launch Standalone SDK Manager' opción en 'SDK Manager'
  • NFC pilas en el sistema operativo Android
  • Adt eclipse bundle 02-07-2014 ACTUALIZACIÓN
  • La plataforma L es una vista previa y requiere el manifiesto de aplicación para establecer minSdkVersion en 'L'
  • Ubicación de Android Studio SDK
  • Error al iniciar el gestor de SDK: "find_java.exe no es compatible con la versión de Windows que está ejecutando"
  • ¿Por qué elegiría la API de Android sobre las API de Google en el SDK de Eclipse?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.