Accueil > Non classé > Android pour l’entreprise – 3 – Déploiement hors market

Android pour l’entreprise – 3 – Déploiement hors market

Cet article est la suite de Android pour l’entreprise – 2 – Vous habitez chez vos parents ?. Il appartient à la série Android pour l’entreprise, dont le fil conducteur est la réalisation d’une application Android d’annuaire d’entreprise : YMCA.Logo YMCA

Je souhaiterai aujourd’hui traiter d’une problématique essentielle à la réalisation d’applications mobiles pour l’entreprise : le déploiement et la mise à jour des applications.

Principe des markets

Sur un téléphone grand public tel que l’Iphone, l’installation et la mise à jour d’application sont réalisées via une plateforme centrale utilisée par tous les terminaux, l’AppStore. Sur Android, son équivalent est l’Android Market.

android_market_app_store

Ces plateformes permettent de rendre une application accessible très simplement au plus grand nombre. Elles gèrent en outre tous les aspects monétiques, permettant ainsi aux développeurs d’être rémunérés, en prélevant bien sûr une commission.

De plus, les gestionnaires de la plateforme ont un droit de regard sur les applications distribuées, et les utilisateurs peuvent porter un jugement et une note sur ces applications.

Markets grands public et applications d’entreprise ne font pas bon ménage

Si ce principe a de très nombreux avantages pour la distribution d’applications au grand public, c’est tout le contraire pour les applications d’entreprise :

  • Une entreprise ne souhaite pas voir son application diffusée au plus grand nombre, uniquement aux employés autorisés.
  • Une entreprise ne souhaite pas dépendre d’un tiers qui a les plein pouvoirs pour décider d’autoriser ou non une application.
  • Une entreprise ne souhaite pas mettre en place de paiement pour obtenir une application, ni payer des frais de dossier pour rendre l’application disponible.

Que propose l’Iphone pour remédier à ces problématiques ? A ma connaissance, pas grand chose. “The best phone for business” adresse uniquement des besoins standard (Exchange, divers protocoles supportés, possibilités de restreindre l’usage). Rien sur la création et le déploiement d’applications spécifiques au métier (ou presque : il est possible d’y parvenir via ITunes et un cable usb – systématiquement, même pour les mises à jour – et en payant 300 dollars).

Et c’est là qu’Android marque sa différence. Il est tout à fait possible de déployer et mettre à jour automatiquement une application au sein d’un parc de téléphones Android, sans passer par l’Android Market. C’est ce que je vais vous présenter aujourd’hui.

Principe général

Installation initiale

Il existe deux manières d’installer une application sans passer par un market :

Il est aussi tout à fait envisageable de créer une application de market “privé” spécifique à l’entreprise. Cette application devra être installée de l’une des deux manières décrites ci-dessus. Cependant, une fois en place, elle pourra permettre de télécharger et déployer d’autres applications sur le téléphone, à distance, en utilisant les éléments techniques que je vais vous présenter.

Notez qu’il est nécessaire d’autoriser au préalable l’installation d’applications non issues du market :

Menu > Settings > Applications > Cocher "Unknown Sources"

Mise à jour de l’application

Le principe est simple :

  1. Mettre en place un web service permettant de savoir si une nouvelle version est disponible.
  2. L’application appelle régulièrement ce web service (par exemple à chaque démarrage).
  3. Dès qu’une nouvelle version est disponible, l’application la télécharge depuis le serveur.
  4. Une fois la nouvelle version téléchargée, l’application lance un Intent d’installation de l’application, en précisant le chemin d’accès.

Application Update

Solution technique

Il existe de nombreuses manières d’implémenter la gestion des versions d’une application. Voici par exemples quelques questions permettant de cerner le besoin :

  • Y a t’il des mises à jour obligatoires et d’autres facultatives ? Ou encore une mise à jour à réaliser avant une deadline ?
  • Propose t’on plusieurs versions au téléchargement ?
  • Quelle politique de reprise sur erreur met-on en place ?
  • La vérification et le téléchargement de mises à jour ont-ils lieu en tâche de fond, pendant le fonctionnement de l’application ? Dans un service ? Au démarrage de l’application ?
  • Doit-on accompagner la mise à jour d’informations complémentaires sur ce qu’apporte une mise à jour ?

Voici les briques techniques qui vous permettront de mettre en place une solution adaptée à vos besoins.

