Open menu

1°/ Le développement mobile en JS

Il existe à l'heure actuelle plusieurs approches pour créer des applications mobiles à l'aide d'environnements JS. On peut globalement les répartir en 3 catégories :

  • celles qui permettent de produire une application totalement native. Dans le cadre de vuejs, on peut citer, vue-native (qui produit du code pour react-native) et nativescript-vue,
  • celles dites hybrides, qui utilisent une webview pour simuler un navigateur et exécuter le code de l'application, mais en utilisant des plugins qui permettent d'accéder nativement au matériel. Les principaux plugins sont capacitor et cordova et les environnements les plus connus sont ionic-vue et quasar.
  • celles qui utilisent uniquement les capacités de navigateurs modernes pour accéder au matériel, mais qui proposent tout de même une expérience utilisateur similaire aux application natives, grâce à la gestion d'un cache pour les ressources, ce qui permet d'utiliser l'application hors-ligne. On appelle ce type d'application PWA, pour Progressive Web Application. Il existe un plugin pwa pour vue.

 

Remarque : grâce à capacitor, il est possible de mixer hybride et pwa puisqu'il est capable de détecter si le matériel est accessible nativement et si ce n'est pas le cas, d'utiliser les capacités du navigateur.

 

  • Ce TD est découpé en 2 parties : la première consacrée à quasar, couplé à capacitor, et la deuxième consacrée à ionic + capacitor.
  • Ces deux environnements sont relativement identiques dans la façon de créer une application :
    • on utilise un set de composants graphiques propre à l'environnement,
    • on utilise android studio pour tester dans un émulateur ou bien sur un téléphone réel l'application,
    • on peut faire du développement "interactif", comme avec une application web SPA classique servie par un serveur web de développement,
  • Il y a malgré tout des différences entre ces 2 solutions :
    • ionic est plutôt pensé pour développer en typescript, et plutôt js "classique" pour quasar,
    • quasar propose un visuel de composants graphique unique, plutôt dans le style material design (donc orienté android), alors que ionic propose un look différent selon l'architecture cible.
    • créer un projet ionic-vue est un peu plus simple car il y a des installations automatiques. En revanche, on peut moins facilement configurer la création du projet que sous quasar.
    • quasar permet à priori de créer bien plus de types d'application que ionic qui est avant tout fait pour des applications sur mobile (même s'il peut être utilisé pour d'autres architecture).
    • quasar est plus vieux, plus stable, mieux documenté, plus fourni en composants que ionic-vue.

 

2°/ Mise en place logicielle préalable

 

2.1°/ Installation d'android studio

 

  • Quelle que soit l'environnement choisi, il faut auparavant installer tout ce qui concerne les plateforme natives, donc xcode ou android studio.
  • Ce qui suit concerne uniquement android, qui ne pose aucune contrainte matérielle telle que avoir un mac.

Remarque : les machines du département sont déjà installées avec la configuration décrite ci-dessous. Vous ne devez donc suivre ces étapes que pour faire l'installation sur une machine personnelle.

  • La première étape consiste à télécharger Android-studio : http://developer.android.com/studio
  • Vous obtenez une archive avec un nom du type : android-studio-panda1-patch1-linux.tar.gz
  • Dans un terminal, en tant que root, lancez les commandes suivantes :
mv android-studio-panda1-patch1-linux.tar.gz /usr/local/
cd /usr/local/
tar zxf android-studio-panda1-patch1-linux.tar.gz
  •  Cela crée un répertoire /usr/local/android-studio, dans lequel se trouve les binaires de l'application
  • Il faut maintenant configurer le logiciel pour un utilisateur "normal", notamment afin de télécharger le Sdk.

 

  • Dans un terminal, allez dans votre home directory et lancez : /usr/local/android-studio/bin/studio.sh
  • L'installateur affiche une série de fenêtre pour choisir la configuration. après avoir accepté la licence, l'installation du Sdk se lance.
  • Cela crée un répertoire Android/Sdk dans votre home directory.
  • Il faut maintenant télécharger différents outils et plateformes de développement 
  • Dans la fenêtre d'accueil d'android studio, choisir "Customize" puis "All settings", comme indiqué dans l'image ci-dessous

