37 votes

Impossible de résoudre la classe MapActivity sur Android

J'ai une application qui a 11 activités différentes. L'une de ces activités est une extension de MapActivity (c'est une carte pour la visualisation des données). Pour arriver à cette activité, l'utilisateur doit d'abord voyager à travers le lancement de l'activité, puis 3 autres activités. Le code pour lancer la MapActivity est:

Intent i = new Intent(getBaseContext(), MapVis.class);
i.putExtra("edu.uml.cs.isense.visualizations.session_list", sessions);
startActivity(i);

Lorsque cette fonction est exécutée j'obtiens le résultat suivant dans le Journal:

09-01 14:36:22.389: WARN/dalvikvm(592): Class resolved by unexpected DEX: Ledu/uml/cs/isense/visualizations/MapVis;(0x44981910):0x128260 ref [Lcom/google/android/maps/MapActivity;] Lcom/google/android/maps/MapActivity;(0x44981910):0x13d330
09-01 14:36:22.389: WARN/dalvikvm(592): (Ledu/uml/cs/isense/visualizations/MapVis; had used a different Lcom/google/android/maps/MapActivity; during pre-verification)
09-01 14:36:22.389: WARN/dalvikvm(592): Unable to resolve superclass of Ledu/uml/cs/isense/visualizations/MapVis; (118)
09-01 14:36:22.389: WARN/dalvikvm(592): Link of class 'Ledu/uml/cs/isense/visualizations/MapVis;' failed
09-01 14:36:22.389: DEBUG/AndroidRuntime(592): Shutting down VM
09-01 14:36:22.389: WARN/dalvikvm(592): threadid=1: thread exiting with uncaught exception (group=0x4001d7f0)
09-01 14:36:22.399: ERROR/AndroidRuntime(592): FATAL EXCEPTION: main
09-01 14:36:22.399: ERROR/AndroidRuntime(592): java.lang.NoClassDefFoundError: edu.uml.cs.isense.visualizations.MapVis
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at edu.uml.cs.isense.visualizations.Visualizations.onOptionsItemSelected(Visualizations.java:213)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at android.app.Activity.onMenuItemSelected(Activity.java:2195)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:730)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:532)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at android.view.View$PerformClick.run(View.java:8816)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at android.os.Handler.handleCallback(Handler.java:587)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at android.os.Looper.loop(Looper.java:123)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at android.app.ActivityThread.main(ActivityThread.java:4627)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at java.lang.reflect.Method.invokeNative(Native Method)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at java.lang.reflect.Method.invoke(Method.java:521)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at dalvik.system.NativeStart.main(Native Method)
09-01 14:36:22.399: ERROR/AndroidRuntime(592): Caused by: java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at dalvik.system.DexFile.defineClass(Native Method)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:209)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:203)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
09-01 14:36:22.399: ERROR/AndroidRuntime(592):     ... 17 more
09-01 14:36:22.409: WARN/ActivityManager(92):   Force finishing activity edu.uml.cs.isense/.visualizations.Visualizations
09-01 14:36:22.909: WARN/ActivityManager(92): Activity pause timeout for HistoryRecord{44c84a90 edu.uml.cs.isense/.visualizations.Visualizations}

J'ai l'objectif fixé à Google Api, c'est une application destinée pour Android 1.5, et spécifie le minsdk être de niveau 3 dans le fichier de manifeste. utilise-la bibliothèque de cartes est également dans le fichier de manifeste.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="edu.uml.cs.isense"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Isense" android:label="@string/app_name">
   <intent-filter>
             <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
        </activity>
  <activity android:name=".experiments.Experiments" android:label="@string/app_name_experiments"/>
  <activity android:name=".sessions.Sessions" android:label="@string/app_name"/>
  <activity android:name=".people.People" android:label="@string/app_name_people"/>
  <activity android:name=".profile.Profile" android:label="@string/app_name"/>
  <activity android:name=".sensors.Sensors" android:label="@string/app_name_sensors"/>
  <activity android:name=".visualizations.DataTable" android:label="@string/app_name"/>
  <activity android:name=".visualizations.Visualizations" android:label="@string/app_name"/>
  <activity android:name=".sensors.DataListActivity"
                  android:label="@string/selectFile"
                  android:theme="@android:style/Theme.Dialog"
                  android:configChanges="orientation|keyboardHidden" />
        <activity android:name=".sensors.Upload" android:label="@string/app_name_uploader"/>
        <activity android:name=".visualizations.MapVis" android:label="@string/app_name"
            android:theme="@android:style/Theme.NoTitleBar" />
        <uses-library android:name="com.google.android.maps"/>
