¿Cómo puedo administrar mejor las cadenas de filtro de intención de Android en varios proyectos?

8

En mi proyecto IntentExamples, tengo este filtro, correspondiente a un servicio.

<intent-filter>
                <action android:name="biz.rpcodes.apps.intentexamples.START_SERVICE" />
</intent-filter>

En otro proyecto, UseExampleService, tengo algo como:

Intent i = new Intent("biz.rpcodes.apps.intentexamples.START_SERVICE");
                startService(i);

... guiado por esta respuesta: https://stackoverflow.com/a/16439551/5181778

Mi pregunta es: ¿cómo puedo administrar mejor estas cadenas de filtro de intención en varios proyectos? La mejor solución que tengo ahora es hacer una clase que copio y pego del proyecto de Servicio en los otros proyectos, es decir:

class ExampleServiceIntents {
public static final String ExampleServiceIntents.START_SERVICE = 
    "biz.rpcodes.apps.intentexamples.START_SERVICE";
...

Si bien podría importar las clases de Servicio ellos mismos, new Intent(this, ExampleService.class)me gustaría mantener las clases de Servicio en su propio proyecto.

Rick Page
fuente
¿Por qué quieres mantener el servicio en un proyecto separado? Eso solo introduce la posibilidad de que la aplicación con el Serviceno esté instalada. Y siempre puede crear una biblioteca que contenga estas constantes y luego usar esa biblioteca en cada proyecto.
Xaver Kapeller
Actualmente tengo bibliotecas, y me resulta engorroso en Android Studio importarlas. Por lo general, Android Studio rompe algo y me queda copiar los archivos pegados uno por uno. (Pregunta / problema por separado) Además, estas aplicaciones son internas, puedo controlar los requisitos, esto no es para Google Play Store, etc. Además, no es necesario que las tres aplicaciones ejecuten el mismo código, de alguna manera es mejor poner solicitudes en cola en un proceso para nuestro diseño. (Mucho para explicar)
Rick Page
¿Cómo es engorroso importarlos? Vas a romper mucho más copiando las clases por sí mismas y luego simplemente copiando los módulos de trabajo completos. ¿Y por qué no está utilizando un servidor Maven como SonarQube o Artifactory para alojar sus bibliotecas internas? Luego, importar la biblioteca sería como importar cualquier otro proyecto Maven, agregando una línea en build.gradle.
Xaver Kapeller
"romper mucho más" Sí, totalmente. Pero la única forma en que pude usar los módulos fue importándolos, en cuyo caso Android Studio copia todos los archivos. "... servidor maven" Gracias por la sugerencia, voy a investigar esto.
Rick Page

Respuestas:

1

Bibliotecas compartidas de Android o enlaces simbólicos dependientes del sistema operativo.

Opción 1: Biblioteca compartida de Android

Una biblioteca formal de Android importada en cada proyecto.

Pros : seguridad tipo. Multiplataforma y funciona con control de fuente. Comprobación de sintaxis completa y soporte de editor.

Contras : sigue siendo un poco molesto importar proyectos como bibliotecas a través de los editores actuales (Android Studio o Eclipse con ADT) ya que no ofrecen muy buenas interfaces para hacerlo. Si tiene que hacer esta tarea con frecuencia, pero no con tanta frecuencia, recuerda todos los pasos cada vez, entonces puede que no valga la pena el esfuerzo. Pero si es una o dos veces para comenzar, entonces no tiene que volver a hacerlo, no está tan mal.

Opción 2 Enlaces simbólicos

Enlace simbólicamente un archivo fuente común en cada proyecto. Luego, ambos proyectos verán el archivo y los cambios, para que puedan permanecer sincronizados.

Pros : mucho más simple de implementar.

Contras : los enlaces simbólicos no funcionan tan bien con las herramientas de control de código fuente. No multiplataforma (para desarrollo) ya que los enlaces simbólicos son muy diferentes de un sistema operativo a otro. No está claro para un nuevo desarrollador que entra en el proyecto que los cambios en uno se compartan automáticamente con el otro.


Por lo tanto, debido a que la opción de enlaces simbólicos tiene más desventajas que ventajas, generalmente recomendaría la solución de biblioteca compartida para la mayoría de los proyectos. Pero, si su proyecto en particular no necesita las características de la columna de contras del enlace simbólico, entonces probablemente sea más fácil. Depende.

PD: Hay una tercera opción terrible de tener una tercera aplicación de Android completa que ofrece un proveedor de datos de Android que ofrece los valores de cadena. Pero en ese momento debe comunicarse con esa aplicación con cadenas especiales que también deben compartirse, por lo que solo está agregando un paso de abstracción pero no ha resuelto el problema.

Mufasa
fuente
Interesante idea sobre el proveedor. Pero, un paso atrás, estoy de acuerdo. Gracias por reconocer que los editores actuales "no ofrecen muy buenas interfaces para hacer" compartieron la biblioteca de Android, y por los pros y los contras.
Rick Page