Android pour les débutants

A la découverte du nouveau framework

Qui suis-je ?

Jean-François GARREAU

images/jf.png
  • Consultant IT chez SQLI

  • Développeur Android à mes heures perdues

  • Un des membres fondateur du GDG Nantes

  • Créateur de CineShowTime images/cineshowtime.png

images/twitter-icon.png

@gdgnantes / @binomed / @uncle_bens1


images/google-Plus-icon.png

http://gplus.to/jefBinomed

Sommaire

images/android_cupcake.jpg

images/android_donut.jpg Android ?

images/android_eclair.jpg Concepts

images/android_froyo.png Economiquement intéressant ?

images/android_gingerbread.jpg Développement

images/android_honeycomb.png Liens

images/android_icecreamsandwich.jpg Questions

images/android_jellybean.png

Android ?

images/android_donut.jpg

Modèle choisi

Architecture

Langage

Avantages

Inconvéninents

Android

Modèle Choisi

  • OS libre basé sur un noyau linux.
  • Android c’est Google mais aussi d’autres boîtes :
  • Open Handset Alliance :
    • Ensemble de sociétés (84 aujourd’hui) dont l’objectif est de développer des normes ouvertes pour les appareils mobiles
    • Créé en 2007 à l’initiative de google.

Quelques débats existent quand à la main mise sur android par google…

Android

Architecture

images/system-architecture.jpg

Android

Historique des versions

  • 2007 : 1.1 → La base
  • 05 2009 : 1.5 (Cupcake) → Les Widgets
  • 09 2009 : 1.6 (Donut) → La synthèse vocale
  • 10 2009 : 2.0, 2.0.1, 2.1 (Eclair) → L’expérience utilisateur améliorée
  • 05 2010 : 2.2 (Froyo) → Le JIT
  • 10 2010 : 2.3 (Gingerbreard) → NFC
  • 01 2011 : 3.0, 3.1, 3.2 (HoneyComb) → Android au service des tablettes
  • 11 2011 : 4.0 (Ice Cream Sandwich) → Unification des versions tablettes et téléphones
  • 05 2012 & 10 2012 : 4.1 et 4.2 (Jelly Bean) → La rapidité en vue

Android

Langage

  • Java dans une version 1.5 light
  • Google a intégré une bonne partie des packages bas niveau Java.
    • Google a fait sa propre JVM =» Dalvik Virtual Machine
    • Tout le code est converti en .dex (dalvik Executable) avant d’être envoyé sur le téléphone.

Il existe aussi la possibilité de coder en php via un framework externe ASE (ajoute un interpreteur)

sinon google autorise avec le NDK du developpement C C++

Il existe aussi la possibilité de coder e,n C# avec mono android (dispo depuis peu pour android 4.0)

Sinon des solutions comme PhoneGap ou HTML5 via une webview !

Android

Avantages

  • Android est libre et en Java
    De plus en plus de frameworks sont compatibles Android
    • REST
    • Xstream
    • Spring
  • Le monde Java est très riche en tutoriels en tout genre.
  • Google travaille activement à enrichir le framework

Android

Inconvénients

  • Le manque de certaines librairies bas niveau
  • La fragmentation d’Android
    Par les versions
    Par le parc d’appareils

Android

Fragmentation

images/chart.png
Version Codename API Distribution

1.6

Donut

4

0.2%

2.1

Eclair

7

2.4%

2.2

Froyo

8

9.0%

2.3 - 2.3.2

Gingerbread

9

0.2%

2.3.3 - 2.3.7

10

47.4%

3.1

Honeycomb

12

0.4%

3.2

13

1.1%

4.0.3 - 4.0.4

Ice Cream Sandwich

15

29.1%

4.1

Jelly Bean

16

9.0%

4.2

17

1.2%

Les evolutions d’api ! Car comme le système est neuf, il évolue souvent et donc il faut faire des fois du code spécifique par target.

