Paramètres Android

Sur la plate-forme Android, vous disposez de l’élément android du descripteur d’application pour ajouter des informations au manifeste d’application Android (fichier de propriétés d’application utilisé par le système d’exploitation Android). L’outil ADT génère automatiquement le fichier Manifest.xml Android lorsque vous créez le package APK. AIR définit quelques propriétés sur les valeurs requises pour assurer le fonctionnement de diverses fonctionnalités. Toute autre propriété définie dans la section android du descripteur d’application AIR est ajoutée à la section correspondante du fichier Manifest.xml.

Remarque : pour la plupart des applications AIR, vous devez définir les autorisations Android requises par l’application dans l’élément android, mais il est généralement inutile de définir d’autres propriétés.

Vous ne pouvez définir que les attributs qui gèrent les valeurs de type chaîne, entier ou booléen. La définition de références sur des ressources du package d’application n’est pas prise en charge.

Remarque : Le moteur d’exécution nécessite l’installation d’une version du kit SDK égale ou ultérieure à la version 14. Si vous souhaitez créer une application uniquement pour les versions ultérieures, vous devez vous assurer que le fichier manifeste inclut <uses-sdk android:minSdkVersion=""></uses-sdk> avec la version correcte appropriée.

Paramètres réservés du manifeste Android

AIR définit plusieurs entrées manifeste dans le document manifeste Android généré pour s’assurer que les fonctionnalités de l’application et du moteur d’exécution fonctionnent correctement. Il est impossible de définir les paramètres suivants :

Élément manifest

Il est impossible de définir les attributs suivants de l’élément manifest :

  • package

  • android:versionCode

  • android:versionName

  • xmlns:android

Élément activity

Il est impossible de définir les attributs suivants de l’élément activity principal :

  • android:label

  • android:icon

Élément application

Il est impossible de définir les attributs suivants de l’élément application :

  • android:theme

  • android:name

  • android:label

  • android:windowSoftInputMode

  • android:configChanges

  • android:screenOrientation

  • android:launchMode

Autorisations Android

Le modèle de sécurité Android requiert que chaque application demande l’autorisation d’utiliser les fonctionnalités dotées d’implications d’ordre sécuritaire ou confidentiel. Vous spécifiez ces autorisations lors de la mise en package de l’application et il est impossible de les modifier à l’exécution. Le système d’exploitation Android avertit l’utilisateur des autorisations demandées par une application lors de l’installation de cette dernière. Si l’application ne demande pas une autorisation associée à une fonctionnalité, le système d’exploitation risque de renvoyer une exception lorsque l’application accède à la fonctionnalité. Le renvoi de l’exception n’est toutefois pas garanti. Le moteur d’exécution transmet les exceptions à l’application. En cas d’échec silencieux, un message d’échec de l’autorisation est inséré dans le journal système d’Android.

Dans AIR, vous spécifiez les autorisations Android dans l’élément android du descripteur d’application. L’ajout d’autorisations fait appel au format suivant (PERMISSION_NAME correspondant au nom d’une autorisation Android) :

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <uses-permission android:name="android.permission.PERMISSION_NAME" /> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Les instructions uses-permissions intégrées à l’élément manifest sont directement ajoutées au document manifeste Android.

Les autorisations suivantes sont obligatoires pour utiliser diverses fonctionnalités AIR :

ACCESS_COARSE_LOCATION
Permet à l’application d’accéder aux données de localisation du réseau Wi-Fi ou cellulaire via la classe Geolocation.

ACCESS_FINE_LOCATION
Permet à l’application d’accéder aux données GPS via la classe Geolocation.

ACCESS_NETWORK_STATE et ACCESS_WIFI_STATE
Permet à l’application d’accéder aux informations du réseau via la classe NetworkInfo.

CAMERA
Permet à l’application d’accéder à la caméra.
Remarque : lorsque vous demandez l’autorisation d’utiliser la fonctionnalité caméra, Android part du principe que l’application requiert également la caméra. Si la caméra est une fonctionnalité facultative de l’application, ajoutez un élément uses-feature relatif à la caméra au manifeste en définissant l’attribut requis sur false. Voir Filtrage de la compatibilité Android.

