Vous êtes ici : InformatiqueProgrammationJavaDévelopper un plugin Eclipse

Développer un plugin Eclipse

eclipse logoEclipse permet d'automatiser certaines phases répétitives dans la gestion du projet : assistants (wizzard), ant, ... . Mais ces procédés ont leur limite, surtout en terme d'intéractivité. Il faut passer alors par le développement d'un plugin.

L'exemple que nous allons étudier est une interface pour adp (Android Debug Bridge). Pour se connecter à un appareil distant, il faut ouvrir un terminal, se rendre dans le répertoire plateform-tools, lancer la commande ./adb connect <remote>, ... 

On va voir comment en quelques lignes de codes, optimiser cette opération.

 

 

Installation

Dans Eclipse, tout est plugin. Ce logiciel a été pensé modulaire dès le début de son développement. On a ainsi à sa disposition un nombre impressionnant d'API qui permettent de développer simplement, ou de même de modifier le comportement par défaut. Ce n'est pas pour rien que le moteur d"Eclipse sert à beaucoup de plate-formes : Java, C++, PHP, Python, Android, ...

Il existe pratiquement autant d'asisistants que de type de plugins, ce qui rend leur développement accessible à tous les programmeurs.

On commence par installer le paquet "Eclipse Plug-in Development Environment" à l'aide de la commande "Install new softwares". Vous le trouverez dans la section "General Purpose Tools".

Création

On démarre l'assisant de création d'un nouveau plugin :

 

 eclipse plugin view 1

Rien de bien particulier ici, si ce n'est qu'il faut donner un nom à notre projet.

eclipse plugin view 2

Maintenant, c'est l'ID qu'il faut renseigner. Bien évidement, il doit être unique sinon Eclipse risque d'être perturbé.

eclipse plugin view 3

On définit le type du plugin. On va créer une vue, qui sera affichée avec les autres dans la partie inférieure droite d'Eclipse.

eclipse plugin view 4

Il faut donner un nom au paquet ainsi q'une catégorie. Elle permet de regrouper plusieurs packages dans la liste de sélection des "Views".

Programmation

L'idée est simple : développer un wrapper pour les options connect, disconnect et devices du programme adb. Et on affiche le résultat dans la vue.

La première chose à faire est de retrouver le chemin d'accès à la commande adb. On utilise pour cela le code suivant :

import com.android.ide.eclipse.adt.internal.sdk.Sdk;

...

String tmp = Sdk.getCurrent().getSdkLocation() + "platform-tools" + File.separator + "adb";
File f = new File(tmp);
if (f.exists()) {
    cmd=tmp;
    //cmdResult="Found adb command : " + cmd;
} else {
    f = new File(tmp+".exe");
    if (f.exists()) {
        cmd = tmp +".exe";
        //cmdResult="Found adb command : " + cmd;
    }
}
if (cmd==null) {
    cmdResult="Can't find adb command : " + cmd;
    return;
}

On fait un appel au SDK d'Android pour avoir sa localisation sur le disque. On effectue ensuite une recherche sur le nom du programme adb, en fonction du système d'exploitation. 

L'assistant nous a créé tout le squelette de l'application et en particulier une classe ViewContentProvider. Celle elle qui est chargée de l'affiichage dans la vue. On lui passe simplement un tableau de chaînes représentant les données à afficher :

public Object[] getElements(Object parent) {
    return screenLines.toArray();
}

Il y a également 3 méthodes chargées d'ajouter des actions aux différentes interface : barre de menu, menu contextuel et menu déroulant.

private void fillLocalToolBar(IToolBarManager manager) {
    manager.add(connect);
    manager.add(disconnect);
    manager.add(new Separator());
    manager.add(devices);
}

La fonction précédente ajoute 3 actions à la barre d'outils de la vue. Les actions permettent à l'utilisatrut d'intéragir avec votre plugin.  On peut maintenant coder le comportement du plugin en fonction des actions :

connect = new Action() {
    public void run() {
        String temp = getServer();
        if (temp!=null) {
            screenLines.clear();
            executeCmd("connect "+temp);
            cmdResult=screenLines.get(0);
            if (!cmdResult.startsWith("connected")) {
                showError(cmdResult);
            }
            screenLines.clear();
            executeCmd("devices");
            cmdResult=screenLines.remove(0);
            viewer.refresh();
        }
     }
 }
connect.setText("Connect");
connect.setToolTipText("Connect to a remote device");
connect.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
getImageDescriptor(ISharedImages.IMG_OBJ_ADD ));

Rien de bien compliqué ici non plus, la majorité du code étant générée par l'assistant : on récupère le nom du périphérique distant, on exécute la commande et on affiche le résultat.

Pour finir, j'ai également utilisé les préférences d'Eclipse : un moyen simple de stocker les choix utilisateurs. 

Déploiement

Des assistants sont disponibles pour gérer un site de mise à jour (site.xml).

On va se contenter de générer un jar, que l'on aura juste à copier dans le répertoire plugins d'Eclipse avant de le démarrer. On lance l'assisant d'export :

eclipse plugin view 10

On sélectionne "Deployable Plug-ins and fragments"

eclipse plugin view 11

Ainsi que le plugin à déployer. Et c'est tout.

Cela génère un jar que l'on copie dans plugins (après avoir arrêter Eclipse). Au prochain démarrage, on a plus qu'à activer la vue :

eclipse plugin view 20

Après avoir cliqué sur le bouton "Rafraichir", la liste des debugers connectés apparaît.

On retrouve les 3 boutons associés aux actions définies dans le code du plugin : connexion, déconnexion et rafraichir. On peut également éffectuer ces opérations avec le menu contextuel.

L'interface de ce plugin pourrait être largement amélioré, en y passant plus de temps. Mais ce n'est pas le but de cet article. Il s'agissait de démontrer qu'en quelques heures, il était possible de coder un plugin qui facilitait la vie du développeur. D'autres exemples pourraient être l'importation de données, un requêteur SQL à une base de données interne, la connexion a une interface Rest, ...

Téléchargement

Le jar du plugin ( à copier dans le répertoire plugins d'Eclipse ) :

Les sources :

 

Ajouter un Commentaire


Code de sécurité
Rafraîchir

Free business joomla templates