Apprendre à créer une application Android gratuitement en ligne


Télécharger Apprendre à créer une application Android gratuitement en ligne

★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Télécharger aussi :


Introduction à Android

Jean-Marc Lecarpentier Université de Caen

Avertissement

Je ne suis pas un développeur Android.

Écosystème Android

•   Android 86.8% - iOS 12.5% - Windows0.3%?

(stats Q3-2016)

•   Plate-forme Google Play 

•   Fin 2016 : 2,6 million apps

•   2,4M apps gratuites

•   12% apps de qualité insuffisante

•   Diffusion simple

•   Partage 70/30 (ou 85/15 avec abonnement)

Sources :

Coûts de développement

 

Android

•    Environnement de développement

•    Basé sur noyau Linux

•    Applications en Java

•    Architecture spécifique

•    Java VM adaptée aux terminaux mobiles

•    2008 : Android 1

•    2013 : Android 4.4 KitKat

•    2014 : Android 5 Lollipop

•    2015 : Android 6 Marshmallow

•    2016 : Android 7 Nougat


         

Apps

•     App = Android Application Package 

•     Archive zip composé de fichiers JAR et autres

•     Extension .apk

•     1 App = 1 Linux user id

•     1 App = 1 process = 1 virtual machine

Développer pour Android

•     SDK Android

•     IDE Android Studio

•     Prêt à l’emploi avec le SDK Android

•     Basé sur IntelliJ

•     Gestion des émulateur

(Android Virtual Device ou AVD)

•     Pré-requis : ?

-    programmation OO?

-    Java?

-    XML

Au programme

•     Comment créer une App pour démarrer

•     Voir les concepts généraux

•     Composants Android : Activity, Intent, View, etc

•     Structure d’une App : fichiers XML, programmes Java, code auto-généré, ressources, etc

Créer une App

•      Utiliser l’assistant de Android Studio

•      Choisir un namespace Java (à partir de  l’URL de votre «entreprise»)

•      Choisir la version minimale de SDK (compatibilité antérieure) ?

? Attention il faudra installer les composants SDK 

•      Choisir les noms de l’activité et du layout utilisés au lancement de l’application

Structure

Tester son App

•   Connecter un appareil Android : multiplicité des terminaux

•   Utiliser un AVD : tester sur de multiples configurations

•   Android Studio inclue gestionnaire de AVD et de Android SDK

Composants de base

•      Manifest : déclaration des caractéristiques de l’App

•      Activity : un écran de l’App. Programme Java spécifiant les comportements de l’écran

•      res/layout : définition du layout d’une Activity

•      Intent = message asynchrone pour activer des composants (par ex. Activity)

Android Manifest

•      Fichier obligatoire qui décrit les caractéristiques de l’App :

•      requirements : par ex. camera indispensable

•      que faire au démarrage

•      permissions

•      icônes

•      etc.

•      Android 6 permet de gérer les permissions plus finement

Layout

•      Fichier XML déclaratif

•      Gérer la diversité des appareils

•      Éditeur Wysiwyg et code XML généré par le SDK

•      Par programme

•      Dynamique, créé à l’exécution

•      Ne pas utiliser pour les éléments fixes

Capter un évènement

•     Définir dans le Layout

•     attribut onClick dans la déclaration XML 

•     <Button android:id=“@+id/gogo"?

android:onClick=“afficher” />

•     Méthode correspondante afficher dans l’activité

•     Signature : public void afficher(View view) { … }

Capter un évènement

•     Par programme : mettre un capteur d’évènement lors de la création de l’activité (méthode onCreate) 

•     Utilisation de callback

Button btnGo = (Button) findViewById(); ?btnGo.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// ce qu’on fait lorsque le clic est capté }

}

});

Callback onClick

•     Méthode déclarative ou par programme

•     Méthode publique et valeur de retour void

public void onClick(View v) public void afficher(View v)



•     objet View en argument : l’élément graphique qui a capté l’évènement

Accéder aux éléments

•     Méthode findViewById() de Activity

•     Identifiants générés par le SDK et gérés par la classe R.java

•     Exemples :?

TextView txtSaisie=(TextView) findViewById(R.id.saisie);?

Button btnGo=(Button) findViewById();?setContentView(R.layout.activity_main);

Activity

•     Activity = écran visible à l’utilisateur

•     Une seule Activity “active” à la fois

•     Gestion de l’état d’une activité

•     Gestion de la pile des Activity

Activity

•     Définit un écran de l’App : layout, évènements, comportement

•     Fonctionnement à base de callbacks : onCreate(), onPause(), etc

•     Lancement d’une App ? onCreate() de l’activité déclarée comme “launcher” ou “main” dans le Manifest

onCreate()

• Exécuter les actions nécessaires au lancement de l’App

 ? créer les variables de classe

 ? déclarer l’interface (Layout XML) à utiliser?

        (méthode setContentView) 

 ? plus d’instructions / initialisations si besoin

Pile

 

États

•     Resumed (ou running) : focus utilisateur

•     Paused : partiellement visible mais pas en haut de la pile car caché par une autre Activity

•     Stopped : passée an arrière-plan, inactive mais toujours existante en mémoire

Cycle de vie et callbacks

 

Enregistrer un état

 

Activity A à B

1.   Activity A : onPause()

2.   Activity B : onCreate(), onStart(), onResume()

3.   Activity A : onStop()?

Attention à gérer les actions dans onPause() !

Activity et Manifest

•     Activity déclarée dans le Manifest

•     Associée à un nom?

<activity android:name=".BasicViewActivity" android:label="Basic View

Tests">

<intent-filter>

