2010-10-21 1045 views
6

Tengo una aplicación de transporte público para un país y quiero crear una aplicación separada para otro país. La mayor parte del código se compartirá, pero necesito algunas clases para tener implementaciones diferentes, por ejemplo, TransitProvider.¿Qué hacer con múltiples aplicaciones de Android que comparten aproximadamente el 90% del código fuente?

¿Es posible compartir código usando Android Library Project? ¿Puedo hacer lo siguiente?

  1. Tienes TransitProvider (que se extiende AbstractTransitProvider) en el proyecto biblioteca. La clase tiene métodos que quedan sin implementar.
  2. En el proyecto de aplicación> AndroidManifest.xml tengo un nombre de paquete diferente que en el manifiesto de la biblioteca. También tengo TransitProvider en este proyecto, que está en el mismo paquete que el TransitProvider de la biblioteca.
  3. Cuando uso TP en código de proyecto de biblioteca, la implementación desde la aplicación. proyecto debe ser utilizado (es decir, el TP del proyecto de aplicación prevalece sobre el TP de la biblioteca).

Respuesta

5

¿Es posible compartir el código con Android Library Project?

Sí. Ese es el objetivo principal de un proyecto de biblioteca. Si no necesita recursos de Android, también puede usar un JAR ordinario, creado en un proyecto separado.

¿Se puede hacer lo siguiente?

No puede tener la misma clase (en el mismo paquete) definida en dos lugares, si entiendo los pasos propuestos correctamente.

Usted debe:

  1. Definir AbstractTransitProvider en el proyecto de la biblioteca o JAR
  2. Opcionalmente tener una o más implementaciones concretas de AbstractTransitProvider, para su reutilización recto-para arriba, en el proyecto de la biblioteca o JAR
  3. Aplicaciones utilizando el proyecto de biblioteca o JAR pueden tener sus propias implementaciones concretas de AbstractTransitProvider, en sus propios paquetes de Java, además de utilizar cualquier implementación concreta suministrada por el proyecto de biblioteca o JAR
+0

Gracias por su respuesta. La mayoría de los recursos serán comunes para mis aplicaciones, entonces usaré el proyecto de biblioteca. Necesito hacer algo como esto desde la actividad del proyecto de biblioteca: 'Resultado de viaje = new TransitProvider(). FindJourney();' ¿Cómo puedo asegurarme de que se utiliza la implementación 'TransitProvider' del proyecto de aplicación? – fhucho

+1

@fhucho: "¿Cómo puedo asegurarme de que se utiliza la implementación TransitProvider del proyecto de aplicación?" - solo teniendo una clase llamada 'TransitProvider'. No tenga una clase llamada 'TransitProvider' en el proyecto de la biblioteca. Coloque el código común en 'AbstractTransitProvider' en el proyecto de biblioteca (y/u otras clases de utilidad), y la implementación personalizada en' TransitProvider' en el proyecto de aplicación. – CommonsWare

+0

Pero el proyecto de la biblioteca no parece saber acerca del TransitProvider que se encuentra en el proyecto de la aplicación. La aplicación puede usar clases de lib pero no al revés, creo. – fhucho

Cuestiones relacionadas