Développement Android

Documents pareils
- TP Programmation Android - NFA024 Conservatoire National des Arts et Métiers

Projet Android (LI260) Cours 2

1.3 Gestion d'une application

TD/TP 1 Introduction au SDK d Android

TP au menu «UI ANDROID»

Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

Installation et prise en main

Votre premier projet Android

Chapitre 1 Retour en arrière

Tutorial pour une application simple

Android 4 Les fondamentaux du développement d'applications Java

Table des matières. Partie I Concepts de base Préface... VII

Module Architecture des systèmes mobiles : Android première partie Didier FERMENT - UPJV

Programmation mobile avec Android

Les fondamentaux du développement d applications Java


Android Publish/Subscribe, GCM, Google Cloud Messaging : une introduction

DÉVELOPPEMENT ANDROID

Android et le Cloud Computing

Développement d applications professionnelles avec Android 2

Programmation des applications mobiles avec Android. 1 Inspiré du cours de Olivier Le Goaer

1. Base de données SQLite

Introduction ANDROID

Table des matières Introduction Démarrage Les composants graphiques... 26

NOTICE GPSTA1 I. DESCRIPTION II. ACCESSOIRES. J. R International - Eclats Antivols. 2014

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Android en action. Abdelkader Lahmadi Université de Lorraine

Guide d'installation et de configuration de Pervasive.SQL 7 dans un environnement réseau Microsoft Windows NT

Tutoriel Android - TP de prise en main

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server

Utilisation de GCM (Google Cloud Messaging) pour Android. Partie préliminaire éventuelle : Création d'un AVD lisant GCM

Warren PAULUS. Android SDK et Android x86

5004H103 Ed. 02. Procédure d installation du logiciel AKO-5004

Android. Programmation. De la conception au déploiement avec le SDK Google Android 2. Damien Guignard Julien Chable Emmanuel Robles

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server 3, 3.5

PPM(A) Programmation sur Plateformes Mobiles (Android) Legond-Aubry Fabrice

Paris Airports - Web API Airports Path finding

SOMMAIRE

DELEGATION ACADEMIQUE AU NUMERIQUE FORMATION ADMINISTRATEUR SCRIBE 2.3 ET CARTABLE EN LIGNE (CEL)

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

TUTORIEL: INSTALLATION D'UN SERVEUR LOCAL SOUS WINDOWS 7 POUR APPINVENTOR version du 06/04/2013

Sécurité Informatique. Description. Prérequis. Un petit test avant de commencer s embourber

StruxureWare Power Monitoring v7.0. La nouvelle génération en matière de logiciel de gestion complète d énergie

Guide de démarrage Intellipool Network Monitor

Web Tier : déploiement de servlets

comment installer les pilotes USB

esms Desktop Guide de l utilisateur

WiFi Security Camera Quick Start Guide. Guide de départ rapide Caméra de surveillance Wi-Fi (P5)

Épisode 2 : Les outils de développement Alain Menu édition 2.1, septembre 2013

Introduction à Eclipse

Déploiement de SAS Foundation

Développement sous Android

Développement Android. J.-F. Couchot

BIRT (Business Intelligence and Reporting Tools)

Développement sous Android

La base de données XML exist. A. Belaïd

Système Principal (hôte) 2008 Enterprise x64

Procédure d installation de la Sauvegarde de Windows Server

Education Delivery Intelligent Tool

Installer les Pilotes USB

esms Outlook Guide de l'utilisateur

TP LINUX : LINUX-SAMBA SERVEUR DE FICHIERS POUR UTILISATEURS WINDOWS

Module 10 : Supplément 2

Fiche Produit TSSO Extension Mobility Single Sign-On

Traceur GPS TK102 2 COBAN

Architecture Orientée Service, JSON et API REST

France SMS+ MT Premium Description

Architectures Mobiles

Tutoriel Android. Pour démarrer la programmation d'applications Android

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

République Algérienne Démocratique et Populaire Université Abou Bakr Belkaid Tlemcen Faculté des Sciences Département d Informatique

