EXAMEN NORMAL — IGL241 : TERMINAUX MOBILES & DÉVELOPPEMENT MOBILE
Session 2
Module : IGL241 — Programmation pour Terminaux Mobiles
Niveau : Licence en Informatique
Durée : 3 heures | Note totale : 20 points
Année académique : 2025–2026
Consignes générales : Les quatre (4) parties sont indépendantes. Toutes les questions sont obligatoires. Justifiez vos réponses. La partie IV est une épreuve pratique sur machine.
PARTIE I — Architecture Android/iOS, Publication & Marché Mobile
Barème : 5 points | Durée conseillée : 40 min
Contexte professionnel
Vous êtes développeur(se) mobile senior à AppDev Cameroun, une agence informatique de Douala. Un client vient vous voir avec un projet d’application de gestion de tournées de livraison. Avant de signer le contrat, il vous pose de nombreuses questions techniques sur le fonctionnement interne des smartphones et les processus de publication sur les stores.
Question 1 — Architecture Interne d’Android (2,5 points)
Android repose sur quatre (4) grandes couches architecturales.
-
(0,5 pt) Nommez et décrivez brièvement le rôle de chacune des 4 couches de l’architecture Android, en partant de la plus basse (matériel) vers la plus haute (applications).
-
(0,5 pt) Qu’est-ce que l’Android Runtime (ART) ? Quelle est la différence fondamentale avec son prédécesseur Dalvik concernant la compilation du code ? Quel est le bénéfice concret pour l’utilisateur final (batterie, vitesse) ?
-
(0,5 pt) Le Framework Applicatif d’Android expose des classes aux développeurs. Citez trois (3) exemples de Managers concrets vus en cours (ex :
Activity Manager) et expliquez brièvement leur rôle. -
(1,0 pt) Comparez la publication d’une application sur le Google Play Store et sur l’App Store d’Apple en précisant pour chacun : le coût d’entrée, le format du fichier exécutable produit (AAB, IPA…), et la nature du processus de validation (automatisé, humain, hybride…).
Question 2 — iOS : Architecture et Principes (2,5 points)
-
(0,5 pt) Sur quelle fondation Unix (nom du noyau) repose iOS ? Quelle est la contrainte matérielle obligatoire pour développer et compiler une application iOS native ?
-
(0,5 pt) Quel IDE est indispensable au développement iOS ? Quel langage moderne a remplacé l’Objective-C comme langage principal en 2026 ?
-
(1,0 pt) L’architecture applicative iOS a évolué du MVC vers des modèles plus modernes.
- Développez l’acronyme MVC et expliquez brièvement chaque composant.
- Quel modèle architectural plus moderne est mentionné dans le cours pour les grandes applications iOS modulaires (acronyme en 5 lettres) ?
-
(0,5 pt) Expliquez en quoi consiste le format .aab (Android App Bundle) et comment les serveurs Google l’utilisent pour optimiser le poids du téléchargement en fonction du smartphone de l’utilisateur.
PARTIE II — Applications Hybrides, Embarqué & JavaScript
Barème : 5 points | Durée conseillée : 45 min
Contexte professionnel
Vous êtes ingénieur(e) logiciel pour InnoTech Hub, un incubateur technologique à Yaoundé. Trois startups membres vous soumettent leurs besoins : l’une veut une app de livraison ultra-rapide, l’autre un système IoT de surveillance de cultures agricoles, et la dernière une app web de gestion de facturation. Vous devez les conseiller sur les technologies adaptées.
Question 3 — Applications Hybrides et la WebView (2 points)
-
(0,5 pt) Définissez ce qu’est la WebView dans le contexte des applications hybrides (ex: Cordova). Comment l’interface HTML/CSS/JS est-elle rendue visible à l’utilisateur du smartphone ?
-
(0,5 pt) Expliquez le concept de Two-Way Data Binding introduit par AngularJS. Comment cela permettait-il de créer des interfaces réactives sans rechargement de page ?
-
(0,5 pt) Cordova et AngularJS sont aujourd’hui considérés comme des « reliques technologiques ». Quelle contribution historique majeure ont-ils apportée au développement cross-platform moderne (React Native, Flutter) ?
-
(0,5 pt) Ionic utilise aujourd’hui Capacitor à la place de Cordova. Quelle est la principale amélioration apportée par Capacitor, et avec quels frameworks JS modernes peut-on désormais coupler Ionic (citez-en trois) ?
Question 4 — Programmation Embarquée et IoT (1,5 point)
-
(0,5 pt) Définissez la programmation embarquée en la différenciant clairement d’une application mobile grand public. Quelle est la contrainte la plus critique en matière de ressources matérielles ?
-
(0,5 pt) Qu’est-ce qu’un RTOS (Real-Time Operating System) ? Pourquoi est-il indispensable dans des systèmes comme le freinage ABS d’une voiture ou le pilote automatique d’un avion ?
-
(0,5 pt) Citez deux défis colossaux du développement embarqué vus en cours (parmi : Memory Leaks, sécurité IoT, mises à jour OTA, temps réel) et expliquez brièvement pourquoi chacun est particulièrement difficile à gérer en embarqué.
Question 5 — Outils JavaScript & NPM (1,5 point)
-
(0,5 pt) Qu’est-ce que NPM (Node Package Manager) ? Utilisez une analogie simple pour l’expliquer à un client non-téchnique. Quel répertoire NPM crée-t-il dans un projet lors de l’installation des paquets ?
-
(0,5 pt) Dans le contexte du développement mobile cross-platform, quel est le rôle fondamental de TypeScript par rapport à JavaScript ? Donnez un exemple concret d’erreur que TypeScript détecterait lors de l’écriture du code mais que JavaScript ne détecterait qu’à l’exécution (Runtime) sur le téléphone.
-
(0,5 pt) La commande
npm install -g @ionic/cliinstalle Ionic globalement. Expliquez la signification précise de chaque terme de cette commande :install,-g,@ionic/cli.
PARTIE III — Flutter, Dart, State Management & Déploiement
Barème : 5 points | Durée conseillée : 45 min
Contexte professionnel
Vous êtes architecte technique senior chez FlutterCam Studio, la première agence de développement Flutter du Cameroun. Vous donnez la semaine prochaine une conférence technique devant des étudiants en licence informatique et des professionnels de l’IT. Vous préparez vos réponses aux questions les plus fréquentes sur Flutter.
Question 6 — Dart et l’architecture Flutter (2 points)
-
(0,5 pt) Dart est décrit comme ayant « emprunté la syntaxe facile du JavaScript mais force le développeur à typer rigoureusement comme du Java ». Expliquez ce que signifie être un langage fortement typé et quel avantage cela procure lors du développement d’une grande application mobile.
-
(0,5 pt) Flutter adopte le paradigme « Everything is a Widget ». Que signifie cette philosophie ? Donnez trois (3) exemples de widgets qui semblent non-visuels ou invisibles mais qui sont pourtant des widgets Flutter.
-
(1,0 pt) Lisez le pseudo-code Dart suivant et répondez aux questions :
Center( child: Column( children: [ Text('Bienvenue sur EduPass !'), Padding( padding: EdgeInsets.all(12.0), child: ElevatedButton( onTap: () { /* action connexion */ }, child: Text('Se connecter'), ), ), ], ), )- a) (0,5 pt) Identifiez chaque widget présent dans cet arbre et décrivez le rôle de chacun (Center, Column, Text, Padding, ElevatedButton).
- b) (0,5 pt) Ce code représente-t-il un StatelessWidget ou un StatefulWidget ? Justifiez votre réponse. Que faudrait-il modifier pour rendre le bouton capable de changer le texte affiché au clic ?
Question 7 — State Management, API Laravel & Déploiement (3 points)
-
(1,0 pt) La connexion d’une application Flutter à une API Laravel utilise Laravel Sanctum pour l’authentification.
- Pourquoi une application mobile Flutter ne peut-elle pas utiliser les cookies de session habituels du navigateur web ?
- Expliquez le mécanisme du Bearer Token : comment est-il généré par Laravel, comment l’app Flutter le stocke-t-il, et comment est-il renvoyé à chaque requête protégée ?
-
(1,0 pt) Concernant les gestionnaires d’état en Flutter :
- Qu’est-ce que le problème du « Prop Drilling » ? Illustrez-le avec un exemple concret (une app e-commerce avec un panier partagé entre 50 écrans).
- Comparez Provider et Riverpod sur deux critères : leur origine et leur principal avantage sur l’autre.
- Qu’est-ce que BLoC et pour quel type de projets est-il recommandé ?
-
(1,0 pt) Concernant le déploiement final :
- Donnez la commande Flutter permettant de générer un Android App Bundle (
.aab) de release. Quel est le rôle de l’option--release? - Donnez la commande alternative pour générer un APK destiné à un partage direct hors Play Store (paramètre
--split-per-abi). Quelle est l’utilité de ce paramètre ? - Pour iOS, quel outil est obligatoire et quelle commande Flutter génère le fichier déployable (
.ipa) ?
- Donnez la commande Flutter permettant de générer un Android App Bundle (
PARTIE IV — Travaux Pratiques : Interface de Connexion + Génération APK
Barème : 5 points | Épreuve sur machine
Contexte professionnel
Vous avez intégré l’équipe technique de CamStore, une plateforme de e-commerce camerounaise. Votre chef de projet vous demande de réaliser en urgence le prototype de l’écran de connexion de l’application mobile en Ionic, et de lui fournir le fichier APK de test pour validation sur son propre téléphone Android.
Exercice 1 — Création et mise en page Ionic (2 points)
Travail demandé :
-
(0,5 pt) Créez un nouveau projet Ionic avec le template
tabsnommécam-store. Donnez la commande exacte. Naviguez ensuite dans le dossier créé et lancez le serveur de développement local : donnez la commande pour démarrer l’application dans le navigateur. -
(1,5 pt) Générez une page Ionic nommée
login(donnez la commande). Puis, implémentez l’interface suivante danslogin.page.html:Maquette de l’écran de connexion « CamStore » :
- En-tête :
<ion-header>avec titre « CamStore — Connexion » et couleurprimary. - Corps :
<ion-content class="ion-padding">contenant :- Un
<ion-card>avec à l’intérieur :- Un
<ion-card-header>avec<ion-card-title>: « Bienvenue sur CamStore ». - Un
<ion-card-content>avec :- Un
<ion-item>: champemailavec label « E-mail », typeemail. - Un
<ion-item>: champpasswordavec label « Mot de passe », typepassword. - Un
<ion-button>expand="block"color="primary": texte « Se connecter ». - Un
<ion-button>fill="clear"expand="block": texte « Pas encore de compte ? S’inscrire ».
- Un
- Un
- Un
- En-tête :
Exercice 2 — Build Android et test Émulateur (3 points)
Travail demandé :
-
(0,5 pt) Donnez la commande permettant d’ajouter la plateforme Android au projet Ionic via Capacitor. Donnez également la commande pour synchroniser les modifications de code web avec le projet Android natif.
-
(0,5 pt) Donnez la commande tout-en-un pour ouvrir le projet Android natif dans Android Studio directement depuis le terminal (ionic + capacitor).
-
(1,0 pt) Dans Android Studio, expliquez étape par étape comment :
- Créer un émulateur (AVD) de type Pixel 7 avec la version Android API 34.
- Lancer cet émulateur depuis le Device Manager.
- Déployer l’application sur l’émulateur via le bouton Run (triangle vert).
-
(1,0 pt) Pour générer le fichier APK final :
- Dans Android Studio : décrivez le menu à utiliser (Build > Build Bundle(s) / APK(s) > Build APK(s)).
- Donnez le chemin complet (relatif à la racine du projet) où l’APK de debug est généré.
- Expliquez la différence entre un APK debug et un APK release du point de vue de la signature et de l’utilisation.
— Fin de l’examen Session 2 — Bon courage à toutes et à tous —
Barème récapitulatif :
Partie Thème Questions Total I Architecture Android/iOS & Publication Q1 (2,5 pts) + Q2 (2,5 pts) 5 pts II Hybride, Embarqué & NPM/JS Q3 (2 pts) + Q4 (1,5 pt) + Q5 (1,5 pt) 5 pts III Flutter, Dart, State, API & Déploiement Q6 (2 pts) + Q7 (3 pts) 5 pts IV TP : CamStore Connexion + APK Ex1 (2 pts) + Ex2 (3 pts) 5 pts Total 20 pts
Prêt à passer à la suite ?
Vous avez terminé cette leçon sur EXAMEN NORMAL — IGL241 : TERMINAUX MOBILES & DÉVELOPPEMENT MOBILE. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.