</application>
    <uses-sdk android:minSdkVersion="3"/>
</manifest>

J'ai été à ce presque 2 jours sans résultats. Il semble qu'il y a beaucoup de personnes ayant des problèmes de lancement d'un MapActivity d'autres activités, mais il n'y a pas de solutions de n'importe où. Quelqu'un a une idée? Merci.

65voto

cyber-monk Points 2597

Le problème, c'est que votre MapVis classe est probablement l'extension de com.google.android.cartes.MapActivity. Pour que le système soit en mesure de trouver cette classe, vous devez faire deux choses:

Assurez-vous d'abord de votre projet, y compris la Android maps.jar dans votre build path. À partir d'Eclipse trouver

Project > Properties > Android

Sélectionnez ensuite l'une des "Api Google" comme approprié pour votre application. Vous pouvez confirmer que maps.jar est sur votre chemin de génération en vérifiant:

Project > Properties > Java Build Path > Libraries > Expand "Google Apis"

Deuxième naviguez jusqu'à votre fichier manifeste et assurez-vous d'avoir l' uses-library extrait de imbriquée à l'intérieur de l' <application> balises comme suit:

<manifest>
...
   <application ...>
      <uses-library android:name="com.google.android.maps" />
      ...
   </application>
</manifest>

Que la force soit avec vous!

16voto

John Points 329

Apparemment, à un moment donné, mon environnement de construction s'est vraiment détérioré. Il semblerait que j’ai eu deux fois le fichier jar des API Google dans mon projet, ce qui a provoqué un conflit. J'ai supprimé le projet et le recréé, fonctionne maintenant.

13voto

Dan Harvey Points 383

J'ai eu exactement ce même problème.

J'étais en ajoutant le maps.jar manuellement dans le build path et en utilisant android 2.1 en tant que cible. Cela ne semble pas fonctionner (pas sur 2.1 de toute façon) malgré le tutoriel, j'ai suivi disant de faire comme cela.

Comment j'ai résolu, c'était:

-Supprimer l'ajouter manuellement maps.jar puis j'ai mis ma cible de génération de Google Api 2.1 au lieu d'Android 2.1

J'ai réalisé par la suite que le maps.jar est automatiquement inclus dans le "Google" Android libs ainsi contradictoires. :D

5voto

Damien R. Points 141

- Je mettre à jour les cyber-moine réponse parce que le problème n'est pas que vous n'avez pas maps.jar le problème, c'est que vous avez un conflit pot (e.g vous mélangez maps.jar avec android 4.0). Donc

  1. s'assurer que Google Api est vérifié en Project > Properties > Android. Si ce n'est pas le cas, sélectionnez-la et cliquez sur appliquer. Ce changement va modifier la cible de la propriété dans le fichier de projet.propriétés et modifier les bibliothèques incluses. (e.g avec la dernière android sdk, vous aurez: target=Google Inc.:Google APIs:14)
  2. aller à l' Project > Properties > Java Build Path > Libraries et s'assurer qu'il n'y est pas android.jar ou maps.jar directement inclus. Vous ne devriez avoir Api Google avec au moins maps.jar et android.jar comme les feuilles.

3voto

greta Points 61

Pour ceux qui utilisent Android studio et gradle:

  1. Supprimer complètement maps.jar (et tous les autres libs ajoutée pour google maps) à partir de dépendances.
  2. Dans vos projets manifeste et dans vos cartes-bibliothèque (si vous utilisez un module d'ajouter cette ligne dans l '"application" de la section:

    < uses-bibliothèque android:name="com.google.android.les cartes" />

  3. Dans vos projets de construction.gradle fichier (et aussi dans les cartes de la bibliothèque de gradle si vous utilisez un) modifier compileSdkVersion:

    compileSdkVersion "Google Inc.:Google Api:19"

  4. Nettoyer et reconstruire votre projet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X