<action android:name=".intent.action.ShowBasicView"/>

<category android:name="android.intent.category.DEFAULT" />

</intent-filter>

</activity>

Intent

•     Objet servant à démarrer Activity, Service, etc

•     Associé à des données

•     Intent prédéfinies dans Android

•     Intent définies dans l’application

•     Intent implicite/explicite

Propriétés de Intent

•   action : action à exécuter (ACTION_VIEW, etc)

•   data : données pour réaliser l’action, par ex. un n° de tél. pour ACTION_CALL. Sous la forme d’un Data URI : ex. tel:

0231456543 ou pour voir un contact content://contacts/people/1 

•   category : informations complémentaires

•   type : spécifie un type MIME (géré par l’objet Intent)

•   component : spécifier le composant à invoquer (Intent explicite)

•   extras : ensemble d’informations complémentaires

Activer des Intent prédéfinies

•      Méthode startActivity : pour lancer une autre Activity

•      Prend un objet Intent en argument

// visualiser un site web Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setData(Uri.parse("")); startActivity(intent);

// lancer la numérotation téléphone

Intent intent = new Intent(Intent.ACTION_DIAL); startActivity(intent);

// lancer un appel téléphonique à un n° donné

Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:555–555–5555"));

startActivity(intent);

Intent implicite

 

Intent implicite

•    Android va regarder quelles activités peuvent répondre à l’action demandée

•    Si plusieurs possibilités, demander à l’utilisateur

•    Noms d’actions génériques : ACTION_SEND, etc

•    Utiliser pour lancer des actions gérées en dehors de l’application elle-même

Intent-filters

•   Définis pour les objets Activity dans le Manifest

<activity android:name="ShareActivity">

    <intent-filter>

        <action android:name=""/>

        <category android:name="android.intent.category.DEFAULT"/>

        <data android:mimeType="text/plain"/>

    </intent-filter>

</activity>

•   action : définit les actions auxquelles l’Activity peut répondre?

ACTION_MAIN  précise que c’est le point d’entrée de l’application

•   category : type de catégorie de l’Intent qui invoque

( CATEGORY_DEFAULT par défaut, CATEGORY_LAUNCHER pour

un lanceur d’application, etc)

•   data : type de données acceptées

Vérifier Intent

•     Créer une Intent implicite

Uri number = Uri.parse("tel:5551234");

Intent callIntent = new Intent(Intent.ACTION_DIAL, number);

webpage = Uri.parse(""); Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);



•     Question : existe-t-il une Activity pour répondre ??

PackageManager packageManager = getPackageManager();

List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);

boolean isIntentSafe = () > 0;

Résolution des Intent

•     Comment décider de l’Activity à démarrer pour une Intent implicite

•     3 critères : action, données, catégorie

•     Détails

Intent explicite

•      Intent demande une action spécifique d’un package donné

•      Utiliser le actionName de l’Activity à lancer (défini dans le Manifest)pour lancer une Activity externe à l’app?

String actionName= ".intent.action.ShowBasicView";

Intent intent = new Intent(actionName);

startActivity(intent);

Intent explicite

•     Pour lier 2 activités d’une même app

Intent intent = new Intent(this, OtherActivity.class);

•     Arguments :?

-  objet Context (ici l’objet Activity courant)?

-  la classe à utiliser (ici le nom de l’activité)

•     Méthode startActivity

Intent intent = new Intent(this, OtherActivity.class);

startActivity(intent);

Transmettre des données

•     Comment passer des informations d’une activité à une autre ?

•     Intent peut contenir des extras

•     extras : ensemble de paire (nom, valeur)

•     Ajouter une paire aux extras : méthode putExtra()

Transmettre des données

•     Clé : Constante publique de l’activité en cours

•     Bonne pratique : préfixer par le namespace de l’App

public final static String MON_MESSAGE = “fr.greyc.users.lecarpentier.applicationdetest.MON_MESSAGE";

•     Valeur : gérée par le programme

Intent intent = new Intent(this, OtherActivity.class);

String message = "Un message de test"; intent.putExtra(MON_MESSAGE, message);

startActivity(intent);

Recevoir les données

•     Géré dans onCreate() de l’Activity démarrée

•     Récupérer l’objet Intent qui a déclenché l’activité

Intent intent = getIntent();

•     Récupérer le contenu des extras pour la clé donnée

String message = intent.getStringExtra(MainActivity.MON_MESSAGE);

Resources

•     Tout ce qui n’est pas du code

•     Séparer présentation (layout) et exécution (java)

•     Proposer des alternatives de layout en fonction de : ?    - type ou taille du terminal?

-    langue d’interface?

-    etc

•     Fichiers déclaratifs XML dans dossier res/

Ressources et classe R

•     R.java : classe générée par l’IDE pour référencer toutes les ressources

•     R.layout.filename pour les fichiers XML de layout

•     R.string.stringId pour les chaines de caractères

•     R.menu.filename pour les menus

•     Etc.

Resources et textes

•     Ne JAMAIS mettre un texte en « dur » dans les fichiers XML

•     TOUJOURS utiliser une référence vers une resource

•     Fichier : contient les textes à utiliser, avec un nom (attribut name)

•     À éditer avec le SDK pour mettre à jour les références

En bref

•    Android c’est quoi ?

•    Ma première App : Hello Android! 

•    Créer un Layout

•    Afficher des informations

•    Lancer une autre activité et les objets Intent

•    Transmettre un message à une activité

•    Ressources XML et R.java

Ressources

•     : tout y est (ou presque)

•     : tutoriels progressifs pour apprendre

•     : introduction & download

•     : plein de cours Android



19