Architecture des Plugins pour une application Android? [fermé]

cette QUESTION est passée à https://softwarerecs.stackexchange.com/questions/27841/plugins-architecture-for-an-android-app


je veux implémenter un système de plugin pour une application Open Source , parce qu'elle est devenue vraiment grande, avec de nombreuses fonctionnalités dont seuls quelques utilisateurs ont besoin. Libérer différentes applications n'est pas une bonne solution, car userA veut la fonctionnalité 7 et feature24 tandis que userB veut feature39 et feature24.

Où puis-je trouver un bon exemple d'architecture de plugin?

voici ce que je voudrais qu'un plugin puisse faire:

par exemple, un des plugins doit ajouter un bouton sur un écran particulier, et en cliquant sur ce bouton augmente une valeur dans la base de données de l'application. Ce n'est pas faisable avec les Fournisseurs de Contenu et les Intentions, autant que je sache.

je veux éviter de rendre le code de l'application de base complexe avec des tonnes de crochets partout.

la forme du plugin pourrait être un fichier sur la carte SD, une application, ou n'importe quoi d'autre.

36
demandé sur Community 2012-04-20 06:50:49

3 réponses

j'ai fait un cadre qui fonctionne comme Robo-guice avec certaines de ses principales fonctions de Cio. (Réduisez les codes boilerplate qui chargent les vues / service, etc...)

mais le cœur de ce qui, je crois est la solution à votre problème, est la capacité de charger séparément APK" plugin "fichiers, qui comprend" res "ainsi que <layouts>.xml fichiers. Le fichier <layouts>.xml peut être gonflé indépendamment par les classes de cette APK. C'est-à-dire que vous pouvez charger un CustomView (qui produit sa propre <layout>.xml ) dans une application d'origine/mère. Tout cela se fait sans que L'Application mère sache comment L'interface utilisateur a été gonflée dans le plugin APK.

exemple de ce que je veux dire: J'ai une application de Mapping, le framework va scanner dynamiquement APK installé qui correspond au "contrat" pour un plugin "add-on function", et charge L'interface utilisateur spécifique à celui-ci sur la vue de l'application comme un panneau flottant.

je dirais qu'un framework de plugin pour Android est faisable, comme Android a la plupart, si pas tous les nécessaires construits dans APIs pour accomplir ceci.

ce sont vos amis dans ce domaine de développement de plugin pour Android:

  1. PackageManager (Scan install packages, alias Plugins)
  2. DexClassLoader ( ClassNotFoundException sera une douleur si vous n'utilisez pas le bon ClassLoader btw)
  3. Réflexion Java
8
répondu Cozytrony 2012-08-15 20:46:19

Où puis-je trouver un bon exemple d'architecture de plugin?

Roman Nurik de Google a mis en œuvre un joli cadre de plugins dans son application open source Dash clock . Les plugins eux-mêmes sont des Services qui étendent la classe DashClock Extension dans la classe API et sont installés comme des fichiers APK complètement indépendants avec leurs propres ressources. Il est tout à fait beaucoup de travailler à définir le protocole de communication via L'AIDL, mais il est agréable et propre et fonctionne très bien.

un des plugins doit ajouter un bouton sur un écran particulier, et cliquer sur ce bouton augmente une valeur dans la base de données de l'application.

les parties de la mise en page principale qui peuvent être modifiées par le plugin devront être prédéfinies par l'application de base, et exposées via le protocole de communication. Il devrait être possible pour plugin pour gonfler une mise en page arbitraire, et l'Envoyer à l'application principale, qui pourrait mettre que l'intérieur d'une zone pré-attribuée de sa propre mise en page.

5
répondu Tim Rae 2015-06-29 09:37:11

si vous cherchez simplement une augmentation de la modularité, je vous recommande d'utiliser un récipient d'injection de dépendance tel que PicoContainer , Guice ou Spring .

si vous voulez une architecture enfichable légère, alors optez pour Java Plugin Framework (JPF) .

il vous permet de définir des points d'extension, qui peuvent être mis en œuvre par vos modules. La tâche principale du plug-in framework est de fournir un moyen de regrouper ces modules (comme des pots), qui sont dynamiquement trouvés par l'application de base et donnés comme implémentations du point d'extension.

4
répondu Christopher Oezbek 2012-04-30 01:35:07