INTERNET
Permet à l’application d’effectuer des requêtes réseau. Permet également de procéder au débogage à distance.

READ_PHONE_STATE
Permet au moteur d’exécution d’AIR de couper le son lors d’appels téléphoniques. Définissez cette autorisation si l’application lit l’audio lorsqu’elle s’exécute en arrière-plan.

RECORD_AUDIO
Permet à l’application d’accéder au microphone.

WAKE_LOCK et DISABLE_KEYGUARD
Permet à l’application d’empêcher le périphérique d’entrer en mode de veille à l’aide des paramètres de la classe SystemIdleMode.

WRITE_EXTERNAL_STORAGE
Permet à l’application d’écrire sur la carte mémoire externe du périphérique.

Ainsi, si une application nécessite toutes les autorisations, vous pourriez ajouter l’élément suivant au descripteur de l’application pour les définir :

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
                            <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
                            <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
                            <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
                            <uses-permission android:name="android.permission.CAMERA" /> 
                            <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> 
                            <uses-permission android:name="android.permission.INTERNET" /> 
                            <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
                            <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
                            <uses-permission android:name="android.permission.WAKE_LOCK" /> 
                            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Modèles personnalisés d’URI Android

Vous pouvez utiliser un modèle URI personnalisé pour lancer une application AIR à partir d’une page Web ou une application Android native. Etant donné que la prise en charge des URI personnalisés repose sur des filtres d’intention spécifiés dans le manifeste Android, il est impossible d’utiliser cette technique sur d’autres plates-formes.

Pour utiliser un URI personnalisé, ajoutez un élément intent-filter au descripteur d’application dans le bloc <android>. Les deux éléments intent-filter de l’exemple suivant sont obligatoires. Modifiez l’instruction <data android:scheme="my-customuri"/> en fonction de la chaîne URI associée au modèle personnalisé.

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <application> 
                            <activity> 
                            <intent-filter> 
                            <action android:name="android.intent.action.MAIN"/> 
                            <category android:name="android.intent.category.LAUNCHER"/> 
                            </intent-filter> 
                            <intent-filter> 
                            <action android:name="android.intent.action.VIEW"/> 
                            <category android:name="android.intent.category.BROWSABLE"/> 
                            <category android:name="android.intent.category.DEFAULT"/> 
                            <data android:scheme="my-customuri"/> 
                            </intent-filter> 
                            </activity> 
                            </application> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Un filtre d’intention avertit le système d’exploitation Android que l’application est en mesure d’exécuter une action donnée. Dans le cas d’un URI personnalisé, cela signifie que l’utilisateur a cliqué sur un lien basé sur ce modèle d’URI (et le navigateur ne sait pas comment le gérer).

Si l’application est appelée par le biais d’un URI personnalisé, l’objet NativeApplication distribue un événement invoke. L’URL du lien, paramètres d’interrogation inclus, est placée dans le tableau arguments de l’objet InvokeEvent. Vous disposez d’un nombre illimité d’éléments intent-filter.

Remarque : les liens dans une occurrence de StageWebView ne peuvent pas ouvrir les URL qui font appel à un modèle d’URI personnalisé.

Filtrage de la compatibilité Android

Le système d’exploitation Android utilise divers éléments du fichier manifeste de l’application pour déterminer si celle-ci est compatible avec un périphérique donné. L’ajout de ces informations au fichier manifeste est facultatif. Si vous n’incluez pas ces éléments, l’application peut être installée sur tout périphérique Android. Elle risque toutefois de ne fonctionner correctement sur aucun périphérique Android. Une application pour caméra s’avère par exemple d’une utilité limitée sur un téléphone qui n’est pas équipé de caméra.

Vous disposez des balises de manifeste Android suivantes à des fins de filtrage :

  • supports-screens

  • uses-configuration

  • uses-feature

  • uses-sdk (dans AIR 3+)

Applications pour caméra

