Structure d'un projet
Un projet Android est structuré de la manière suivante :AndroidManifest.xml
: fichier principal à la racine du projet qui définit les informations et les composants de l'applicationsrc
: répertoire contenant le code source Javares
: répertoire des ressources statiquesgen
: répertoire et fichiers générés automatiquement par l'IDE (dont la classeR
)
AndroidManifest.xml
Ce fichier est le fichier principal de l'application qui définit les informations suivantes :
- nom du package Java de base des classes de l'application
- les composants de l'application : activités, services, etc.
- les permissions requises par l'application pour accéder aux éléments du système
- les permissions d'accès à l'application par les autres applications
- indique la version minimale de l'API Android qui est requise par l'application
- les librairies requises par l'application
Structure
Le fichier
AndroidManifest.xml
est structuré de la manière suivante :
<manifest>
: (racine duAndroidManifest.xml
)package
: package de base de l'application- Ce nom doit être unique
- Ce nom sert de préfixe lorsque le nom de la classe est précédé d'un point :
.[Classe Java]
, pour les éléments définis dans<application>
versionCode
: numéro de version de l'applicationversionName
: nom de la versioninstallLocation
: lieu d'installation de l'application :internalOnly
: stockage interneauto
: stockage interne ou carte SDpreferExternal
: carte SD de préférence
Version du SDK
<uses_sdk>
: définit la version du SDK Android requise par l'applicationminSdkVersion
: version minimale du SDK Android pour que l'application soit installéetargetSdkVersion
: version du SDK Android utilisée pour valider le fonctionnement de l'application. Cela permet d'activer le mode compatibilité d'Android vers cette version si la version installée sur l'appareil est plus récente.
Composants de l'application
<application>
: (obligatoire) définit les composants de l'application
Activité
<application>
<activity>
: activité (classeActivity
)<intent-filter>
: messagesIntent
qui peuvent lancer l'activité- exemple : activité qui est utilisée au démarrage de l'application
<activity android:name=".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>
- exemple : activité qui est lancée depuis une autre activité
<activity android:name=".MailListActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
Service
<application>
<service>
: service (classeService
)<intent-filter>
: messagesIntent
qui peuvent lancer l'exécution d'un traitement par un service
Content Provider
<application>
<provider>
: fournisseur de contenu (classeContentProvider
) : expose les données sous une forme similaire au service RESTauthorities
: nom de l'autorisation pour accéder au fournisseur de contenu
Broadcast receiver
<application>
<receiver>
: récepteur de diffusion (classeBroadcastReceiver
) : il est à l'écoute des messagesIntent
diffusés pour tous les composants même si l'application n'est pas démarré. Le récepteur est capable de démarrer l'application si celle-ci était arrêtée<intent-filter>
: messagesIntent
qui peuvent lancer l'exécution du récepteurBroadcastReceiver
de l'application même si cette application est actuellement arrêtée
<receiver android:name=”.IntentReceiver”> <intent-filter> <action android:name=”com.bookstore.broadcastAction” /> </intent-filter> </receiver>
Librairies
<application>
<uses_library>
: librairies partagées qui sont liées à l'application.- C'est pour éviter d'installer une application sans cette librairie ou de supprimer une librairie utilisée par une application.
Autorisations
<uses_permission>
: autorisations requises par l'application (ex: recevoir des SMS)<permission>
: autorisations d'accès aux composants de l'application par des composants externes à l'application
Support matériel
<uses_configuration>
: liste les modes de saisie des actions de l'utilisateur (clavier, écran tactile, etc.) requises par l'application<uses_feature>
: liste les fonctionnalités obligatoires ou facultatives requises par l'application (audio, bluetooth, camera, microphone, GPS, NFC, téléphone, écran tactile, USB, WiFi, etc.)<support_screens>
: résolution supportée par l'application- smallScreens : résolution inférieure à HVGA
- normalScreens : résolution HVGA et plus : WVGA, WQVGA
- largeScreens : résolution plus large que la normale
- xlargeScreens : résolution plus large qu'une tablette normale
- requiresSmallestWidthDp : largeur minimale en pixel requise par l'application
- compatibleWidthLimitDp : largeur maximale en pixel au-delà de laquelle l'interface graphique de l'application n'est plus élargie
- largestWidthLimitDp : largeur maximale en pixel
Test
<instrumentation>
: permet de définir une classe Java qui va servir à valider une application actuellement en fonctionnement
Ressources
Le répertoire des ressources
res
contient les sous-répertoires suivants :Valeurs simples
res/values
:- fichiers XML contenant des valeurs simples et statiques
- la balise
<resources>
est la racine du fichier XML - la structure de chaque fichier XML permet de définir les valeurs suivantes :
<string>
: libellé<plurals>
: libellé qui varie en fonction d'un nombre<string-array>
: tableau de chaînes de caractères<array>
: tableau de valeurs<color>
: couleur exprimé en#RGB
,#RRGGBB
,#RGBA
ou#RRGGBBAA
, avecAA
le niveau de transparence<dimen>
: dimension. Il faut spécifier l'unité (ex:px, in, pt, mm, dp, sp
)<style>
: permet de définir un style (l'héritage est supporté)
Interfaces utilisateur
res/layout
: ce répertoire contient les fichiers XML définissant les interfaces utilisateurs
Menus
res/menu
: répertoire contenant les fichiers XML décrivant les menus et les entrées de ces menus
Images
res/drawable-*
: ce répertoire contient les images qui sont de préférence au format PNG- il existe plusieurs répertoires
drawable
selon la résolution de l'écran
Animations
res/anim
: animations : transparence, zoom, translation, rotation
Internationalisation
Nous pouvons définir des fichiers de ressources pour gérer la langue et les libellés.
Le nom du répertoire contient le code de la langue.
Le nom du répertoire contient le code de la langue.
Exemple :
res
values
:- répertoire contenant les fichiers XML avec des valeurs et des libellés par défaut
values-fr
:- répertoire contenant les fichiers XML avec des valeurs et des libellés pour la langue française
Référencer des ressources dans les fichiers XML de ressources
Dans un fichier de ressource, nous pouvons une valeur contenu dans un autre fichier de ressource du projet via son nom.
La syntaxe est la suivante :@type/nom |
exemple:
@string/projectName @dimen/buttonSize @color/backgroundColor |
, avec :
type
: le type de la ressource, à remplacer par :string
array
dimen
color
style
nom
: le nom de la ressource
Exemple :
<resources> <string name="firstname">First name</string> </resources>
Dans le fichier XML de l'interface utilisateur, on référence le texte du libellé via l'expression suivante :
<EditText android:text="@string/firstname" />
Valeurs par défaut Android
Android contient des valeurs par défaut qui peuvent être référencées via la syntaxe suivante :@android:type/nom
Android contient par exemple des codes couleurs par défaut :
@android:color/white
@android:color/black
@android:color/blue
@android:color/red
- etc.
Accéder aux ressources en Java
Classe R
La classe
Ceci permet d'avoir l'auto-complétion dans le code Java par rapport à ce qui est définit dans les fichiers de ressources et également d'avoir des erreurs de compilation si une des ressources n'existe plus.
Voici la structure de la classe
R
est générée automatiquement par l'IDE et contient le nom des éléments actuellement définis dans les fichiers de ressources.Ceci permet d'avoir l'auto-complétion dans le code Java par rapport à ce qui est définit dans les fichiers de ressources et également d'avoir des erreurs de compilation si une des ressources n'existe plus.
Voici la structure de la classe
R
:R.string
: nom des libellésR.layout
: interfaces utilisateurR.id
: identifiants des éléments dans les interfaces utilisateursR.array
: nom du tableau de valeursR.drawable
: nom de l'imageR.color
: nom de la couleurR.dimen
: nom de la dimensionR.anim
: nom de l'animation
Récupérer des valeurs
Voici un exemple de code pour récupérer ces valeurs en Java :// Objet d'accès aux ressources Resources resources = getResources(); // récupérer un libellé String label = resources.getText(R.string.code_label); // récupérer une ensemble de chaînes de caractères String[] stringArray = resources.getStringArray(R.array.string_array); // récupérer une liste de valeurs int[] intArray = resources.getIntArray(R.array.integer_array);
Récupérer les éléments de la vue dans une activité
Dans une activité :// définir l'interface utilisateur d'une activité setContentView(R.layout.main); // récupérer un champ texte de l'interface utilisateur TextView textView = (TextView) findViewById(R.id.text_id);