ÉVALUATION EN PROGRAMMATION MOBILE TEST 18/ XX
Examen Ionic, Examen Anglar, Examen Programmation Mobile, Programmation Hbyride, Progressive Web App
Durée : 2h00 Documents : Non autorisés Total : 20 points
Les exercices sont indépendants. Soignez la présentation et la clarté de vos réponses.
EXERCICE 1 — Android : Fondamentaux, Technologies et Concepts (7 pts)
Geniusclassrooms lance une formation intensive destinée à ses étudiants en développement mobile. Avant d'entrer dans la pratique, le formateur pose une série de questions de cours afin d'évaluer les connaissances fondamentales sur l'écosystème Android, les technologies modernes et les approches de développement multi-plateformes.
Répondez aux 8 questions suivantes. Soyez précis et concis.
Question 1 — Définition et sigle (0,5 pt)
c'est quoi une APK ?
Question 2 — Définitions fondamentales (1 pt)
Définissez brièvement chacun des termes suivants :
- Activity
- Intent
- Manifest (AndroidManifest.xml)
- Gradle
Question 3 — Technologies Android (1 pt)
Associez chaque technologie ou composant à sa description correcte en indiquant le bon numéro dans votre copie :
Technologies :
- ART
- SDK
- Jetpack
- Kotlin
Descriptions :
- Langage officiel recommandé par Google depuis 2017 pour le développement Android, interopérable avec Java.
- Ensemble d'outils, bibliothèques et API fournis par Google pour développer des applications Android.
- Environnement d'exécution qui compile le bytecode DEX en code machine natif lors de l'installation (AOT).
- Ensemble de bibliothèques modernes (Navigation, Room, ViewModel, LiveData) facilitant le développement Android robuste.
Question 4 — Cycle de vie d'une Activity (1 pt)
Le cycle de vie d'une Activity Android comporte plusieurs méthodes de rappel (callbacks).
- Citez 4 méthodes du cycle de vie d'une Activity dans l'ordre logique d'exécution au démarrage puis à la fermeture.
- Dans quelle méthode faut-il initialiser les vues (setContentView) et pourquoi ?
Question 5 — Architecture MVC / MVVM (0,5 pt)
Geniusclassrooms impose à ses développeurs d'utiliser le pattern MVVM pour ses applications.
- Que signifie le sigle MVVM ? Décrivez le rôle de chacune de ses trois composantes en une phrase.
- Quel avantage principal MVVM apporte-t-il par rapport à une architecture non structurée ?
Question 6 — Progressive Web App (PWA) (1 pt)
Le directeur technique de Geniusclassrooms hésite entre développer une application native Android ou une Progressive Web App (PWA) pour leur nouvelle plateforme d'apprentissage en ligne.
- Donnez une définition précise d'une PWA.
- Citez 3 caractéristiques techniques qui distinguent une PWA d'un simple site web mobile.
- Citez 2 avantages et 2 inconvénients d'une PWA par rapport à une application native Android.
Question 7 — Développement Cross-Plateforme (1 pt)
Geniusclassrooms envisage de cibler à la fois Android et iOS avec un seul code source. Plusieurs technologies cross-plateformes existent sur le marché.
- Expliquez ce qu'on entend par développement cross-plateforme mobile.
- Citez 3 frameworks cross-plateformes connus et indiquez pour chacun le langage de programmation principal utilisé.
- Quelle est la différence fondamentale entre une application native, une application cross-plateforme et une PWA ? Présentez sous forme de tableau comparatif avec les critères : langage, performances, accès aux API natives, déploiement.
Question 8 — Vrai ou Faux (1 pt)
Indiquez si chaque affirmation est Vraie (V) ou Fausse (F) et justifiez brièvement votre réponse en une phrase :
- Une PWA peut fonctionner hors ligne grâce au Service Worker.
- Flutter utilise JavaScript comme langage principal de développement.
- Une application Android native offre généralement de meilleures performances qu'une application cross-plateforme.
- Le fichier AndroidManifest.xml est optionnel dans un projet Android.
EXERCICE 2 — Sécurité des Applications Android : GeniusCorp RH (7 pts)
Contexte : Geniusclassrooms développe GeniusCorp RH, une application Android de gestion des ressources humaines contenant des données très sensibles (salaires, contrats, données médicales des employés). Le responsable sécurité vous mandate pour auditer et compléter le travail du développeur junior.
Question 1 — Architecture de sécurité Android (1,5 pt)
a) Expliquez le principe du sandboxing par UID. Si l'application GeniusCorp RH (UID = 10301) est compromise par un attaquant, peut-il accéder aux données de l'application GeniusCorp Paie (UID = 10302) installée sur le même téléphone ? Justifiez. (1 pt)
b) Citez et décrivez brièvement 3 couches du modèle de sécurité en profondeur (Defense in Depth) d'Android, de la plus basse à la plus haute. (0,5 pt)
Question 2 — Analyse de code (2,5 pts)
Le développeur junior a produit ce code pour l'authentification dans GeniusCorp RH. Analysez-le attentivement.
// Tentative de connexion - aucune limitation
void verifierAcces(String login, String motDePasse) {
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(
dbFile, null, null); // base non chiffrée
String query = "SELECT * FROM employes WHERE login='"
+ login + "' AND password='" + motDePasse + "'";
Cursor c = db.rawQuery(query, null);
if (c.getCount() > 0) {
accesAutorise = true;
}
}
// Stockage du résultat biométrique
public void onAuthenticationSucceeded(
BiometricPrompt.AuthenticationResult result) {
SharedPreferences prefs = getSharedPreferences("rh", MODE_PRIVATE);
prefs.edit().putBoolean("auth_ok", true).apply();
}
a) Identifiez toutes les failles de sécurité (minimum 4). Pour chacune donnez : le nom de la faille, la menace OWASP associée, et la correction à apporter. (1,5 pt)
b) Récrivez la méthode verifierAcces() de manière complètement sécurisée (requête paramétrée + base chiffrée + protection anti-brute-force). (1 pt)
Question 3 — Communications réseau (1,5 pt)
a) Qu'est-ce qu'une attaque Man-in-the-Middle (MITM) ? Pourquoi HTTP seul est-il dangereux pour une application comme GeniusCorp RH ? (0,5 pt)
b) Depuis quelle version d'Android les connexions HTTP en clair sont-elles bloquées par défaut ? Quel fichier de configuration permet de définir des règles réseau avancées ? (0,5 pt)
c) Qu'est-ce que le Certificate Pinning ? Quel risque opérationnel majeur faut-il anticiper et quelle précaution le cours recommande-t-il ? (0,5 pt)
Question 4 — Obfuscation, root et tests (1,5 pt)
a) ProGuard/R8 effectue 3 opérations essentielles. Citez-les et expliquez chacune brièvement. (0,5 pt)
b) Qu'est-ce que MobSF ? Quelle est la différence entre son analyse statique et son analyse dynamique ? (0,5 pt)
c) La détection de root est-elle une protection infaillible selon le cours ? Justifiez en une phrase et donnez le nom de l'outil cité dans le cours qui peut contourner cette détection. (0,5 pt)
EXERCICE 3 — Interfaces Android : Application "Visite Guidée GeniusCampus" (6 pts)
Geniusclassrooms développe une application mobile Android appelée GeniusCampus Visit. Cette application permet à un nouvel étudiant de l'Université de Dschang de réaliser une visite guidée interactive du campus depuis son smartphone. L'application affiche les informations des différents sites du campus (Bibliothèque centrale, Amphi 700, Labo Informatique, Restaurant universitaire, Terrain de sport), avec pour chaque site : une image, un nom, une description, une note attribuée par l'étudiant, et la date de visite saisie par l'utilisateur. L'étudiant peut faire défiler la liste des sites, saisir la date à laquelle il prévoit visiter chaque lieu, noter le site, et confirmer sa visite par un message de notification rapide.
Question 1 — Dessin de l'interface et identification des composants (2 pts)
En vous basant sur le contexte de l'application GeniusCampus Visit décrit ci-dessus, répondez aux questions suivantes :
a) Dessinez sur votre feuille une maquette (schéma filaire / wireframe) de l'interface principale de l'application GeniusCampus Visit telle que vous l'imaginez en fonction du contexte. Votre dessin doit faire apparaître clairement les éléments suivants et les annoter avec leur nom de composant Android :
- Une zone de défilement vertical contenant la liste des sites du campus
- Pour chaque site : une image, un titre (nom du site), une description courte
- Un champ de sélection de date (pour la date de visite prévue)
- Un bouton "Confirmer la visite"
- Une barre de titre en haut de l'écran
b) Pour chaque composant annoté dans votre dessin, indiquez dans un tableau : son nom de composant Android exact, son rôle fonctionnel dans l'application, et le layout parent dans lequel il s'inscrit.
Question 2 — ScrollView et Layouts (1,5 pt)
a) Qu'est-ce qu'un ScrollView en Android ? Quelle contrainte importante faut-il respecter concernant le nombre d'enfants directs d'un ScrollView ? (0,5 pt)
b) Dans l'application GeniusCampus Visit, on veut afficher la liste des 5 sites du campus dans un ScrollView. Écrivez la structure XML minimale permettant d'afficher dans un ScrollView un LinearLayout contenant deux éléments TextView (un pour le nom du site, un pour la description). (0,5 pt)
c) Quelle est la différence entre un LinearLayout et un ConstraintLayout ? Dans quel cas préférez-vous l'un à l'autre ? Justifiez avec un exemple tiré de l'application GeniusCampus Visit. (0,5 pt)
Question 3 — DatePicker et Toast (1,5 pt)
a) Dans GeniusCampus Visit, l'étudiant doit choisir la date à laquelle il prévoit visiter chaque site du campus. Expliquez la différence entre un DatePicker (widget inline) et un DatePickerDialog (boîte de dialogue). Lequel recommandez-vous pour une interface mobile moderne et pourquoi ? (0,5 pt)
b) Écrivez le code Java complet permettant d'afficher un DatePickerDialog au clic d'un bouton dans GeniusCampus Visit. Le code doit :
- Ouvrir le DatePickerDialog avec la date du jour par défaut
- Récupérer la date choisie par l'utilisateur (jour, mois, année)
- Afficher un Toast de confirmation : "Visite prévue le JJ/MM/AAAA"
(0,5 pt)
c) Citez deux différences entre un Toast et un Snackbar en Android. Dans GeniusCampus Visit, lequel utiliseriez-vous pour confirmer la réservation de visite et pourquoi ? (0,5 pt)
Question 4 — Logique applicative et questions de cours (1 pt)
a) Dans GeniusCampus Visit, l'étudiant appuie sur "Confirmer la visite" sans avoir sélectionné de date. Que doit faire l'application ? Décrivez le comportement attendu et écrivez la condition Java permettant de vérifier que la date a bien été sélectionnée avant de confirmer. (0,5 pt)
b) Répondez par Vrai (V) ou Faux (F) et justifiez en une phrase : (0,5 pt)
- Un ScrollView peut contenir directement plusieurs enfants sans layout intermédiaire.
- La méthode
Toast.makeText() prend 3 paramètres : le contexte, le message, et la durée.
- Un LinearLayout avec
orientation="vertical" empile ses enfants de gauche à droite.
- Le DatePickerDialog retourne le mois avec une indexation commençant à 0 (janvier = 0).
— Bon courage à tous les étudiants de Geniusclassrooms ! —
`