Si vous demandez l’autorisation caméra pour l’application, Android part du principe que l’application nécessite toutes les fonctionnalités de caméra disponibles, y compris la mise au point automatique et le flash. Si l’application ne requiert pas toutes les fonctionnalités de caméra ou si la caméra est une fonctionnalité facultative, définissez les divers éléments uses-feature associés à la caméra pour indiquer qu’ils sont facultatifs. Les utilisateurs dont le périphérique ne gère pas une fonctionnalité ou n’est pas équipé de caméra ne pourront sinon pas trouver l’application dans Android Market.

L’exemple suivant illustre la procédure de demande de l’autorisation caméra et indique comment rendre toutes les fonctionnalités de la caméra facultatives :

<android> 
                                <manifestAdditions> 
                                <![CDATA[ 
                                <manifest> 
                                <uses-permission android:name="android.permission.CAMERA" /> 
                                <uses-feature android:name="android.hardware.camera" android:required="false"/> 
                                <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/> 
                                <uses-feature android:name="android.hardware.camera.flash" android:required="false"/> 
                                </manifest> 
                                ]]> 
                                </manifestAdditions> 
                                </android>

Applications d’enregistrement de l’audio

Si vous demandez l’autorisation d’enregistrer l’audio, Android considère comme acquis que l’application nécessite un microphone. Si l’enregistrement de l’audio est une fonctionnalité facultative de l’application, vous disposez d’une balise uses-feature pour spécifier que le microphone est inutile. Les utilisateurs dont le périphérique n’est pas équipé d’un microphone ne pourront sinon pas trouver l’application sur Android Market.

L’exemple suivant illustre la procédure de demande d’une autorisation d’utilisation du microphone, le matériel associé restant facultatif :

<android> 
                                <manifestAdditions> 
                                <![CDATA[ 
                                <manifest> 
                                <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
                                <uses-feature android:name="android.hardware.microphone" android:required="false"/> 
                                </manifest> 
                                ]]> 
                                </manifestAdditions> 
                                </android>

Emplacement d’installation

Vous pouvez autoriser l’installation ou le transfert de l’application sur la carte mémoire externe en définissant l’attribut installLocation de l’élément Android manifest sur auto ou preferExternal :

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest android:installLocation="preferExternal"/> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Le système d’exploitation Android ne garantit pas que l’application soit installée sur la carte mémoire externe. Un utilisateur peut également transférer une application entre la mémoire interne et la mémoire externe par le biais de l’application Réglages du système.

Même si l’application est installée sur la carte mémoire externe, le cache d’application, les données utilisateur telles que le contenu du répertoire app-storage, les objets partagés et les fichiers temporaires continuent à être stockés en mémoire interne. Pour éviter de solliciter trop de mémoire interne, sélectionnez avec discernement les données enregistrées dans le répertoire de stockage de l’application. Enregistrez les volumes élevés de données sur la carte SD (emplacements File.userDirectory ou File.documentsDirectory, qui pointent tous deux vers la racine de la carte SD sous Android).

Activation de Flash Player et d’autres modules d’extension dans un objet StageWebView

Dans Android 3.0 et les versions ultérieures, l’application doit activer l’accélération matérielle dans l’élément de l’application Android pour afficher le contenu des modules d’extension dans un objet StageWebView. Pour activer le rendu sur le module d’extension, définissez l’attribut android:hardwareAccelerated de l’élément application sur true :

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <application android:hardwareAccelerated="true"/> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Codage des couleurs

Dans AIR 3 et les versions ultérieures, le moteur d’exécution configure l’écran de façon à ce qu’il effectue le rendu des couleurs 32 bits. Dans les versions antérieures d’AIR, le moteur d’exécution utilise les couleurs 16 bits. Vous pouvez demander au moteur d’exécution d’utiliser les couleurs 16 bits à l’aide de l’élément <colorDepth> du descripteur d’application :

<android> 
                            <colorDepth>16bit</colorDepth> 
                            <manifestAdditions>...</manifestAdditions> 
                            </android>

L’utilisation de la profondeur de couleurs 16 bits peut augmenter les performances de rendu, au détriment de la fidélité des couleurs.