Concernant openGL on est obligé de faire du spécifique par téléphone. Des frameworks arrivent pour aider AndEngine, PlayN

Android avait pour vocation de poser des choses communes mais au final on constate que les constructeurs ne jouent pas vraiment le jeu.

Concepts

images/android_eclair.jpg

Activity

Fragments

Cycle de vie des activités

Les services

Les Intents

Les contents providers

Broadcast recivers

Le reste

Concepts

Activity

  • Base graphique
  • Une application graphique possède au moins une activité
  • Une activité est définie par un layout
    Définition xml des éléments graphiques
  • Une activité peut posséder des filtres de lancements

Les filtres servent par exemple à définir quelle sera l’activité principale quand on lance l’application

Concepts

Cycle de vie des activités

images/activity_lifecycle.png

Quand un process est trop longtemps mis en tache de fond il peut être killé

Concepts

Fragments

  • Comme une activité mais en plus basique
  • Une activité peut avoir N Fragment
  • Un fragment peut être réutilisé
  • Un fragment possède son propre cycle de vie
images/fragments.png

Les fragments sont la base à utiliser quand on envisage un développement

Concepts

Cycle de vie des fragments

images/fragment_lifecycle.png

Concepts

Service

  • Sortes de threads
  • Sont des tâches démons d’Android !
  • Permet de réaliser des tâches asynchornes
  • N’a pas besoin de couche graphique

Les services sont très utiles pour gérer tous les traitements un minimum longs

Attention cependant à bien les lancer dans des threads car sinon il bloquent le process qui en est à l’origine.

Donner un exemple de lecteur MP3 Ou alors d’avoir les accès HTTP

Concepts

Cycle de vie des services

images/service_lifecycle.png

Comme vous pouvez le voir, un service à la possibilité de communiquer avec un Binder (souvent son appelant) de cette manière on peut tenir au courant l’ihm des avancées du service.

Concepts

Intent

  • Gestion des messages dans Android
  • Ils peuvent transporter des informations
    Par défaut simples
    Mais on peut envoyer des objets complexes
  • Plusieurs applications peuvent les réceptionner
  • En mode broadcast

L’intent est très très important car sans lui les différents processus (activités, services, …) ne pourraient pas communiquer.

Si on veut faire passer des objets complexes, il faut que nos objets implémentent une certaine interface

L’avantage de la multi réception est d’avoir la possibilité de réécrire des briques métiers. On peut ainsi enrichir les fonctionnalités de bases.

Expliquer en quoi c’est puissant les boradcast ! Sms etc …

Concepts

ContentProvider

  • Sorte de base de données partagées
  • On peut définir ses propres contentProvider

De cette manière on peut accéder facilement aux données du téléphone

On peut aussi offrir la possibilité de toucher aux données de son application.

Concepts

BroadCastReceiver

  • C’est ce qui permet d’intercepter les messages du téléphone et les intents des autres applications

De cette manière on peut agir sur la réception d’un SMS ou d’un appel.

Concepts

Quelques autres concepts

  • Les widgets
  • SQL
  • L’internationalisation
  • Le draw9Patch
  • Natif
  • Sensors
  • Graphique :
  • Canvas
  • OpenGL ES

Il resterait encore plein de notions à traiter mais parlons rapidement de celles là.

Les widgets sont des éléments graphiques propres à android et disponible uniquement depuis l’application de bureau d’android. Les widgets sont des éléments indépendants ou non de l’application auquel ils appartiennent.

La base de données est SQLLite (connu au niveau HTML5)

L’internationnalisation est très simplifée, il suffit de déclarer un fichier par langue et le framework android s’occupe du reste

Le draw9Patch : très pratique pour les ressources graphiques =» principe de déclarer uniquement les zones extensibles.

Encore bien d’autres choses….

Economiquement Intéressant ?

images/android_froyo.png

Economiquement Intéressant ?

