Fiche Android : Outils de développement pour AndroidObjet de la ficheÉtat de la fiche
|
![]() |
Le package représente l'identifiant unique de l'application. L'application elle même est définie de façon générale par les consignes suivantes :
android:allowBackup="true" : concerne principalement les applications avec de nombreux paramètres de réglage. Cette directive autorise un backup de vos paramètres à partir d'une source distante (cloud par exemple). Si un utilisateur demande une restauration "sortie usine" ou si l'application est réinstallée sur un autre appareil, le système restore automatiquement vos données sauvegardées dès que l'application est réinstallée. Cela évite à l'utilisateur de re-paramétrer l'application. L'application peut être composées d'une ou plusieurs activités. Chaque activité comme l'application étant identifiée par les consignes suivantes :
|
Ce répertoire contient tous les fichiers qui définissent l'interface utilisateur. Ces fichiers sont de type xml et leur noms (dans la limite syntaxique d'Android) peuvent être quelconques.
En effet un layout définit la structure d’une interface utilisateur dans l'application ou dans une activité. Tous les éléments d'un layout sont construits en utilisant une hiérarchie d’objets View et Viewgroup. Un layout dessine habituellement quelque chose que l’utilisateur peut voir et interagir avec. Alors qu’un Viewgroup est un conteneur invisible qui définit la structure de disposition pour View et d’autres Viewgroup.
|
|
Cette vue ne contient qu'un RelativeLayout, qui sert de conteneur pour une zone de texte. Cette zone de texte (textview dans notre exemple) est définie avec les attributs suivants :
Ces répertoires contiennent des images haute définition comme par exemple des bitmaps.
Le dossier drawable contient l'icône de l'application (ic_launcher.png) et cela dans les quatre résolutions (ldpi = basse résolution, mdpi = résolution moyenne, hdpi = haute résolution, xhdpi = très haute résolution).
Répertoire pour les différents fichiers XML contenant certaines ressources, comme par exemple :
| strings.xml
Ce fichier qui contient les chaines de caractères de l'application référencées par l'attribut "name" exploitable à partir de l'application. Pour information il ne doit pas forcement se nommer strings.xml. Vous pouvez lui donner le nom que vous souhaité, il doit seulement se trouver dans le dossier values.
Il est plus pratique de mettre les textes dans un fichier dédié, que de les intégrer directement dans le code java. D'une part pour des raisons de maintenance, mais aussi si vous souhaitez distribuer votre application à l'international.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">monwebfacile</string>
<string name="hello_world">Hello world!</string>
<string name="menu_settings">Settings</string>
</resources>
styles.xml
<resources>
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Light">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations
that are NOT specific to a particular API-level can go here. -->
</style>
</resources>
|
Répertoire pour les fichiers sources principaux (les fichiers java).
MainActivity.java
package com.example.monwebfacile;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
Nota : Au démarrage de l'application par défaut Activity class démarre et charge un fichier qui permet d'afficher "Hello World." Bien évidemment ce n'est pas terrible, mais important pour la compréhension des mécanismes.
spécifie le style de l'interface utilisateur Android
| Holo Light | Holo Dark | Holo Light with dark action bar. |

Ce type d'icone represente votre application sur l'écran de votre tablette.

A l'aide de cet outil vous pouvez personnaliser une launcher icone. Avant de publier votre application vous devez vérifier que votre icone est conforme aux spécifications suivantes concernant la taille et l'échelle :

Toutes les applications doivent être signées. Le système sous android destinataire de l'application ne l'installera pas si le fichier .apk n'est pas signé.
Il faut donc signer l'apk avant de diffuser l'application. Pour cela dans le Package Explorer faire un click droit sur le nom du projet concerné, puis sélectionner Android Tools et enfin Export Signed Application Package

| 1 => sélectionnez votre projet, puis Next | 2 => Créer une nouvelle clé en définissant le répertoire de stockage et le mot de passe, puis Next |
![]() |
![]() |
| 3 => Définissez les paramètres de la clé, puis Next | 4 => Sélectionnez le répertoire de stockage du fichier apk, puis Finish |
![]() |
![]() |
Une fois le fichier apk généré, vous pouvez le transferer par mail, ou transfert de fichier vers votre appareil android. Une fois récupéré dans votre appareil, un double click sur le fichier lance l'installation de l'application
ATTENTION : Dans les paramètres de sécurité de l'appareil il faut autoriser l'installation d'applications non Market.
Il est important d'effectuer toutes les manipulations de fichiers dans l'environnement Eclipse, car toute modification comme par exemple un renom de fichier sera automatiquement répercuté à l'ensemble du projet.
De même pour les coller, effacer de répertoires ou de fichiers.
Click droit sur le projet dans le Package Explorer