install androidsdk 001

 

  • Dans la fenêtre de configuration, aller dans "Appearance & Behaviour" > "System settings" > "Android SDK", puis cliquer sur l'onglet "SDK Platforms" comme indiqué sur l'image ci-dessous.
  • Ensuite, sélectionner certaines plateformes à installer. Dans la figure ci-dessous, les versions 10 et 11 sont cochées, mais pour créer une application quasar 2.5+capacitor 7, il est parfaitement possible de prendre une version bien plus récente, telle que la 16.0
  • ATTENTION ! Si vous prenez une version très récente, il n'est pas obligatoire que votre application fonctionne sur tous les téléphone. Si vous voulez créer une application plus "compatible", notamment avec de mobile qui ont une dizaine d'année,il faudra installer des versions de plateforme plus anciennes (V9 voire V8)

install androidsdk 002

 

  • Cliquez ensuite sur l'onglet "SDK Tools" et si besoin cochez les cases Android SDK Build-Tools, Android SDK command-line Tools, Android Emulator, Android SDK Platform-Tools, comme indiqué dans l'image ci-dessous.
  • NB : les numéros de version de la figure sont "anciens", les actuels étant plus "haut" (par ex, 36.4.9 pour l'émulateur)

install androidsdk 003

 

  • Cochez la case "Show Package Details" et vérifiez qu'il y a bien une version "récente mais pas trop" des Build-Tools qui est cochée (par ex, la 33.0.1 dans la figure, mais surtout pas les rc1). Actuellement, la version installable est 36.1.0 et elle fonctionne avec quasar 2.5+capacitor 7. Cependant, si vous installez une version plus ancienne de quasar et/ou capacitor, il est possible qu'il faille un environnement de build plus "ancien" (comme par ex, le 30.0.3 dans la figure)

install androidsdk 004

 

  • Cliquez ensuite sur "Apply" pour valider les choix. Après acceptation de la licence, les téléchargements commencent.

 

  • Il faut à présent créer au moins un simulateur de téléphone.
  • Pour cela, fermer la fenêtre de configuration pour revenir à l'écran d'accueil et cliquer sur "Project" puis sur l'icône paramètres en haut à droite (3 points verticaux) et choisir "Virutal Device Manager", comme indiqué sur li'mage ci-dessous.

install androidsdk 005

 

  • Dans le fenêtre, cliquer sur le bouton "Create Device", puis choisir un modèle, par exemple le Pixel 2, comme indiqué dans l'image ci-dessous

install androidsdk 006

 

  • Cliquer sur "Next", puis choisir un OS pour le simulateur. Il est fort possible que l'OS ne soit pas déjà disponible, auquel cas, il faut le télécharger en cliquant sur la flèche à côté du nom, comme indiqué dans l'image ci-dessous.

install androidsdk 007

 

  • Une fenêtre s'ouvre puis le téléchargement commence.
  • Une fois terminé, terminer la configuration, notamment en donnant un nom au simulateur, son orientation, etc.
  • Une fois la création terminée, le simulateur est disponible dans la liste de l'écran d'accueil.
  • Pour vérifier que tout fonctionne, cliquez sur la flèche pour lancer l'émulateur. Une fenêtre ressemblant au téléphone apparaît, puis après quelques dizaines de secondes, l'écran d'accueil android s'affiche.
  • Il est ensuite possible d'interagir comme sur un téléphone réel, bien que certaines opérations fassent "ramer" l'émulateur.

 

  • La dernière étape consiste à indiquer au système d'exploitation les chemins d'accès au SDK de android-studio.
  • Pour cela, il faut éditer le fichier .bashrc (ou .profile, selon votre cas) et ajouter à la fin, quelque chose du genre :
################################
# Android SDK
###############################
export ANDROID_HOME="/home/toto/Android/Sdk"
export ANDROID_SDK_ROOT="/home/toto/Android/Sdk"
export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/emulator:/usr/local/android-studio/bin
  •  Il faut bien entendu remplacer /home/toto par le chemin vers votre propre répertoire Android/Sdk

 

2.2°/ Installation de gradle

ATTENTION: Pcette étape n'est réellement nécessaire que s'il y a un problème avec le plugin gradle d'Android Studio, ce qui arrive malheureusement assez souvent, par exemple dès que l'on fait une mise à jour de ce plugin !

  • Quand malheureusement, le plugin gradle installé avec le sdk android est dans une version trop récente par rapport au projet généré par quasar, le plus simple est d'utiliser une version "externe" de gradle, en l'installant.
  • Pour cela, d'aller sur https://gradle.org/releases/ et de télécharger l'archive binary-only de la dernière version (par exemple 9.3.1)  ou supérieure.
  • En tant que root, copier l'archive téléchargée gradle-9.3.1-bin.zip dans /usr/local et la décompacter.
  • Ensuite, il suffit d'ajouter le chemin d'accès à l'exécutable de gradle dans son .bashrc :
################################
# Gradle
###############################
export PATH=$PATH:/usr/local/gradle-9.3.1/bin

 

  • Ensuite, il faut lancer android studio, aller dans les paramètres (menu file-> settings), puis configurer gradle pour utiliser une version locale.
  • Cliquer sur Build,Execution, ... -> Build Tools -> Gradle, puis dans la fenêtre choisir "Local Installation" dans la liste "Distribution". Dans le champ de saisie, taper le chemin d'accès où gradle a été installé (/usr/local/gradle-9.3.1)

2.3°/ Installation des paquets node pour quasar

  • Il suffit d'utiliser npm pour faire un installation globale :
npm install -g @quasar/cli

 

2.4°/ JDK/JRE Java

  • Android studio s'installe directement avec un JDK/JRE Java et par défaut les projets vont l'utiliser.
  • Il est cependant possible d'utiliser un JDK "externe" déjà installé en réglant les paramètre du projet android.
  • Dans ce cas, la documentation de capacitor 7 précise que le JDK minimal est le 21.

 

3°/ Création d'un projet quasar

3.1°/ Initialisation du projet

  • Le plus simple est de partir d'un projet d'exemple créé avec les commande quasar :
npm init quasar
  •  Le générateur de projet vous pose différentes questions, notamment sur les versions des différents environnements/outils à utilisé
  • Pour un projet basique, il suffit de prendre la réponse déjà sélectionnée, exceptée pour les noms de répertoire/projet/application. Il est également possible de spécifier des plugins à installer tels que pinia.
  • Une fois le projet créé, vous pouvez aller dans son répertoire et constater que l'on retrouve à peu près la même structure qu'un projet vuejs classique, avec un router.
  • Il y a quelques différences dans les noms de certains répertoires, et bien entendu le fait que les composants sont définis en utilisant la nouvelle syntaxe introduite par la v3 du vujes.
  • Il est cependant toujours possible d'utiliser des composants écrits avec la syntaxe de la v2.
  • Pour la définition de l'interface utilisateur, quasar repose sur un ensemble de composants relativement semblable à vuetify, y compris dans leur mise en oeuvre.
  • Le placement des composants est un peu différent, mais se base quand même sur une logique flexbox, avec des noms de classe css qui permettent de définir des lignes et des colonnes de composants.
  • Pour tous les détails de l'API quasar : https://quasar.dev/

3.2°/ Ajouter des plugins capacitors 

  • Si le projet fait appel à des plugins capacitor tels que la caméra, il FAUT également les installer MANUELLEMENT. Par exemple, pour utiliser la caméra :
npm install @ionic/pwa-elements
npm install @capacitor/camera

ATTENTION :

  • Il est possible que l'installation d'un plugin particulier de capacitor plante parce que quasar a installé le "kit de base" de capacitor dans une version plus ancienne que l'a courante (actuellement v8).
  • Pour savoir quelle est la version du "kit de base", il suffit de regarder le contenu du fichier package.json dans src-capacitor. Si on y trouve la ligne "@capacitor/core": "^7.0.0", alors c'est la version 7 de capacitor qui est installée.
  • Dans ce cas, pour installer le plugin camera, il faut utiliser : npm install @capacitor/camera@latest-7

3.3°/ Tester l'application SPA dans un navigateur

  • Pour lancer un serveur de développement et tester l'application :
quasar dev
  • Normalement, cela lance directement le navigateur avec l'URL servie (par défaut http://localhost:9000)
  • Comme pour les projets classiques, on peut modifier le code et voir en direct les changements.

3.4°/ Construire l'application SPA pour la production

  • Pour construire l'application :
quasar build
  • Cette commande crée un répertoire dist/spa à la racine du projet, avec les sources produits par la compilation.
  • Pour tester cette version de production :
// on suppose que l'on est à la racine du projet
cd dist/spa
quasar serve

 

3.5°/ Et electron ?

  • Quasar est très versatile puisqu'il permet de faire du dev. en vue de construire l'application sous forme d'un exécutable, grâce à electron.
  • Pour tester l'application :
quasar dev -m electron
  • Et pour construire l'executable :
quasar build -m electron
  • Cette commande crée un répertoire dist/electron à la racine du projet, avec les produits de la compilation.
  • Sous linux, le sous-répertoire Packaged contient la version prête à être exécutée.

 

3.6°/ Tester l'application en mode mobile android avec capacitor

  • Il est possible d'ajouter capacitor et les plugins que l'on veut, avant de lancer un serveur de dev. Pour cela :
quasar mode add capacitor

Remarque : si ce n'est déjà fait, cette commande va créer un répertoire src-capacitor à la racine du projet, avec tout le nécessaire pour créer une application hybride.

ATTENTION : 

  • Si le projet fait appel à des plugins capacitor tels que la caméra, il FAUT ÉGALEMENT LES INSTALLER dans le répertoire src-capacitor. Par exemple, pour utiliser la caméra :
cd src-capacitor
npm install @ionic/pwa-elements
npm install @capacitor/camera@latest-7

 

Ensuite, il faut lancer la création de l'application pour android avec :

quasar dev -m capacitor -T android
  • Lors du premier lancement, un certain nombre de paquets vont être téléchargés, et un projet android studio créé.
  • Ensuite android studio se lance automatiquement et vous demande s'il doit "faire confiance" à ce projet.
  • En cliquant sur "Trust", le projet est ouvert.
  • Android studio va télécharger les paquets nécessaires et créer une configuration d'exécution. Il est ensuite possible de la lancer avec le simulateur de mobile de votre choix.
  • Si vous modifiez un fichier source, les changements provoquent une recompilation et le résultat apparaît directement dans android studio.

3.7°/ Construire l'application mobile pour la production

  • Pour construire l'application :
quasar build -m capacitor -T android
  • Cette commande crée un répertoire dist/capacitor à la racine du projet, avec un sous-sous... répertoire contenant le fichier .apk d'installation.
  • Attention, ce fichier est à la base non-signé et ne pourra pas forcément être installé sur un mobile.
  • Pour le rendre disponible sur play store, suivre les indications données ici :  https://quasar.dev/quasar-cli-webpack/developing-capacitor-apps/publishing-to-store

 

4°/ Exemples

4.1°/ Sources

 

 

  • Pour illustrer les plugins de capacitor, il existe également de nombreux tutoriels, notamment sur le site même de capacitor : https://capacitorjs.com/docs/apis
  • Capacitor est globalement fait pour être indépendant de l'environnement de développement. Il est donc facile d'adapter les exemples à une application quasar.
  • On peut même utiliser le très bon exemple provenant du framework ionic :https://ionicframework.com/docs/vue/your-first-app
  • En effet, à part les composants ionic qui changent, la partie capacitor est globalement la même.

 4.2°/ mini tutoriel avec prise de photo

  • lancer npm init quasar pour créer un projet.
  • la suite suppose que le répertoire du projet est testquasar.
  • lancer les commandes suivantes :
cd testquasar
npm install @ionic/pwa-elements
npm install @capacitor/camera
quasar mode add capacitor
cd src-capacitor
npm install @ionic/pwa-elements
npm install @capacitor/camera
  • Editer le fichier quasar.config.js qui se toruve à la racine du projet, et trouver un champ boot. Modifier ce champ avec :
    boot: [ 'capacitor' ],
  •  Créer un fichier src/boot/capacitor.js avec dedans :
import { defineCustomElements } from '@ionic/pwa-elements/loader'

export default () => {
  defineCustomElements(window)
}
  •  Editer le fichier src/layouts/MainLayout.vue :
    • vers la fin du template :
    <q-page-container>
        <q-btn color="primary" label="Get Picture" @click="captureImage" />
        <img :src="imageSrc">     
      <router-view />
    </q-page-container>
    • au début de la partie <script setup>, ajouter les imports :
import { Camera, CameraResultType } from '@capacitor/camera'
    • et à la fin, modifier/ajouter le code suivant :
const leftDrawerOpen = ref(false)
const imageSrc = ref('')
// functions
async function captureImage () {
  const image = await Camera.getPhoto({
    quality: 90,
    allowEditing: true,
    resultType: CameraResultType.Uri
  })
  // The result will vary on the value of the resultType option.
  // CameraResultType.Uri - Get the result from image.webPath
  // CameraResultType.Base64 - Get the result from image.base64String
  // CameraResultType.DataUrl - Get the result from image.dataUrl
  imageSrc.value = image.webPath
}
function toggleLeftDrawer () {
  leftDrawerOpen.value = !leftDrawerOpen.value
}
  • Pour tester en mode application web : quasar dev
  • Normalement, quand on clique sur le bouton, un widget apparaît pour prendre une photo, si l'ordinateur possède une caméra. Sinon, il propose d'aller chercher une photo sur le disque.
  • Pour tester sur un simulateur de mobile android : quasar dev -m capacitor -T android