Développement des applications mobiles sous Android - M. YOUNES ET TAZARINI
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Historique OS conçu pour les smartphones . Société Android créée en 2003. Rachetée par Google 2005. Android 1.0 : 2008 de nombreuses versions depuis, on en est la 8, Oreo (octobre 2017).
Open Handset Alliance (OHA) En 2007, peu de temps après le premier IPhone, Google, inquiet de la dominance de Apple fonde l'Open Handset Alliance avec de grands constructeurs et fabricants de smartphones et dans les semi-conducteurs ainsi que quelques grands noms des télécoms pour développer Android.
Open Handset Alliance (OHA)
Historique des versions Nom Version Date Android 1.0 09/2008 Petit Four 1.1 02/2009 Cupcake 1.5 04/2009 Donut 1.6 09/2009 Gingerbread 2.3 12/2010 Honeycomb 3.0 02/2011 Ice Cream Sandwich 4.0.1 10/2011 Jelly Bean 4.1 07/2012 KitKat 4.4 10/2013 Lollipop 5.0 10/2014 Marshmallow 6.0 05/2015 Nougat 7.0 09/2016 Oreo 8.0 08/2017
Google Play Android Market est « né » le 22 octobre 2008 Chaque nouveau développeur paie 25$ de dossier (une seule fois) Chaque développeur est rémunéré 70% contre 30% qui rétribuent Google
ENVIRONNEMENT DE DÉVELOPPEMENT SOUS ANDROID
Outils du développeur Android SDK. API. Émulateurs (AVD : Android Virtual Device). SQL Lite.
IDE Android Studio ◦Solution de Google annoncée au Google IO 2013 Eclipse + plugin ADT Netbeans
Émulateur : limitations Lent au démarrage et à l'usage Fonctionnalités non-disponibles ◦ Appareil photo ◦ Vibreur ◦ Appels téléphoniques réels ◦ Capteurs en général ◦ Connexions USB ◦ Évolution de la charge de la batterie
Périphérique physique Se passer de l'émulateur ◦ Utilisez votre appareil personnel. Activation du mode debug du périphérique ◦ Tapotez 7 fois de suite sur « A propos » pour faire apparaître le menu caché développeur. ◦ Activez le mode débogage USB. Sous Windows il est nécessaire d’installer le driver de votre périphérique.
Environnement contraint Pour vos développements, gardez à l'esprit que les périphériques mobiles ont souvent : ◦ Une puissance processeur plus faible. ◦ Une RAM limitée. ◦ Des capacités de stockage permanent limitées. ◦ De petits écrans avec de faibles résolutions. ◦ Des connexions réseau moins fiables. ◦ Des batteries à autonomie limitée.
Rétrocompatibilité Chaque version de l'API apporte son lot de nouveautés qu'il est conseillé d'exploiter : ◦ Réécriture de méthodes Java existantes. ◦ Ajout de nouvelles classes d'objets Java. Un décalage entre l'API utilisée pour compiler et celle des périphériques cibles peut survenir : ◦ compileSdkVersion > targetSdkVersion Les implémentations manquantes sont incluses dans l'APK sous forme d'une librairie : ◦ La « Support Library »
Compilation et déploiement
Construction d'une application Android HELLO WORLD APP
Prérequis De bonnes connaissances en Java : ◦ Héritage, ◦ Polymorphisme (Surcharge et redéfinition) ◦ Interfaces, ◦ Casting ◦ Exceptions
Objectifs Créer une application simple qui affiche le message « Hello world ». Créer et lancer un émulateur (AVD). Tester l’application sur un émulateur. Tester l’application sur un appareil physique.
Arborescence Android Manifest Code JAVA de l’activité Code source JAVA Ressources de Layout de l’activité l’application Les images Valeurs statiques
Le manifeste Chaque projet contient à sa racine un fichier AndroidManifest.xml qui : ◦ Nomme le paquetage Java de l'application. Ce dernier sert d'identificateur unique de l'application. ◦ Déclare les composants applicatifs (activities, services, etc). ◦ Déclare les permissions que l'application doit avoir pour fonctionner (droit de passer des appels, droit d'accéder à Internet, droit d'accéder au GPS...) ◦ Déclare le niveau minimum de compatibilité du SDK pour que l'application fonctionne ◦…
Android Manifest API level Permissions Main Activity Activité
Activité Une activité = un écran graphique. Une application est formée de plusieurs activités. Exemple : application de téléphonie 1. Numéroteur; 2. Annuaire des contacts; 3. Fiche d'un contact; 4. Ajout d'un contact.
Hello ISMAG : Code Source d’activité Hérite de la classe AppCompactActivity Enregistre l’état de l’Activity Layout à utiliser
Le Layout
Demo FIRST APP : HELLOWORLD
Cycle de vie d'une activité 7 méthodes de callback 1. void onCreate(...) 2. void onStart() 3. void onResume() 4. void onPause() 5. void onStop() 6. void onDestroy() 7. void onRestart()
Activité : code source
Demo SECONDE APP - ACTIVITYLIFECYCLE
Les intents
Transition entre les activités La transition entre deux écrans correspond au lancement d’une Activité ou au retour sur une Activité placée en arrière-plan
Applications Android Une application démarre sous le contrôle du système Android : Le système commence par créer un processus dans lequel s’exécutera l’application Le système charge dans le nouveau processus les classes (.dex) correspondant à l’application Le UIThread représente l’ActivityManager dans l’environnement d’exécution de l’application Il gère le cycle de vie des composants applicatifs et traite les événements système qu’il reçoit (y compris les interactions utilisateurs) ◦ ➡Au cœur de ce mécanisme : les Intents
Android Intent Objet de la classe android.content.Intent définissant des messages échangés avec le système Android (des intentions). Représente un message utilisé pour interagir avec le système Android pour : ◦ demander l’activation d’une activité ◦ demander l’exécution d’une activité qui devra produire un résultat ◦ demander le lancement d’un service en mode “started” ◦ envoyer un message à destination de BroadcastListeners Il permet aussi la communication entre les applications.
Les types d’Intents On décompose les Intents en 2 grands types : ◦ Les Intents explicites : qui spécifient exactement la classe du composant applicatif cible ◦ Les Intents implicites : qui ne spécifient pas la classe du composant cible, mais décrivent une cible par une action à réaliser, une catégorie, des données à manipuler… C’est le système Android qui choisit le composant applicatif approprié (éventuellement avec le concours de l’utilisateur)
Intent implicit (1/3) Il ne définit pas une cible précise. Il lance un appel et le système cherche les applications qui peuvent répondre à cet appel. Je veux faire un appel téléphonique, le système va chercher une application qui me permet de le faire. Intent intent = new Intent (action, data); startActivity (intent);
Intent implicit (2/3) Action : l’action que le destinataire doit réaliser. On peut utiliser une des actions fournies par le système, « ACTION_DIAL » pour afficher un composeur de numéros téléphoniques, « ACTION_VIEW » pour afficher une page web ou un contact, etc. Il est possible aussi d’en définir de nouvelles actions propres à l’activité. Data : les données sur lesquelles le traitement va avoir lieu, exprimées en « URI ». Il faudra donc utiliser « tel:1234 » pour téléphoner, «https://www.ismag.ma » pour afficher une page dans un navigateur, etc.
Intent implicit (3/3) Il existe de nombreuses actions standard : ◦ ACTION_MAIN : démarrage point d'entré principal. ◦ ACTION_VIEW : traitement sur données à afficher. ◦ ACTION_DIAL : clavier téléphonique avec numéro pré saisi. ◦ ACTION_CALL : effectue un appel téléphonique. ◦ ACTION_ANSWER : décrocher sur un appel entrant.
Exemple
Intent explicite (1/5) Démarrage d’une nouvelle Activity sans envoi de données: ◦ Le constructeur est Intent intent = new Intent(Context,Class) ; pour un Intent explicite ◦ Le context est transmis par l’Activity courante. ◦ Le paramètre Class est le nom qualifié de l’Activity que l’on souhaite démarrer: package.TargetActivity (sauf si l’Activity appartient au même package)
Exemple
Intent explicite (2/5) Démarrage avec envoi de données ◦ On peut compléter l’Intent en lui ajoutant des données. ◦ C’est réalisé avec la méthode putExtra(). ◦ Les données sont ajoutées selon le format habituel : un couple (clef, valeur). ◦ De préférence déclarez les clefs comme des public final static String.
Intent explicite (3/5) Côté Activity démarrée ◦ Quand des données accompagnent l’Intent, dans la méthode onCreate() il faut récupérer l’Intent avec la méthode getIntent() ◦ Pour récupérer les données, il est nécessaire d’avoir la clef : ◦ getStringExtra(clef)
Exemple (1/2)
Exemple (2/2)
Intent explicite (4/5) Démarrage d’une activité qui doit retourner un résultat : Si on veut un résultat en retour de la nouvelle activity on utilisera la méthode : ◦ void startActivityForResult(Intent intent, int requestCode) requestCode un code passé qui permet d'identifier de manière unique un intent. Quand l'activité appelée s'arrêtera, la première méthode de callback appelée dans l'activité précédente sera : ◦ void onActivityResult(int requestCode, int resultCode, Intent data)
Intent explicite (5/5) On retrouve requestCode, qui sera le même code que celui passé dans le startActivityForResult et qui permet de repérer quel intent a provoqué l'appel de l'activité dont le cycle vient de s'interrompre. resultCode est quant à lui un code renvoyé par l'activité qui indique comment elle s'est terminée ◦ Activity.RESULT_OK si l'activité s'est terminée normalement, ◦ Activity.RESULT_CANCELED s'il y a eu un problème ou qu'aucun code de retour n'a été précisé).
Exemple (1/2)
Exemple (2/2)
Demo
Vous pouvez aussi lire