Déterminer le numéro de version de l’application courante

Si rien ne vous empêche de gérer à votre manière les numéros de version de votre application, il est aussi tout à fait possible d’utiliser les numéros de version inscrits dans le fichier AndroidManifest.xml :


1
2
3
4
5
6
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.excilys.ymca"
  android:versionCode="2"
  android:versionName="2.0">
[...]
</manifest>

Et voici le code pour accéder aux informations de version :


1
2
3
4
5
6
7
8
9
Context context = ? // A vous de récupérer un Context ;-)
PackageInfo packageInfo;
try {
    packageInfo = context.getPackageManager().getPackageInfo(getPackageName(), 0);
} catch (NameNotFoundException e) {
    throw new IllegalStateException("Should not happen", e);
}
int versionCode = packageInfo.versionCode;
String versionName = packageInfo.versionName;

Vérifier que le téléphone autorise l’installation d’applications tierces

Autant éviter que l’installation échoue lamentablement si le paramètre “Unknown sources” a été décoché.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Context context = ? // A vous de récupérer un Context ;-)
int allowNonMarket = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.INSTALL_NON_MARKET_APPS, 0);
if (allowNonMarket == 0) {
    new AlertDialog.Builder(context)
            .setTitle("Mise à jour non autorisée !")
            .setMessage("Merci de mettre à jour la configuration de votre téléphone")
            .setCancelable(false)
            .setPositiveButton("Lancer les settings", new OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    Intent intent = new Intent();
                    intent.setAction(Settings.ACTION_APPLICATION_SETTINGS);
                    context.startActivity(intent);
                }
            })
            .create()
            .show();
}

Télécharger la mise à jour sur le téléphone

Le fichier .apk va être téléchargé au sein du répertoire de l’application. Afin de permettre à l’application d’installation de lire ce fichier, il est nécessaire de le rendre accessible en lecture aux autres applications.


1
2
3
4
5
6
7
8
Context context = ? // A vous de récupérer un Context ;-)
String apkFileName = "myApplication-vXX.apk";

InputStream inputStream = new URL("http://myserver/"+apkFileName).openStream();

OutputStream outputStream = context.openFileOutput(apkFileName, Context.MODE_WORLD_READABLE);

copy(inputStream, outputStream); //Méthode qui copie l'InputStream dans l'OutputStream

Lancer l’Intent de mise à jour

Il suffit de déterminer le chemin d’accès au .apk, puis de demander son installation via un Intent.


1
2
3
4
5
6
7
8
Context context = ? // A vous de récupérer un Context ;-)
File apkFile = context.getFileStreamPath(apkFileName);

Intent i = new Intent();
i.setAction(Intent.ACTION_VIEW);
i.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");

context.startActivity(i);

Implémentation au sein de YMCA

La mise en place des mises à jour automatiques de YMCA suit un cas d’utilisation simple :

  • la mise à jour est déclenchée au lancement de l’application,
  • si une version plus récente existe, celle-ci est immédiatement téléchargée et installée,
  • sinon, l’activité de liste des contacts est affichée,
  • si une erreur survient, un message d’erreur est affiché, proposant de continuer ou de quitter.

Le numéro de la version la plus récente doit être disponible sous forme de texte à l’adresse http://localhost/YMCA-version.txt . L’application Android fait un appel serveur pour obtenir ce numéro, le compare à son numéro de version courant. S’il est supérieur, elle télécharge et installe le fichier http://10.0.2.2/YMCA-vX.apk, avec X le numéro de version.

Je vous laisse le soin de consulter les sources du projet si vous souhaitez rentrer dans les détails. Vous remarquerez l’utilisation de l’attribut android:noHistory="true" pour configurer l’activité de mise à jour de l’application :


1
2
3
4
5
6
7
8
9
10
       <activity
            android:name=".activity.UpdateApplicationActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:noHistory="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

Cela permet de ne pas garder l’activité au sein de la pile de navigation. Autrement dit, appuyer sur le bouton back depuis l’activité suivante ne fera pas revenir à l’activité de mise à jour, mais directement à la page de démarrage.

Comme d’habitude :

Notez que comme promis dans l’article précédent, l’envoi d’email a été implémenté dans cette nouvelle version. L’article suivant, quant à lui, traite d’un sujet passionnant : l’injection de dépendance.

Conclusion

