Dans le tutorial précédent, j'ai expliqué en détail comment créer une application Adobe Air pour Android:
Air Android – Créer une application Air pour Android (apk), le guide de A à Z
Malgré pas mal de pépins (expliqué par le fait je n'avais pas vraiment lu les documentations), mon application tournait enfin sur l'émulateur. Une application sans prétention bien sûr avec un champ texte et un bouton, rien de bien folichon.
Histoire de mettre un peu de piment, je me suis dit que j'allais essayer avec mes librairies que j'utilise pour mes projets pro (cartographie). Je prend donc mon application exemple qui affiche simplement un serveur cartographique WMS (serveur en ligne).
Je ne vous présente pas le code car il utilise uniquement des librairies que j'ai développé pour Business Geografic. Sachez qu'il utilise juste une librairie AS3, et quelques composants Flex instanciés en MXML. Rien de bien méchant
.
Voici le rendu en version Desktop:

Je prend donc cette application et la compile en .apk, exactement comme dans le guide Air pour Android. Désinstallation de l'application existante sur l'émulateur, installation de cette application. Pas de problème.
Et là, au lancement de l'application, surprise:

L'application est bien chargée, sinon il n'y aurait pas mon fond blanc mais aucune image WMS n'est chargée.
Heureusement, la documentation de cette pre-release d'Adobe Air est déjà bien fournie. Et on y trouve un chapitre parlant des autorisations que l'on peut donner à l'application notamment au niveau du Debugging. Si vous avez un portable Android, cela correspond à l'écran qui vous avez quand vous allez installer une application. On vous annonce que l'application pourra accéder à Internet, récupérer vos informations de géolocalisation, … Et bien vous si vous souhaitez utiliser certains services dans votre application, vous devrez l'indiquer à l'application.
En l'occurrence, pour télécharger les images du WMS, il faut que l'application soit autorisée à accéder à Internet. Cela se fait dans le fichier descripteur XML de votre application. La plupart des tags sont commentés à la fin du fichier. Modifiez donc le XML pour avoir:
<android>
<manifestAdditions>
<manifest>
<![CDATA[
<uses-permission android:name="android.permission.INTERNET" />
]]>
</manifest>
</manifestAdditions>
</android>
Il en existe d'autres, pour cela, reportez-vous à la documentation disponible sur le site de prerelease d'Adobe.
Compilation, transfert et test sur l'émulateur:

Exactement ce que je souhaitais avoir, le même code sur du Web et sur du natif Android! La carte est navigable, tout se comporte comme prévu. Voilà, je vais faire des tests sur des applications plus costaudes mais c'est déjà un bon début!
3 août 2010
slt,
quelqu'un sait comment faire fonctionner les web services sur l'emulateur d'android
mon application fonctionne correctement sur le flash builder
j'ai changé les permissions en
j'ai aussi changé le "localhost" de la cible en l'ip locale et j'ai chargé mon service web sur l'IIS
au niveau de l'emulateur l'application se lance normalement mais les services web ne fonctionnent pas !!!
3 août 2010
Salut,
quand tu dis qu'ils ne fonctionnent pas, c'est-à-dire? ils passent dans le fault? quelle est l'erreur renvoyée? Est-ce que tu es sûr que ton téléphone arrive à joindre la machine sur laquelle tu souhaites interroger le WS (vérifier les bloquages de ports niveau firewall & co).
Fabien
3 août 2010
il ne se passe rien quand je fait appel aux web services ... y'a pas d'erreurs renvoyés
je pense qu'il y'a un blocage quelque part mais je ne sais pas exactement quoi changer
j'ai désactivé mon parefeu et relancé l'application sur l'emulateur... toujours rien
Youssef
3 août 2010
Etrange... Tu as aussi vérifié les restrictions du firewall de l'IIS ?
Fabien
3 août 2010
oui
y'a pas de configuration au niveau de l'emulateur ? non ?
merci
3 août 2010
Pas que je sache. Avec la permission Internet, j'arrivais à accéder à des URLs web, pas à des serveurs sur le même réseau. Apparement, pour l'accès local, c'est un peu plus tricky car un Linux se cache derrière.
Plus d'infos sur ce thread:
http://www.mail-archive.com/android-developers@googlegroups.com/msg46996.html
Si tu trouves la solution, merci de laisser un commentaire
Fabien
4 août 2010
oui j'ai fait le test avec ton StatesService et il fonctionne bien sur l'emulateur qui arrive à acceder au web service sans problèmes
effectivement c'est au niveau local que ça se complique
merci pour l'article mais j'avoue que je n'ai pas trop bien saisi :p ... je n'ai pas compris ce qu'on doit faire exactement pour remèdier à ce problème!!
je m'y met
Youssef
4 août 2010
j'ai renoncé a essayer de le faire fonctionner en local puisque je peut le mettre sur un serveur distant.
mais pour ceux qui ont le même problème vous trouverez certainement des éléments de réponse dans la partie networking de :
http://developer.android.com/guide/developing/tools/emulator.html
y'a bcp de commandes a essayer
Youssef
7 janvier 2011
J'espère pas trop faire mon boulet, mais c'est où qu'on met ce code ? Dans le descripteur AIR ou dans celui du APK ?
Merci
7 janvier 2011
Salut,
Cela se trouve dans le descripteur AIR. Effectivement dans la dernière version du SDK, le formattage des noeuds a été modifié mais le noeud pour l'autorisation Internet reste le même. Ne pas faire de copier-coller du code de cette page
Fabien