Click droit sur le projet dans le Package Explorer

Click droit sur l'élément du projet dans le Package Explorer

Click droit sur le projet dans le Package Explorer


Eclipse met à votre disposition un émulateur sur votre ordinateur (donc sans utiliser une tablette ou un téléphone physiquement) et qui va se comporter comme se comporterait votre appareil Android. Idéal pour tester et mettre au point votre application en local.
L'émulateur Android simule le hardware et l'environnement logiciel d'une tablette ou d'un téléphone (sauf émission d'appel) sous Android.
Comme sur votre tablette l'émulateur permet une complète navigation et propose les différents "control keys" que vous pouvez activer à partir de l'application.
Cet outil est idéal pour tester et mettre au point votre application en local, et cela pour diverses configurations matérielles. On peut utiliser tous les services de la plateforme Android comme par exemple invoquer d'autres applications, accéder au réseau, au wifi, aux systèmes audio et video, aux notifications et aux thèmes.
| Sélectionnez Android Virtual Device Manager (AVD) | Paramétrez le device |
![]() |
![]() |
"Device" : sélectionne le type d'appareil (principalement le dimensionnement de l'écran) sur lequel appliquer la simulation.
SDCard : pour créer la zone mémoire qui correspond à celle de votre téléphone ou tablette. Cela vous permettra d'éditer des fichiers à partir de votre application android, de rajouter ou d'effacer des fichiers à partir de la console.
"GPU emulation" : autorise automatiquement l'accélération graphique (option disponible pour applications avec API niveau 15, revision 3 et plus haut).
"Snapshot" : n'est pas disponible pour les émulateurs avec accélération graphique sélectionnée. et permet un lancement rapide de l'émulateur (sauf la première fois lorsqu'il n'existe pas de snapshot initial).
Click droit sur le projet dans le Package Explorer

Il s'agit d'un outil de debugg qui permet d'obtenir des informations sur les applications en cours d'exécution ainsi que de leur environnement. L'émulateur doit être en cours d'utilisation.


A partir de l'écran principal => DDMS en haut à droite ou Java pour revenir à l'écran principal.