Construire des plug-ins pour SAS Management Console SAS 9.1

Dossier. Développer en Java sur téléphone mobile. Benjamin Damécourt UFR SITEC Master 2 EESC 11 janvier 2012

TP1. Outils Java Eléments de correction

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

Eclipse atelier Java

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée Virtual Server de Microsoft

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

Travaux pratiques : collecte et analyse de données NetFlow

Tutoriel Création d une source Cydia et compilation des packages sous Linux

TP1 : Initiation à Java et Eclipse

2010/2011 [PROJET TEXT TO SPEECH] Génie Logiciel des Interactions Homme-Machine. Germain Costenobel Pierre Barois

Manuel de l utilisateur

Installation et compilation de gnurbs sous Windows

Fiche Produit IPS Manager Assistant

Activer la connectivité des systèmes de stockage 3PAR

Installation du client Cisco VPN 5 (Windows)

Transport Layer Security (TLS) Guide de mise en œuvre. Version: 1.0

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition

Project 1 Experimenting with Simple Network Management Tools. ping, traceout, and Wireshark (formerly Ethereal)

(1) Network Camera

Installation du client Cisco VPN 5 (Windows)

12 Configuration de l appareil

Installation du client Cisco VPN 5 (Windows)

WDpStats Procédure d installation

Création d un service web avec NetBeans 5.5 et SJAS 9

Remote Method Invocation Les classes implémentant Serializable

Procédure d installation de la solution Central WiFI Manager CWM

Transcription:

Développement Android Module 02 - Premiers pas 1 A R A M I S F O R M A T I O N A N D R O I D - B E N J A M I N B I L L E T

WA R N I N G Le contenu de cette présentation est basé sur la documentation anglophone officielle d Android, diffusée sous licence Creative Commons Attribution 2.5 : developer.android.com La plupart des schémas qui composent ce cours proviennent de cette documentation et sont, par conséquent, soumis à cette même licence. http://creativecommons.org/licenses/by/2.5/ 2

A N D R O I D D E V E L O P E R T O O L S Eclipse + SDK + Emulateur + Outils Disponible sur developer.android.com Une simple archive à décompresser. 3

U N P R E M I E R P R O J E T 4

U N P R E M I E R P R O J E T Par défaut, l IDE a généré : Une activité (MainActivity.java) Un manifest (AndroidManifest.xml) Un dossier de ressources (/res) diverses contenant notamment une vue, des icônes et divers fichiers (gestion des tailles, du texte, etc.). Lors de la compilation, /gen est généré. /gen/<package>/r.java permet de faire le lien entre les ressources XML et la logique de l application. 5

L E M A N I F E S T Décrit l ensemble des composants qui constituent l application. Décrit les permissions requises par l application (accès internet, envoi de SMS, etc.), ainsi que les fonctionnalités matérielles et logicielles nécessaires (ex : appareil photo). Autres (SDK préféré, résolution supportées, etc.) 6

L E M A N I F E S T <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="fr.inria.myapp" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="8" android:targetsdkversion="18" /> <application android:allowbackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/apptheme" > <activity android:name="fr.inria.myapp.mainactivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> </manifest> 7

L E M A N I F E S T <uses-permission android:name="android.permission.call_emergency_numbers" /> <uses-permission android:name="android.permission.receive_sms" /> <uses-permission android:name="android.permission.write_profile" />... <supports-screens android:resizeable=["true" "false"] android:smallscreens=["true" "false"] android:normalscreens=["true" "false"] android:largescreens=["true" "false"] android:xlargescreens=["true" "false"] android:anydensity=["true" "false"] android:requiressmallestwidthdp="integer" android:compatiblewidthlimitdp="integer" android:largestwidthlimitdp="integer"/> <uses-feature android:name="android.hardware.bluetooth" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.software.app_widgets" />... 8

