¿Arquitectura de complementos para una aplicación de Android?

ESTA PREGUNTA HA MOVIDO A https://softwarerecs.stackexchange.com/questions/27841/plugins-architecture-for-an-android-app


Quiero implementar un sistema de complemento para una aplicación de código abierto , porque se ha convertido en muy grande, con muchas características que sólo unos pocos usuarios necesitan. Liberar diferentes aplicaciones no es una buena solución, porque userA quiere feature7 y feature24 mientras que userB quiere feature39 y feature24.

¿Dónde puedo encontrar un buen ejemplo de una arquitectura de complemento?

Esto es lo que me gustaría que un plugin pudiera hacer:

  • Redefinir el diseño de una pantalla en particular ( XML de carga desinflada ?)
  • Redefinir un método de una clase ( load dex class ?, AOP ?)

Por ejemplo, uno de los complementos debe agregar un botón en una pantalla en particular y al hacer clic en este botón se incrementa un valor en la base de datos de la aplicación. Esto no es factible con los proveedores de contenido y los intentos, por lo que sé.

Quiero evitar que el código de la aplicación principal sea complejo con toneladas de anzuelos por todas partes.

La forma del complemento podría ser un archivo en la tarjeta SD, una aplicación o cualquier otra cosa.

3 Solutions collect form web for “¿Arquitectura de complementos para una aplicación de Android?”

He hecho un marco que funciona como Robo-guice con algunas de sus principales funciones IoC. (Reducir en los códigos de boilerplate que carga vistas / servicio etc …)

Pero el núcleo del cual, creo que es la solución a su problema, es la capacidad de cargar archivos APK separados "plugin", que incluye "res", así como <layouts>.xml . El archivo <layouts>.xml puede inflarse independientemente por las clases dentro de ese APK. Es decir, puede cargar un CustomView (que infla su propio <layout>.xml ) en una aplicación de origen / principal. Todo esto se hace sin que el APK de la aplicación principal conozca cómo se infla la interfaz de usuario en el complemento APK.

Ejemplo de lo que quiero decir: Tengo una aplicación de mapeo, el marco explorará dinámicamente APK instalado que coincida con el "contrato" de un complemento de función "add-on" y cargue la interfaz de usuario específica en la vista de la aplicación como un panel flotante .

Yo diría que un marco de complemento para Android es capaz de hacer, ya que Android tiene la mayoría si no todos los necesarios construidos en API para lograr esto.

Estos son tus amigos en esta área de desarrollo de complementos para Android:

  1. PackageManager (paquetes de instalación de escaneo, aka complementos)
  2. DexClassLoader ( ClassNotFoundException será un dolor si no usas el btw correcto de ClassLoader )
  3. Reflexión de Java

¿Dónde puedo encontrar un buen ejemplo de una arquitectura de complemento?

Roman Nurik de Google ha implementado un bonito framework de complementos en su reloj de escritorio de aplicaciones de código abierto. Los complementos en sí mismos son Servicios que amplían la clase DashClockExtension en la API y se instalan como archivos APK completamente independientes con sus propios recursos. Es bastante trabajo definir el protocolo de comunicación a través de la AIDL, pero es agradable y limpio y funciona muy bien.

Uno de los complementos debe agregar un botón en una pantalla en particular y al hacer clic en este botón se incrementa un valor en la base de datos de la aplicación.

Las partes del Layout principal que pueden ser modificadas por el complemento deberán ser predefinidas por la aplicación principal y expuestas a través del protocolo de comunicación. Debería ser posible que el complemento infle un diseño arbitrario y lo envíe a la aplicación principal, lo que podría ponerlo dentro de un área preasignada de su propio diseño.

Si usted acaba de ir para un aumento en la modularidad, yo recomendaría el uso de un contenedor de inyección de dependencia como PicoContainer , Guice o Spring .

Si desea una ligera plug-in de arquitectura, a continuación, vaya para Java Plugin Framework (JPF) .

Le permite definir puntos de extensión, que pueden ser implementados por sus módulos. El trabajo principal del framework de plug-in es proporcionar una forma en la que puede agrupar estos módulos (como jarras), que se encuentran dinámicamente en la aplicación principal y se dan como implementaciones del punto de extensión.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.