J'ai essayé une démo sur l'affichage de Google Maps v2 dans Android.
Le code Java est,
package com.example.gpslocator;
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.main, menu);
return true;
}
}
Le code XML est,
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
>
<fragment
Android:id="@+id/map"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:name="com.google.Android.gms.maps.MapFragment"/>
</LinearLayout>
J'ai ajouté la clé API dans le fichier manifest.xml,
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.gpslocator"
Android:versionCode="1"
Android:versionName="1.0" >
<uses-sdk
Android:minSdkVersion="3"
Android:targetSdkVersion="17" />
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES" />
<!--
The following two permissions are not required to use
Google Maps Android API v2, but are recommended.
-->
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
<permission
Android:name="com.example.mapdemo.permission.MAPS_RECEIVE"
Android:protectionLevel="signature" />
<uses-permission Android:name="com.example.mapdemo.permission.MAPS_RECEIVE" />
<uses-feature
Android:glEsVersion="0x00020000"
Android:required="true" />
<application
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
<activity
Android:name="com.example.gpslocator.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>
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="MY_API_KEY" />
</application>
</manifest>
Lorsque j'ai essayé de lancer mon application se ferme soudainement. Quand je débogue, il m'a montré l'erreur, "Java.lang.NoClassDefFoundError: com.google.Android.gms.R $ styleable" . J'ai ajouté le fichier google-play-services.jar à mon application.
Le logcat est,
04-09 05:33:53.677: E/Trace(1053): error opening trace file: No such file or directory (2)
04-09 05:33:53.807: W/ActivityThread(1053): Application com.example.gpslocator is waiting for the debugger on port 8100...
04-09 05:33:53.878: I/System.out(1053): Sending WAIT chunk
04-09 05:33:54.207: I/dalvikvm(1053): Debugger is active
04-09 05:33:54.288: I/System.out(1053): Debugger has connected
04-09 05:33:54.288: I/System.out(1053): waiting for debugger to settle...
04-09 05:33:54.487: I/System.out(1053): waiting for debugger to settle...
04-09 05:33:54.697: I/System.out(1053): waiting for debugger to settle...
04-09 05:33:54.897: I/System.out(1053): waiting for debugger to settle...
04-09 05:33:55.097: I/System.out(1053): waiting for debugger to settle...
04-09 05:33:55.297: I/System.out(1053): waiting for debugger to settle...
04-09 05:33:55.498: I/System.out(1053): waiting for debugger to settle...
04-09 05:33:55.708: I/System.out(1053): waiting for debugger to settle...
04-09 05:33:55.907: I/System.out(1053): waiting for debugger to settle...
04-09 05:33:56.167: I/System.out(1053): waiting for debugger to settle...
04-09 05:33:56.367: I/System.out(1053): debugger has settled (1344)
04-09 05:34:06.097: W/dalvikvm(1053): VFY: unable to resolve static field 867 (MapAttrs) in Lcom/google/Android/gms/R$styleable;
04-09 05:34:06.097: D/dalvikvm(1053): VFY: replacing opcode 0x62 at 0x000e
04-09 05:40:21.278: D/AndroidRuntime(1053): Shutting down VM
04-09 05:40:21.278: W/dalvikvm(1053): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
04-09 05:40:21.398: E/AndroidRuntime(1053): FATAL EXCEPTION: main
04-09 05:40:21.398: E/AndroidRuntime(1053): Java.lang.NoClassDefFoundError: com.google.Android.gms.R$styleable
04-09 05:40:21.398: E/AndroidRuntime(1053): at com.google.Android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source)
04-09 05:40:21.398: E/AndroidRuntime(1053): at com.google.Android.gms.maps.MapFragment.onInflate(Unknown Source)
04-09 05:40:21.398: E/AndroidRuntime(1053): at Android.app.Activity.onCreateView(Activity.Java:4716)
04-09 05:40:21.398: E/AndroidRuntime(1053): at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:680)
04-09 05:40:21.398: E/AndroidRuntime(1053): at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:746)
04-09 05:40:21.398: E/AndroidRuntime(1053): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:489)
04-09 05:40:21.398: E/AndroidRuntime(1053): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:396)
04-09 05:40:21.398: E/AndroidRuntime(1053): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:352)
04-09 05:40:21.398: E/AndroidRuntime(1053): at com.Android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.Java:270)
04-09 05:40:21.398: E/AndroidRuntime(1053): at Android.app.Activity.setContentView(Activity.Java:1881)
04-09 05:40:21.398: E/AndroidRuntime(1053): at com.example.gpslocator.MainActivity.onCreate(MainActivity.Java:12)
04-09 05:40:21.398: E/AndroidRuntime(1053): at Android.app.Activity.performCreate(Activity.Java:5104)
04-09 05:40:21.398: E/AndroidRuntime(1053): at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1080)
04-09 05:40:21.398: E/AndroidRuntime(1053): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2144)
04-09 05:40:21.398: E/AndroidRuntime(1053): at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2230)
04-09 05:40:21.398: E/AndroidRuntime(1053): at Android.app.ActivityThread.access$600(ActivityThread.Java:141)
04-09 05:40:21.398: E/AndroidRuntime(1053): at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1234)
04-09 05:40:21.398: E/AndroidRuntime(1053): at Android.os.Handler.dispatchMessage(Handler.Java:99)
04-09 05:40:21.398: E/AndroidRuntime(1053): at Android.os.Looper.loop(Looper.Java:137)
04-09 05:40:21.398: E/AndroidRuntime(1053): at Android.app.ActivityThread.main(ActivityThread.Java:5041)
04-09 05:40:21.398: E/AndroidRuntime(1053): at Java.lang.reflect.Method.invokeNative(Native Method)
04-09 05:40:21.398: E/AndroidRuntime(1053): at Java.lang.reflect.Method.invoke(Method.Java:511)
04-09 05:40:21.398: E/AndroidRuntime(1053): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:793)
04-09 05:40:21.398: E/AndroidRuntime(1053): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:560)
04-09 05:40:21.398: E/AndroidRuntime(1053): at dalvik.system.NativeStart.main(Native Method)
04-09 05:40:26.487: I/Process(1053): Sending signal. PID: 1053 SIG: 9
Dans les propriétés -> Android ->
S'il vous plaît, aidez-moi. Est-ce que je manque une référence?
Voir la réponse ici:
API Google Maps Android v2 - Crash d’échantillon de code
Bien que la question énumère une exception différente, la réponse mentionne spécifiquement votre problème exact.
En particulier, il est important d'importer google-play-services_lib
en tant que projet:
Sélectionnez File > Import > Android > Existing Android Code Into Workspace
et cliquez sur Suivant.
Sélectionnez Parcourir ..., entrez [Android-sdk-folder]/extras/google/google_play_services/libproject/google-play-services_lib
, puis cliquez sur Terminer.
(Voir https://developers.google.com/maps/documentation/Android/intro sous "Exemple de code")
Suivez ensuite les instructions de la réponse liée:
- Importez la source réelle du projet "google-play-services_lib" et reliez-la en tant que bibliothèque> Android .
- Faites ceci via Projet -> Propriétés -> Android -> Bibliothèque, Ajouter -> google-play-services_lib (vous pouvez cliquer avec le bouton droit de la souris sur votre projet et choisir Propriétés, puis sélectionner Android).
- Faites pas ajoutez-le en tant que projet dépendant via le "chemin de construction Java" de votre projet, cela n'a pas fonctionné pour moi.
Vérifiez le fichier AndroidManifest.xml
de votre projet google-play-services_lib. Devrait être:
package="com.google.Android.gms"
J'ai le même problème.
Mais ce que j'ai fait, c'est que j'ai utilisé le code de version com.google.Android.gms ce 3265130
Plutôt que d'utiliser le code de version com.google.Android.gms ce 4452000, qui est le dernier en date, je ne sais pas quel est le problème, mais ça marche pour moi.
[Suivez les étapes données par Alexander]
Peut-être bien fonctionner avec les nouvelles mises à jour.
Peut-être bien fonctionner avec les nouvelles mises à jour.
Lorsque vous importez google-play-services_lib , cochez la case "Copier le projet dans l’espace de travail". Ça marche pour moi!
J'ai eu le même problème et j'ai pu le résoudre en cliquant avec le bouton droit de la souris sur le projet google-play-services_lib et en l'actualisant. Pour une raison quelconque, le projet n'a pas été synchronisé avec Eclipse qui était à l'origine de l'erreur.
J'ai eu beaucoup de problèmes avec ces cartes. Mais finalement, succès! Build! Je n’utilise pas Eclipse, mais en ligne de commande . Tout d’abord, je répète que je copie simplement dans myProject/libs/les fichiers de google-play-services_lib/libs et ececute ant debug ... Après l'installation sur l'émulateur Android, l'erreur se produit Java.lang.NoClassDefFoundError: com.google.Android.gms.R $ styleable
Jour plus tard, après heures de travail, solution:
1) Je copie d’abord le catalogue sdk/extras/google /.../ google-play-services_lib dans mon catalogue myProject.
2) Faites un Android update project --target <your target> -p myProject/google-play-services_lib
comme l'utilisateur dit Dzeikei (pour vérifier les cibles exec: Android list target
)
3) éditez le fichier "project.properties" dans le dossier myProject, et ajoutez cette ligne à la fin Android.library.reference.1 = google-play-services_lib ou exécutez Android update project --target Android-19 --path myProject
--library myProject/google-play-services_lib
4) ant clean
, ant debug
.... mais il y avait quelques erreurs, par exemple. retourne null etc (faire mal à la tête). mais après cela, créez les dossiers bin et gen dans le dossier myProject/google-play-services_lib.
5) Après avoir recherché dans de nombreuses solutions pendant des siècles, pourquoi ant debug a renvoyé des erreurs, je finis par copier et simplement copier les catalogues bin et gen de myProject/google-play-services_lib/vers myProject/bin et myProject/gen
6) puis supprimez la ligne que j’avais ajoutée précédemment au point 3. ci-dessus # Android.library.reference.1 = google-play-services_lib et copiez le fichier myProject/google-play-services_lib/libs/google-play-services.jar dans myProject/libs/google-play-services.jar
7) exécuter ant debug
adb install -r bin/myProject-debug.apk
et finalement vu google map dans mon projetApplication sur l'émulateur Android :)
Bien sûr, d’autres fonctionnalités telles que API_KEY ou l’ajout et la permision du tutoriel google maps que j’ai fait avant de compiler le projet .Pour voir la carte sans promt, par exemple. "Instal Goodle Play Services" utilise un émulateur avec les services Google déjà installés. J'ai utilisé les API Google (Google Inc.) de la liste des gestionnaires AVD . J'espère que cela vous aidera.
Le chemin d'accès au projet google-play-services_lib
ne doit comporter que [A-Z,a-z]
et non ÄÖÜ
. Je l'ai déplacé à D:\google-play-services_lib\
que importé nouveau et cela fonctionne!
Désolé pour mon anglais ;-)
Lorsque vous avez importé le projet google-play-services_lib dans votre IDE, n'oubliez pas de vérifier ses propriétés. google-play-services_lib doit être construit avec la même version du SDK Android que vous utilisez pour votre projet. Par exemple, votre projet et les services google-play sont tous deux construits avec Android 4.4.2. Après cela, vous devriez voir que la lib est correctement construite.
Enfin, vous devez ajouter la balise META suivante au fichier AndroidManifest.xml dans les balises <application> ... </application>
:
<meta-data
Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />
Regardez les étapes de John Oleynik: www.stackoverflow.com/a/15709686/20146. Cela a fonctionné pour moi.
importer les deux projets google-play-services_lib et de démonstration dans l'espace de travail; copiez Android-support-v4.jar dans le dossier "libs" du projet de démonstration; et ensuite: propriétés du projet-> Android-> bibliothèque "puis en ajoutant google-play-services_lib