L ES R E S O U R C E S /res /layout /menu /values /strings.xml /dimens.xml /styles.xml /values-* /drawable-* Layout descriptions Menu descriptions Default strings Default dimensions Default styles Specific values Graphical resources (images) /res/values-en/strings.xml : traduction anglaise. /res/drawable-ja : images optimisés pour le public japonais. /res/values-v14/styles.xml : style spécifique à l API 14 /res/drawable-hdpi : images optimisées pour écran haute densité (~240 dpi). developer.android.com/guide/topics/resources/providing-resources.html 9

V I R T U A L D E V I C E Window -> Virtual Device Manager 10

D E P L O I E M E N T Run As -> Android Application Par défaut, utilise le virtual device 11

D E P L O I E M E N T L émulateur ne doit être démarré qu une seule fois. Il suffit ensuite de le laisser en arrière plan ; il sera automatiquement réutilisé pour les futures exécutions. 12

U T I L I S E R UN V R A I D E V I C E Passer le device en mode debug USB. Depuis Android 4.2, les options pour développeur doivent être réactivées en premier lieu : K 1. Aller dans le menu Paramètres/A propos. 2. Taper sept fois sur le numéro de build. 3. Tourner huit fois sur vous-même en brandissant un crucifix, puis 13

U T I L I S E R UN V R A I D E V I C E 14

U T I L I S E R UN V R A I D E V I C E 15

A N D R O I D D E B U G B R I D G E ADB est un outil de déboggage en trois parties : Sur la machine du développeur : Un client, utilisable en ligne de commande. Un serveur (port 5037), qui gère la communication avec les différents appareils. Un démon qui tourne sur chaque appareil (ports 5554 55585). L exécutable adb se situe dans <sdk>/platformtools. 16

A N D R O I D D E B U G B R I D G E > adb devices List of devices attached 0A3C23C719015019 emulator-5554 emulator-5556 device offline device > adb -s emulator-5556 install helloworld.apk > adb -s emulator-5556 push foo.txt /sdcard/foo.txt > adb -s emulator-5556 pull /sdcard/foo.txt foo.txt > adb -s emulator-5554 shell shell@maguro:/ $ sqlite3 /data/data/fr.inria.example/databases/somedb.db > adb -s emulator-5556 shell screenrecord /sdcard/demo.mp4 17

L O G C A T Logcat permet d accéder aux différents log enregistrés par les appareils. > adb s emulator-5554 logcat 11-26 05:46:27.260: D/AlertService(649): No fired or scheduled alerts 11-26 05:46:27.300: D/AlertService(649): Scheduling next alarm with AlarmScheduler. seventreminderreceived: null 11-26 05:46:27.330: D/AlarmScheduler(649): No events found starting within 1 week. 11-26 05:46:28.450: D/dalvikvm(279): GC_EXPLICIT freed 383K, 61% free 5334K/13492K, paused 5ms+14ms, total 155ms... 18

C O N S O L E DE L É M U L A T E U R L émulateur peut être manipulé avec une console très polyvalente, directement accessible depuis telnet. > telnet localhost 5554 Android Console: type 'help' for a list of commands OK power capacity 75 power status charging gsm call 012041293123 sms send 12345 Will be home soon # longitude latitude <altitude> geo fix 2.0983248486704418 48.836726551297495 120 network delay gprs network delay 50 100 network speed gprs 19

D A L V I K D E B U G M O N I T O R S E R V E R DDMS est un outil de déboggage (graphique), basé sur ADB, Logcat, etc. Mesurer l utilisation de la mémoire (allocation, heap). Monitorer les threads et les processus. Monitorer le trafic réseau. Simuler le GPS, les sms/appels et les différents changements d état dans l émulateur. Gérer les redirections de port dans l émulateur. Analyser les logs. Envoyer/récupérer des fichiers. 20

D A L V I K D E B U G M O N I T O R S E R V E R 21

D A L V I K D E B U G M O N I T O R S E R V E R 22

D A L V I K D E B U G M O N I T O R S E R V E R 23

L E C O M P O S A N T A C T I V I T Y 24

L E C O M P O S A N T A C T I V I T Y 25

