Tutoriels Android

Map application pour Android SDK 1.5, première partie

Vous aviez été nombreux à apprécier le tutoriel d’André sur la géolocalisation. Il est de retour avec un nouveau tutoriel qui vous permettra d’explorer les fonctionnalités maps et GPS du nouveau SDK Android version 1.5 !

Pour porter mon application GLocationMap sous le SDK 1.5, j’ai choisi la solution de réécriture pas à pas. Ceci m’a paru nécessaire compte tenu des differences majeures entre le SDK 1.0 et le SDK 1.5 et me permet donc de faire une série de tutoriaux progressifs expliquant en détails l’utilisation des fonctions Maps, GPS et Location Services mais aussi les difficultés rencontrées.

Ce premier tutoriel va présenter les bases d’une application Android élémentaire intégrant Google Maps.

Nous présenterons dans les tutoriaux suivants tout ce qui concerne l’intégration de menus pour interopérer avec la carte, puis les Overlays pour ajouter des informations, puis la recuperation des infos de localisation, la communication avec des serveurs d’application et bien plus encore !

Android Virtual Devices

La version 1.5 du SDK Android introduit une nouveauté avec les Android Virtual Devices, des terminaux Android virtuels configurables dans les moindres détails, qui seront nécessaires au lancement de votre application.

Un Android Virtual Device (AVD) modélise un seul virtual device hébergeant la plateforme Android qui a au minimum son propre Kernel, system image et data partition.

Un emulator process peut lancer un seul AVD à la fois, mais vous pouvez créer plusieurs Android Virtual Devices et les faire tourner en parallèle.

Création d’un AVDandroid create avd –name my_avd –target t (t = 1 pour Android 1.1, 2 pour 1.5 etc)

Pour avoir la liste des avds : android list avds

Vous obtenez par ex :

Available Android Virtual Devices:

Name: avd_1.5

Path: /home/rcs/.android/avd/avd_1.5.avd

Target: Android 1.5 (API level 3)

Skin: HVGA

———

Name: my_avd

Path: /home/rcs/.android/avd/my_avd.avd

Target: Android 1.1 (API level 2)

Skin: HVGA

Pour utiliser un AVD :

Si vous lancez votre application depuis Eclipse, l’environnement de développement va identifier automatiquement l’AVD à utiliser en fonction des options de compilation que vous avez choisi.

Pour lancer l’émulateur vous devez specifier le nom de l’AVD que vous souhaitez utiliser : emulator @my_avd

Pour avoir plus de détails sur les AVDemulator -help-virtual-device

Utiliser Google Maps avec le SDK 1.5

Nous devons en premier éditer le fichier layout de notre application contenu dans le fichier /res/layout/mapview.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">
    <com.google.android.maps.MapView
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:enabled="true"
        android:clickable="true"
        android:apiKey="@string/mapskey"
     />
</LinearLayout>

Comme vous le voyez, notre layout ne contient pour l’instant rien d’autre qu’un MapView, élément indispensable pour une application utilisant Google Maps.

Les IDs du LinearLayout et du MapView sont utilisés pour rendre accessibles les Views dans l’Activity.

Pour utiliser les composants Google Maps  une API key est nécessaire, et sera stockée comme une ressource string référencée par la clé @string/mapskey.

Obtenir une clé pour l’API Google Maps :

Android autorise l’installation des applications signées exclusivement. Avant d’installer une application dans l’émulateur, Eclipse va automatiquement signer votre application, utilisant un certificat de debug qui vient avec le SDK Android. Eclipse crée le fichier debug.keystore lors de la compilation (réussie) du projet, stocké dans le répertoire ~/.android. La clé pour l’API Google Maps est basée sur ce certificat de debug. Une explication detaillée expliquant comment signer une application peut facilement se trouver en ligne.

Pour obtenir une Google Maps API key (en utilisant le debug certificate) vous devez suivre les étapes suivantes :