Les premiers utilisateurs étaient les déçus d’iphone et surtout des geeks =» on recherche beaucoup du gratuit

Il faut lancer une dynamique de payement =» ce n’est pas par ce que notre application est développée par un amateur qu’elle ne mérite pas une rétribution

L’arrivée du paiment in app est une grande avancée dans la monétisation des applications

Economiquement Intéressant ?

L’android market

  • Moyen officiel de distribuer ses applications
  • Pourcentage 70% développeur, 30% google
  • L’android market n’est pas le seul market :
    • Amazon
    • AppsLib (Archos)
    • SlideMe
    • Camangi

Parler des pays ayant le market payant

Développement

images/android_gingerbread.jpg

Les composants graphiques

Développement

Emulateur

images/emulator.png
  • Permet d'émuler efficacement le téléphone
    • GPS
    • Téléphone
    • SMS
  • Multi résolution

On peut aussi simuler les perturbation réseaux

On peut faire du debug

O n a accès aux logs de l’application

On peut faire des captures d'écrans

Parler de ce qu’on ne peut pas faire : BluTooth, NFC, Caméra c’est pas évident, …

Développement

Les éléments graphiques

  • Les TextView et EditText
images/textViewAndEditText.png

Développement

Les éléments graphiques

  • Button et ImageButton / CheckBox, RadioButton, Spinner
images/ImageButton.png images/ChcRadioSpinner.png

Développement

Les éléments graphiques

  • Gallery, GridView et ListView
images/GalleryView.png images/GridView.png images/ListView.png

Développement

Les éléments graphiques

  • TabView



images/TabView.png

Et bien d’autres …

Et il en existe encore pleins d’autres … TimePicket, DatePicker ….

Développement

Multi Plateformes

  • Développer sous android se fait aussi facilement sous linux, windows ou mac.
  • Sous windows il suffit d’installer les drivers et le téléphone est reconnu
  • Sous Linux il faut modifier un fichier en spécifiant le constructeur
  • Sous Mac ça marche direct

Développement

Hello World

images/project_1.jpg

On défini le nom du projet,

La version android visée

Le fait de choisir google apis, vous permet d’avoir accès aux api google du genre maps.

On doit ensuite choisir un nom de package afin d’intentifier votre application (ils sont unique pour les applis du market)

On définit une Activité par défaut

Développement

Le Projet

images/project_3.png images/arrow_left.png images/arrow_left.png images/arrow_split.png images/arrow_left.png

Votre code



Le code auto généré



Vos ressources dynamiques





Le manifest

Le projet est constitué d’une partie statique (votre code, vos ressources)

Et d’une partie dynamique (la partie gen) contenant toutes les constantes.

La partie res est très importante car elle contient toutes les ressources « dynamiques » extérieurs à votre projet

On peut voir différents répertoire en fonction de la résolution

Développement

Le layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello"
        />
</LinearLayout>

Déclaration d’un sumple texte dans une vue. On remarque que le texte provient d’une ressource

Parler de l’aspect multi résolution

Les xml de définitions peuvent être spécifiques =» un chaque téléphone peut avoir une présentation différente. On peut définir des agencements différents entre les différentes résolutions

On peut aussi affecter des thèmes très simplement à nos applications

Développement

Manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.binomed.sqli"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Convert"
                  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>
    <uses-sdk android:minSdkVersion="9" />

</manifest>

On retrouve le nom de l’application, l’icone, la déclaration de l’activité principale

Liens

images/android_honeycomb.png

Liens

http://developer.android.com/index.html

http://android.git.kernel.org/

http://androidcookbook.oreilly.com/

23 liens graphiques : http://goo.gl/9yxu6

Création d’icones : http://goo.gl/zCxLd

http://www.iconfinder.com/

http://www.androiduipatterns.com/

Préconisations Google : http://goo.gl/OsR2L

Github Jean-François : https://github.com/organizations/binomed

Questions

images/andquestionsag.png