C'est le fichier exécutable de l'activité.
webView = (WebView) findViewById(R.id.webview); : instanciation de l'objet graphique webview permettant de le récupérer à partir de son id, ce qui permet d'agir sur cette instance même si elle a été créée via une définition XML.
Par défaut une webview n'est pas à proprement parler un navigateur, ne supporte pas le JavaScript et les erreurs sur les pages Web sont ignorées. Elle se limite à afficher des pages HTML pures dans lesquelles l'utilisateur n'a pas à interagir avec la page web, et la page web n'interagit pas avec l'utilisateur. D'un autre coté on peut lui appliquer de nombreuses personnalisation dans lesquelles on peut ajouter les fonctions absentes de base, en autres :
Android met à notre disposition la possibilité d'afficher des messages dans un pop-up. Le contenu du pop-up ou toast est initialisé par le développeur de l'application.
Afin de facilité l'utilisation de l'affichage de ces petits messages on va créer (dans la partie // Méthodes filles ) une fonction public void myToast(String theMessage) qui exécutera le code d'affichage du toast chaque fois qu'on l'appelera (à partir de n'importe ou dans la classe principale) par l'instruction myToast("Ce que je veux afficher");
La syntaxe générale pour générer un toast est : Toast toast = Toast.makeText(context, text, duration);.
Tout d'abord on doit instantier un objet toast avec la méthode makeText : cette méthode fonctionne avec 3 paramètres : le contexte de l'application, l'information à afficher et la durée d'affichage. La méthode retourne un objet Toast que l'on peut afficher avec show().
Nous verrons ultérieurement comment personnaliser simplement ce toast : dimension et couleur du texte, fond, positionnement etc., toutefois il est possible grace à un layout d'avoir des personnalisations beaucoup plus complexes (rajouter des images, textes etc.)
A titre d'information voici un type de code correspondant à l'utilisation d'un layout :
La sous classe WebViewClient (de la classe WebView) est appelée lorsque quelque chose a un impact sur le résultat attendu, et donne ainsi à l'application la possibilité de prendre la main lorsque une nouvelle URL est en cours de chargement dans la webview courante.
| Méthodes | Commentaires |
|---|---|
| shouldOverrideUrlLoading(WebView view, String url) {} | Permet à l'application d'exécuter une opération lorsque une nouvelle URL est sur le point d'être chargée dans la WebView courante. La méthode retounera true si l'application fait un traitement, false dans le cas contraire. |
| onPageStarted(WebView view, String url, Bitmap favicon) {} | Notifie l'application que le chargement d'une page a démarré. La méthode est appelée une seule fois pour chaque page principale chargée, ce qui signifie qu'une page contenant des frames n'invoquera cette méthode q'une fois pour la frame principale. |
| onPageFinished(WebView view, String url) {} | Notifie l'application que la page a finie d'être chargée. La méthode est appelée une seule fois pour chaque page principale en fin de chargement. |
| onLoadResource(WebView view, String url) {} | Notifie l'application que la WebView chargera la ressource spécifiée par l'URL concernée. |
| onTooManyRedirects(WebView view, Message cancelMsg, Message continueMsg) {} |
Notifie l'application que le nombre maximal de redirections a été atteint.
paramètre cancelMsg : Le message à envoyer si l'application demande l'arrêt de l'action. paramètre continueMsg : Le message à envoyer si l'application désire continer son action. |
| onReceivedError(WebView view, int errorCode, String description, String failingUrl) {} |
Reporte une erreur à l'activité. Ces erreurs concernent le réseau (exp coupure wifi).
paramètre errorCode : Le code d'erreur HTTP. paramètre description : Description de l'erreur. paramètre failingUrl : L'URL en défaut. |
| doUpdateVisitedHistory(WebView view, String url, boolean isReload) {} |
Notifie l'application pour mettre à jour la liste des liens visités.
paramètre url : L'URL visitée. paramètre isReload : True si l'URL est rechargée. |
| onFormResubmission(WebView view, Message dontResend, Message resend) {} |
Cas de ré-envoi de données par la méthode post (formulaires).
paramètre dontResend : Le message à envoyer si le navigateur n'est pas autorisé à envoyer les données. paramètre resend : Le message à envoyer si le navigateur doit renvoyer les données. |
| onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {} |
Notifie l'application d'une erreur de requête de certificat. Affiche un message à l'utilisateur et demande si celui-ci veut Continue(handler.proceed()) ou Non(handler.cancel()).
paramètre handler : Objet SslErrorHandler pour le management de la réponse de l'usager. paramètre error L'objet erreur SSL. |
| onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {} |
Notifie l'application d'une demade d'authentification de la part de la page web.
paramètre handler : Objet HttpAuthHandler pour le management de la réponse de l'usager. paramètre host : Host demandant l'authentication. paramètre realm : Aide utilisateur pour sauvegarde des informations en vue des visites futures. |
| shouldOverrideKeyEvent(WebView view, KeyEvent event) {} |
Possibilité pour l'application de gérer des évènements clavier (touche) de façon synchronisée.
paramètre event : Evènement touche. returner True si l'application manage l'évènement, False dans l'autre cas. |
| onUnhandledKeyEvent(WebView view, KeyEvent event) {} |
Notifie l'application que cet évènement (touche) n'est pas géré par le WebView (exeption faite des touches système, ou si shouldOverrideKeyEvent renvoie true.
paramètre event : Evènement touche. |
| onScaleChanged(WebView view, float oldScale, float newScale) {} |
Notifie l'application que les dimensions d'affichage debView ont changées.
paramètre oldScale : Ancien facteur d'échelle. paramètre newScale : Nouveau facteur d'échelle. |
La non accessibilité au web peut provenir soit de l'accés au site lui-même (fichier effacé, non chargeable, serveur hors service etc..), soit de l'appareil Android lui même (panne 3G, WIFI).
Nous allons nous interresser au cas de l'appareil Android et afficher une page d'erreur personnalisée pour signaler clairement l'anomalie.

On introduit ici la méthode onReceivedError() de la sous classe WebViewClient qui va permettre de gérer des erreurs d'accés à la page Web.
En cas d'erreur on affichera une page HTML locale et pour cela on utilisera un accés à une nouvelle ressource contenue dans un nouveau répertoire : assets.
Informations sur la page html signalant l'erreur
Localisation : assets/erreur_connexion/erreurTestWebView.html
Insérer le code lié à la déclaration de la sous classe WebViewClient
Déclarer le répertoire et le nom du fichier html (répertoire assets) à afficher en cas d'erreur.
Give the host application a chance to take over the control when a new url is about to be loaded in the current WebView.
shouldOverrideUrlLoading() est une méthode publique de WebViewClient