web-dev-qa-db-fra.com

java.lang.NoClassDefFoundError: com.google.Android.gms.R $ styleable dans android

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 -> 

enter image description here

S'il vous plaît, aidez-moi. Est-ce que je manque une référence? 

13
Mahe

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.
29
Alexander

Vérifiez le fichier AndroidManifest.xml de votre projet google-play-services_lib. Devrait être:

package="com.google.Android.gms"
6
Artem

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.

enter image description here

Peut-être bien fonctionner avec les nouvelles mises à jour.

enter image description here

1
Sophia

Lorsque vous importez google-play-services_lib , cochez la case "Copier le projet dans l’espace de travail". Ça marche pour moi!

1
Ellison Yang

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.

1
yiati

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.

0
ferfluchte

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 ;-)

0
Svendvd

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" />
0
Alex

Regardez les étapes de John Oleynik: www.stackoverflow.com/a/15709686/20146. Cela a fonctionné pour moi.

0
viktor0710

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 

0
user2739528