Créer un md5 checksum du debug certificate :
Trouver le debug.keystore

  • Vista: C:\Users\\AppData\Local\Android\debug.keystore
  • XP: C:\Documents and Settings\\Android\debug.keystore
  • Mac, Linux: ~/.android/debug.keystore

Et appeler la commande : keytool -list -alias androiddebugkey -keystore .keystore -storepass android -keypass android

Le md5 checksum est généré et affiché à l’écran :

androiddebugkey, Apr 20, 2009, PrivateKeyEntry,

Certificate fingerprint (MD5): XX:YY:ZZ:AA:BB:CC:FF:CA:A7:99:AD:DD:DF:5C:12:ED

Enregistrer le md5 checksum :

S’enregister sur Google Code pour avoir une Maps API key. Un compte google est requis pour pouvoir le faire.

Saisir le checksum md5 et cliquer sur le bouton “Generate API key”.

Vous obtenez alors une page avec votre Google Maps API key et une petite explication de comment l’utiliser dans un layout.

Editer les resources dans le fichier string.xml :

Copier-coller la Google Maps API key dans le fichier string.xml pour la resource string/mapskey utilisée dans le layout :

<?xml version=“1.0” encoding=“utf-8”?>

<resources>
    <string name="app_name">MapDemoV1</string>
    <string name="mapskey">XXXXXXXXXX7O2PwQ5YMM6ilp5HCJ4YYYYYYYYYY</string>
</resources>

Ajouter les permissions requises et les librairies au manifest

Notre application nécessite deux permissions :

  • Google maps impose l’accès a internet (android.permission.INTERNET)
  • La partie Localisation (à venir) impose l’accès au GPS (android.permission.ACCESS_FINE_LOCATION)

De plus, la library Google Maps API (com.google.android.maps) doit être incluse dans le projet.

Notre fichier AndroidManifest.xml :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="org.example.android.apis"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:label="@string/app_name"
            android:icon="@drawable/icon">
                <uses-library android:name="com.google.android.maps" />
         <activity android:name=".MapViewDemo" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="3" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

Le code java

Cette application doit hériter de MapActivity et faire reference au layout défini dans mapview.xml a l’aide de la méthode setContentView.

Le fichier MapViewDemo.java :

package org.example.android.apis;

import android.os.Bundle;
import com.google.android.maps.MapActivity;
 
public class MapViewDemo extends MapActivity {
 
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.mapview);
        }
 
        @Override
        protected boolean isRouteDisplayed() {
                return false;
        }
}

L’application peut être lancée en sélectionnant le projet dans Eclipse, clic droit, Run As, Android Application.

Compilation, exécution, debogage

Il est possible de tester l’application en utilisant l’émulateur.

Pour compiler de facon correcte une application utilisant Google Maps avec le SDK 1.5 vous devez definir le project target comme étant un Google Maps API.

emulator-map

Selectionnez le projet dans Eclipse, clic droit, Properties, Android et sélectionnez sur Google Maps API comme target.

Pour voir défiler le log : adb logcat dans une fenêtre indépendante lorsque l’émulateur est lancé

En cas de problème vous pouvez vouloir effacer les installations précéedentes pour repartir avec un émulateur propre grâce à cette commande : /tools/emulator -wipe-data @avd_1.5

Pour effacer ce que vous souhaitez seulement (attention aux erreurs !) : 

/tools/adb shell (quand l’emulateur fonctionne)

cd /data/app

rm appli.apk

Pour des débugage plus complexe, consultez la doc d’Eclipse. Pour ma part je préfère éviter les erreurs que les déboger !

La suite très prochainement…

Related Articles

Comment personnaliser BlinkFeed correctement sur le HTC One et donc Sense 5

Olivier

Utiliser le WIFI à la place du cable USB grâce au protocole FTP

Comment mettre plusieurs applications Android dans un seul et unique dossier?

Faly

19 comments

Leave a Comment