Développer sous Android
Préambule
Le système d'exploitation Android est utilisé sur différents appareils. Les plus connus étant les smartphones ou les tablettes sous Android. Vous pouvez trouver une petite liste d'appareils que j'ai pu tester.
Pour ceux qui ne connaissent pas le monde Android à l'utilisation, vous trouverez ici le B.A.Ba des menus et manipulations sur ces appareils.
Il s'agit de cours pour développer sous Android. Mais avant de commencer, il faut avoir des connaissances JAVA de base pour pouvoir comprendre le développement Android...
Développer Android
Il existe différents outils pour développer sous Android. Ici, nous utiliserons eclipse ADT (c'est ce qui est préconisé par Google, mais ce n'est pas obligatoire). Je pars du principe que vous connaissez déjà cet environnement !
- Le 15/05/2013 Google a présenté un nouvel environnement de développement pour Android basé sur IntelliJ IDEA Community Edition de Jetbrains.
Cet environnement devient l'environnement officiel de développement depuis juillet 2015 et le plugin ADT utilisé sous l'environnement Eclipse ne sera plus maintenu à partir de la fin de l'année 2015.
Cet environnement sera disponible pour Linux, Windows et OS X et devrait permettre entre autre de visualiser directement vos écrans sous différentes résolutions ou encore l'internationalisation (visualisation sous différents langues). Cette version est encore en version béta.
- Septembre 2016, Android Studio 2.2 est disponible !
Le système d'exploitation d'un appareil tournant sous Android est un système Unix (Linux). Cependant, les applications qui seront développées sur cette plateforme seront généralement exécutées dans une JVM spécifique: Dalvik ou ART (depuis Android 5.0).
Conséquence: Une application JAVA standard ne pourra pas tourner directement sous Dalvik ou ART. Par contre, il sera possible d'utiliser certains JAR du moment qu'il n'y a pas d'interfaces graphiques dedans et qu'elles ne soient pas trop lourdes. De même, une application Android ne pourra pas tourner sous une JVM JAVA.
Il ne s'agit pas d'un JAVA pour mobile, mais bien plus, limite du JAVA SE. En fait, c'est une version spécifique qui utilise la syntaxe du JAVA, mais produit du code totalement incompatible avec JAVA. Donc vous ne retrouverez pas toutes les librairies de JAVA SE. Mais par contre, vous en trouverez d'autres spécifiques à l'environnement Android.
IMPORTANT:
Volontairement dans les exemples qui vont suivre, les programmes ont tous le même package fr.free.supertos. Ce qui évitera d'avoir une multitude de programmes installées sur votre appareil. En effet, sous android, une application est nommée par son package. Donc s'ils portent tous le même nom, le dernier package installé va tout simplement écraser le précédent.
Chapitres
Configuration du poste de travail
Explication sur "Mon premier programme"
- Présentation d'une activité
- Cycle de vie
- Création d'une activité
- Mettre fin à une activité
- Les différentes classes d'activité
- Fragment
- Différents fichiers de configurations pour différents types d'écrans
- ViewGroup/Layouts (ou comment positionner des objets graphiques)
- View/widgets (Les objets graphiques)
- Regrouper les styles dans un fichier XML
- La classe Log
- Visualiser les Logs
- Les filtres d'intention
- Définir un filtre d'intention
- Premier type d'intention: le routage en interne/intention explicite
- Second type d'intention: le routage en externe/intention implicite
- Différentes solutions pour exécuter une activité
- Gérer les erreurs causées par absence d'activité répondant à l'intention
- Définir les mimes pour nos activités
- Développer une activité exploitable par intention implicite
- Forcer le choix par l'utilisateur d'une activité si plusieurs activités présentes
- Installer un .apk par code
La classe Environment sous Android (complément à la classe File)
- Les répertoires de l'application, des données, des téléchargements ou racine d'Android
- Les répertoires dédiés à l'utilisateur
- L'état du volume externe
- Les threads
- Le Handler
- Le Looper
- AsyncTask
- Toast
- Message d'alerte
- Complément sur les messages d'alerte
- Exemple
- Afficher un message/définir une intention
- Vibration
- Allumer la LED tricolor
- Produire un son
- Désactivation de la barre de titre
- Désactivation de la décoration d'une fenêtre, barre de notification
- Interdire la mise en veille de l'écran.
- Opérations graphiques de bases (point, droite, rectangle et cercle)
- Utilisations des bitmaps
- Afficher du texte
- Animation 2D
- Live wallpaper
- Toucher l'écran
- Accéléromètre
- Clavier
- Interdire la rotation (c'est radical !)
- Laisser Android gérer la rotation mais sauver l'état de l'activité
- Traiter personnellement la rotation
Live Wallpaper en 2D (déjà traité dans La 2D sous Android)
- Les grandes lignes
- Première étape - création du projet
- Deuxième étape - création d'une ressource wallpaper
-Troisième étape - le wallpaper service
- Quatrième étape - Le fichier ManifestAndroid.xml
- Exemple
- Le setup du wallpaper
- Installation automatique d'un live wallpaper
- Diffuser un évènement
- Déclarer les broadcast receivers de votre application
- Créer un broadcast receiver
- Permission sur les intentions
- Priorisation de l'ordre d'appel des broadcast receivers
- Intention sur activité, service et broadcast
- Autres méthodes
- Exemple
Le téléphone, internet, SMS...
- Informations sur le téléphone
- Composer un numéro
- SMS
- Navigateur internet
- Introduction
- Les autres répertoires sous res
- Répertoires res/xxx obligatoires
- Introduction
- SQLite sous Android
- Exemple de code
- SQLiteQueryBuilder
- Problème base relationnelle et l'objet
- Rendre accessible la base de donnée hors de votre application
- ContentProvider
- Accéder à un ContentProvider (généralité)
- Déclaration du ContentProvider dans AndroidManifest
- Création de son propre content provider
- Traitement de l'URI
- ContentProvider et SQLite
- Exemple
- Effet sonore
- Jouer une musique
- Jouer une musique via intention vers un player multimédia
- Tout d'abord, les bases
...
- Démarrer un service après le boot de l'appareil
- Les différents types d'alarme
- Programmer une alarme unique
- Programmer une alarme répétitive
- Interrompre une alarme
- Liste (non exhaustive) des capteurs
- Exemples de code
- La caméra comme appareil photo
- La caméra pour filmer
- Le développement des app widgets
- C'est quoi une AppWidget
- Les bases de l'AppWidget
- Les différentes intents/méthodes pour un appWidget
- Maj le contenu des appWidgets
- Aspect des appWidgets
- Risques d'ANR
- Lancer des maj périodiques ou non
- Introduction
- Changement d'état de la batterie
- Etre informé de certaines modifications de l'état de la batterie
- Les bases d'OpenGL SE
Exemple d'application Android
Une application de rappel des anniversaires.
D'autres API plus standards sont disponibles
(JAVA bases, donc à adapter pour vos programmes sous android !)
- File (Voir La classe Environment sous Android en complément à la classe File)
- API standard ZIP
- Zip4J
Annexes
- Les répertoires d'un projet Android
- Permissions d'accès aux ressources
- Exécuter des commandes avec les privilèges du root en java
- Gravity, poids, positionnement et surface occupée par un objet
- Gestion des versions sous Android
- Les fichiers de ressources Android
- Passer en ligne de commandes pour administrer un android (terminal emulator/adb)
- Les informations exif d'un jpeg
- Un .apk
Des erreurs
Erreur lors de la compilation:
Si vous obtenez un message sous la forme Errors running builder 'Android Package Builder' on project "le nom de votre projet", alors vous avez un souci de version de JAVA. Vérifiez la variable d'environnement JAVA_HOME sous Windows, elle doit pointer sur un JAVA de SUN ou Oracle version 5 ou 6 (relancez eclipse si vous la changez).
Erreur au lancement d'un émulateur Android (AVD):
Si au lancement d'une AVD, vous obtenez une erreur "Failed to allocate memory: 8", le problème est certainement lié à un bug dans l'émulateur. Lors du paramétrage de votre appareil virtuel, l'unité de mesure de votre mémoire vive à allouer à l'AVD n'a certainement pas été enregistrée. Lors du lancement de cet AVD, celuic-ci cherche alors à allouer de la mémoire dans une unité bien plus grande que celle que vous vouliez certainement utiliser:GB(?) au lieu de votre choix initial. Le système ne peut évidemment pas répondre favorablement à la requète d'où le message d'erreur.
La solution consiste à modifier manuellement ces informations en allant sous (suivant la version de Windows):
C:\Users\<user>\.android\avd\<avd-profile-name>.avd\config.ini
ou c:\Documents and settings\<user>\.android\avd\<avd-profile-name>.avd\config.ini
ou <user> est le nom de votre profil utilisateur Windows, et <avd-profile-name> le nom que vous avez donné à votre émulateur.
Rechercher dans ce fichier l'attribut hardware nommé hw.ramSize et précisez l'unité à utiliser après la valeur (par exemple hw.ramSize=1024 par hw.ramSize=1024MB).
Liens intéressants
developer.android.com indispensable, mais en anglais !
Le livre andBook au format PDF gratuit, en anglais aussi !
et des tutoriels français
www.pointgphone.com/page/3?s=tutoriel
http://android.developpez.com/cours/
Il y a en fait peu de littérature en français sur le net pour le moment (janvier 2012). Eventuellement des généralités en provenance d'universités...
Trouvé ceci en Anglais:
http://www.tutorialspoint.com/android/index.htm
http://www.vogella.com/tutorials/android.html