L E C O M P O S A N T A C T I V I T Y Durée de vie totale : de oncreate() à ondestroy() Arrière plan : de onstart() à onstop(), l application s exécute en fond et n est plus visible par l utilisateur. Premier plan : de onresume() à onpause(), l application est au premier-plan et l utilisateur intéragit avec celle-ci. 26

I N T E N T M E S S A G I N G L échange de message entre les composants applicatifs se fait au travers de messages, appelés Intent. Un Intent est une structure de données qui décrit soit une opération à effectuer, soit un évènement. ComponentName Action Data Category Extras Flags La classe et le package d un composant. Une action qui doit être, ou a été, réalisée. Une URI (tel:, http:, geo:, ) vers des données à traiter, et un type MIME. Une catégorie de composant. Des paramètres (clé/valeur). Options diverses. 27

I N T E N T M E S S A G I N G Android route les Intent d un composant à un autre en exploitant les informations fournies dans le manifest. Un Intent qui définit un ComponentName est directement transmis (intent explicite). Les autres Intent (implicites) nécessitent de trouver les composants qui matchent les différents champs, avec trois issues possibles : Un seul composant a été trouvé, le message est transmis. Plusieurs composants ont été trouvé, une boîte de dialogue demande alors à l utilisateur de faire un choix. Aucun composant n a été trouvé, une exception est levée. 28

U N S I M P L E I N T E N T E X P L I C I T E ActivityA Intent i = new Intent(this, ActivityB.class); i.putextra("something", 10); startactivityforresult(i, 42); @Override public void onactivityresult(int requestcode, int resultcode, Intent data) { super.onactivityresult(requestcode, resultcode, data); if(requestcode == 42 && resultcode == Activity.RESULT_OK) int val = data.getextras().getint("somethingplusone"); } ActivityB Intent request = getintent(); if(request.hasextra("something")) { int val = request.getintextra("something"); Intent response = new Intent(); response.putextra("somethingplusone", val + 1); setresult(activity.result_ok, response); } else setresult(1); // error finish(); 29

I N T E N T R E S O L U T I O N Seuls les champs action, data (URI, type MIME) et category sont utilisés pour le matching. Lorsqu un composant est évalué, celui-ci doit passer trois tests pour être considéré comme un destinataire potentiel : Action test. Category test. Data test. 30

Intent A C T I O N T E S T Component No action No action Failure Success Set of actions A Set of actions B Failure Success if A and B shares at least one element : A B 1 31

Intent C A T E G O R Y T E S T Component No category No category Success Success Set of categories B Failure Set of categories A Success if every category of A is defined in B : A B K Android considère que tous les Intents implicites passés à startactivity() appartiennent à une catégorie default il faut donc l ajouter dans le manifest si l on désire que l activité puisse recevoir les intents sauf pour les activités qui définissent l action main ou la catégorie launcher. 32

L ES I N T E N T - F I L T E R S <intent-filter... > <action android:name="com.example.project.show_current" /> <action android:name="com.example.project.show_recent" /> <action android:name="com.example.project.show_pending" />... <category android:name="android.intent.category.default" /> <category android:name="android.intent.category.browsable" />... <data android:mimetype="video/mpeg" android:scheme="http"... /> <data android:mimetype="audio/mpeg" android:scheme="http"... />... </intent-filter> <intent-filter... >... </intent-filter> <intent-filter... >... </intent-filter> Un Intent doit matcher au moins un filtre. Les étiquettes de catégorie/action prédéfinies incluent le nom de package complet : Intent.CATEGORY_DEFAULT = android.intent.category.default 33

Q U E L Q U E S I N T E N T I M P L I C I T E S // exemple 1 Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://inria.fr")); startactivity(i); // exemple 2 Intent i = new Intent(); i.setaction(intent.action_call); i.setdata(uri.parse("tel:0102030405")); startactivity(i); // exemple 3 Intent i = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startactivityforresult(i, 42); @Override protected void onactivityresult(int requestcode, int resultcode, Intent data) { super.onactivityresult(requestcode, resultcode, data); if (requestcode == 42 && resultcode == Activity.RESULT_OK) { Uri contactdata = data.getdata();... } } 34