La meilleure solution pour tester une application mobile reste encore de le faire sur de vrais smartphones. Cependant, comment faire pour rendre accessible l’application à un panel de testeurs et faire en sorte qu’elle soit mise à jour au fil des développements / correctifs ?

Le Google Play Store offre la possibilité de publier une application en mode Beta et Alpha. Des groupes d’utilisateurs sont définis afin de données accès à ces versions de l’application. Ensuite, à l’aide de Jenkins, on génère un APK signé et on le publie sur le Store.

Contexte

L’application prise en exemple dans ce tutoriel est basée sur Ionic. Ce framework permet de gérer plusieurs plateformes facilement(Android, iOS…). Ionic étant basé sur Cordova, le processus de génération et de signature de l’APK est très similaire pour les applications utilisant PhoneGap / Cordova.

Configuration

Avant de pouvoir créer notre APK, il faut configurer le serveur hébergeant Jenkins. Pour cela on a besoin d’installer les éléments suivant :

  • SDK Android : après l’installation, il faut lancer l’application “Android SDK Manager” et télécharger :
    • Android SQK Tools
    • Android SDK Platform-tools
    • SDK Plaform de la version API 19
  • Ionic

Dans la page de configuration de Jenkins, ajouter la variable d’environnement “ANDROID_HOME” et mettre en valeur le chemin du dossier contenant le SDK.

Avec Ionic, il y a plusieurs dossiers qui sont exclus du repository (Git/SVN), comme le dossier qui contient les plugins et celui des différentes plateformes (Android, iOS). Cependant, ces données sont nécessaires pour la création de l’APK. J’ai donc ajouté une liste de taches Ant pour installer tout ce qu’il faut après avoir récupéré les sources. La configuration Ant se trouve dans un fichier build.xml à la racine des sources. Ci-dessous un exemple :

Nous allons créer deux  jobs Jenkins, le premier sert à récupérer les sources, initialiser Ionic et générer l’APK; le second signera l’application puis la publiera. Ils utilisent tous les deux le même répertoire de travail.

Génération APK

Créez un jobs et réalisez les tâches suivantes :

  • Choisir le système de versionning (Git, Subversion…)
  • Paramétrer le déclenchement du build, par exemple tous les jours à minuit
  • Ajouter une étape Ant avec en cible “prepare” avec en paramètre le numéro de la nouvelle version de l’application
  • Déclencher le second build à la fin de celui-ci

La création de l’APK est faite par la tâche Ant lorsque la commande “ionic build android” est exécutée. Plutôt que de spécifier à la main le numéro de version, on peux utiliser le plugin Version Number qui gère ça très bien.

Version number

Signer APK

Cette étape est la plus complexe. Dans un premier temps, j’ai suivi le guide d’Ionic (paragraphe “Android Publishing”) pour signer l’application depuis mon poste de développement. Cela permet de générer le keystore qui sera ensuite utilisé par Jenkins. Le fichier .keystore est placé dans le dossier “secrets” de Jenkins.

La signature de l’application est faite en ajoutant une étape Ant avec en cible “release” et en paramètre le mot de passe du keystore, ci-dessous le détail à ajouter au fichier build.xml

Publication

Le processus est réalisé à l’aide du plugin Jenkins Google Play Android Publisher Plugin. L’installation est assez complexe, mais très bien détaillée sur la page du plugin. Une fois terminé, il suffit d’ajouter une action à la suite du build.

Publication android app

 

Pour aller plus loin, on peut ajouter l’APK au repository et créer un tag afin de conserver l’historique des versions. Dans mon cas, j’utilise Git et j’ai rencontré un bug avec l’étape qui crée le tag. Il semblerait qu’il ne soit pas possible d’avoir dans le nom du tag des points, cela n’est pas pratique si l’on souhaite avoir le numéro de version. Pour contourner le problème, la création du tag est faite en exécutant une liste de commandes :