Cet article nous aura permis de mettre en exergue l’un des nombreux avantages à utiliser Android pour réaliser des applications mobiles d’entreprise. En effet, les processus de déploiement et de mise à jour des applications sont souvent essentiels aux yeux des décideurs.

Les sociétés du groupe Excilys disposent d’une expertise dans la réalisation d’applications Android spécifiques aux entreprises et à leur métier. Vous souhaitez intégrer la mobilité à votre système d’information ? N’hésitez pas à prendre contact avec nous !

Share
  1. 09/01/2010 à 11:27 | #1

    Très bon article ! Je découvre ton blog avec intérêt.

    Sinon, tu ne penses pas que l’avenir des appli mobiles pour entreprise passent par le web ?

    Avec le navigateur webkit qui gère le HTML5 (offline, sqlite db etc..), inclut dans la plupart des bon smartphones (iPhone, Android, Palm pre etc..), il est possible de faire des applications d’entreprise qui non rien à envier aux appli natives.

    Et là, le problème des mises à jour et de l’indépendance par rapport à un market est résolu !

  2. Pierre-Yves RICAU
    09/01/2010 à 19:51 | #2

    Merci Samuel. Une précision : il ne s’agit pas de “mon” blog, mais du blog de l’entreprise pour laquelle je travaille. Tu noteras par ailleurs la présence d’articles écrits par différents consultants au sein de ce blog ;-) .

    Ta remarque est pertinente, mais en l’état actuel des choses je ne pense pas que les applications mobiles d’entreprise se doivent d’être des applis Web, voici mon point de vue :

    Du côté des avantages de l’appli web, tu l’as dit :

    – HTML 5 = des applications plus riches, disposant d’un mode offline et d’un stockage des données en local (je ne connais pas encore bien tous les détails techniques à ce sujet)
    – On écrit l’application Web une fois, et elle est utilisable sur tous les types de smartphones récents
    – Le déploiement d’une nouvelle version est simplifié, et immédiat
    – HTML = main d’oeuvre disponible, on est sûr de trouver facilement des développeurs. Et pour pas cher.

    Cependant :
    – Les designs web doivent être adaptés à chaque téléphone => 1 développement par type de téléphone
    – Les entreprises souhaitant déployer des applications mobiles fournissent les téléphones professionnels, et sont donc à même de choisir le modèle (et n’ont pas à faire du développement multi plateformes).
    – Quid de la migration des données stockées en local lors de la mise à jour de l’application Web (c’est une problématique existant aussi au sein des applications natives) ?
    – Pour le moment, les performances sont bien plus importantes du côté des applications natives que des applications Web. Exemple concret : une application utilisant Google Maps et affichant un certain nombre d’informations en surimpression est clairement bien plus efficace en natif (en tout cas sur Android).

  3. jérôme
    08/06/2011 à 17:04 | #3

    Très bon tuto !

    J’aimerais savoir si il est possible de réaliser la même chose mais de façon transparente pour l’utilisateur, sans afficher l’activity de validation?
    Comme pour certaines applis, google Maps en autre.

  4. Test
    09/06/2011 à 11:32 | #4

    A priori non, en tout cas pas sans autorisations particulières, car cela deviendrai une faille de sécurité. Il doit être possible de modifier l’application qui réalise les installations (dont les sources sont disponibles parmi les sources Android), mais il faut probablement un accès root sur le téléphone.

  5. jérôme
    09/06/2011 à 16:51 | #5

    @Test
    Je suis actuellement sur les sources Android mais je n’ai pas encore trouvé.
    Quelqu’un a déjà réalisé l’opération?

    Le problème c’est que l’accès root peut mettre en danger la garantie du téléphone. Et il faut rooter chaque téléphone…

  6. 30/10/2012 à 12:24 | #6

    Salut les gars,

    Merci pour le tuto, très intéressant. Pour info, je cherche à faire la même chose que les commentaires précédents, si quelqu’un a trouvé… ;)

  7. 08/03/2017 à 10:20 | #7

    I love this post and I love your comment Brock_lee!! In a way, this is topical to what I’m doing at work One aspect of my work is writing content for one company’s blogs and they just had me start a blog about the history and meaning of Just got my first gemstone piece published last night and I must say, my appreciate for stones and rocks has already greatly

  1. 13/01/2010 à 03:30 | #1
  2. 22/05/2015 à 05:27 | #2
  3. 26/05/2015 à 14:56 | #3