Подтвердить что ты не робот

Не удается разрешить класс MapActivity на Android

У меня есть приложение, которое имеет 11 различных видов деятельности. Одним из таких действий является расширение MapActivity (это карта для визуализации данных). Чтобы перейти к этой деятельности, пользователь должен сначала пройти через запуск, затем 3 других действия. Код для запуска MapActivity:

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

Когда это выполняется, я получаю следующий вывод из журнала:

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}

У меня есть целевой набор для API Google, это приложение, предназначенное для Android 1.5, и указывает, что minsdk будет уровнем 3 в файле манифеста. uses-library для карт также находится в файле манифеста.

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

Я занимаюсь этим уже почти 2 дня без каких-либо результатов. Похоже, что есть много людей, имеющих проблемы с запуском MapActivity из других видов деятельности, но нигде нет решений. У кого-нибудь есть ключ? Спасибо.

4b9b3361

Ответ 1

По-видимому, в какой-то момент моя среда сборки действительно перепуталась. Похоже, что я как-то дважды использовал API-интерфейс google API в своем проекте, вызывая конфликт. Я удалил проект и воссоздал его, теперь работает.

Ответ 2

Проблема заключается в том, что класс MapVis, вероятно, распространяется com.google.android.maps.MapActivity. Чтобы система могла находить этот класс, вам нужно сделать две вещи:

Сначала убедитесь, что ваш проект содержит Android maps.jar в вашем пути сборки. Из Eclipse найдите

Project > Properties > Android

Затем выберите один из "API Google", подходящий для вашего приложения. Вы можете подтвердить, что maps.jar находится на пути сборки, проверив:

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

Второе просмотрите файл манифеста и убедитесь, что у вас есть фрагмент uses-library, вложенный в теги <application>, как показано ниже:

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

Пусть сила будет с вами!

Ответ 3

У меня была такая же проблема.

Я добавлял maps.jar вручную в путь сборки и использовал в качестве цели android 2.1. Кажется, что это не работает (хотя и не на 2.1), несмотря на то, что я последовал за этим, чтобы сделать это так.

Как я решил, что это было:

-Удалить добавленный вручную maps.jar, тогда я установил цель сборки для Google API 2.1 вместо Android 2.1

Я понял впоследствии, что maps.jar автоматически включается в "Google" Android-библиотеки, поэтому противоречиво.: D

Ответ 4

Я обновляю кибер-монах, потому что проблема заключается не в том, что у вас нет maps.jar, проблема в том, что у вас конфликтная банка (например, вы смешиваете maps.jar с Android 4.0). Итак,

  • убедитесь, что API Google отмечен в Project > Properties > Android. Если это не так, выберите его и нажмите "Применить". Это изменение изменит свойство target в файле project.properties и изменит включенные библиотеки. (например, с последним sdk для Android, у вас будет: target=Google Inc.:Google APIs:14)
  • перейдите к Project > Properties > Java Build Path > Libraries и убедитесь, что в нем нет android.jar или maps.jar. У вас должен быть Google Apis, по крайней мере, maps.jar и android.jar как листья.

Ответ 5

Для тех, кто использует студию Android и gradle:

  • Полностью удалите maps.jar(и любые другие библиотеки, добавленные для карт Google) из зависимостей.
  • В манифесте проектов и в вашей карте-библиотеке (если вы используете один) модуль добавьте эту строку в раздел "приложение":

    < use-library android: name= "com.google.android.maps" /" >

  • В ваших проектах build.gradle файл (а также в библиотеке карт gradle, если вы используете его), измените compileSdkVersion:

    compileSdkVersion "Google Inc.: API Google: 19"

  • Очистите и перестройте проект.

Ответ 6

У меня была такая же проблема, и я понял, что вы не можете просто добавить библиотеку карт в проект, вам нужно изменить цель на что-то вроде target=Google Inc.:Google APIs:8 вместо android=android-8.

В любом случае спасибо, что ты дал мне подсказку, чтобы открыть его;)

Ответ 7

попробуйте следующее:

на вашем Android.jar щелкните правой кнопкой мыши "Путь сборки" → "Настроить путь сборки". то если вы видите, что 2 maps.jar включает удаление одного из них...

Ответ 8

Джон ответ работал на меня. Мне потребовалось навсегда найти это решение. Отличная страница для работы с MapActivity здесь. Он охватывает большинство проблем, возникающих при работе с ним, включая решение, которое имел Джон.

Ответ 9

У меня была такая же проблема, и я пробовал все вышеперечисленные предлагаемые решения (кроме восстановления проекта) без успеха. Затем я очистил проект, и он был исправлен. В проекте Eclipse > Очистите свой проект и выберите ОК.

Ответ 10

в моем случае оказалось, что maps.jar также сидел в моем каталоге libs. Удаление из него устраняло проблему.

Ответ 11

@cyber-monk (извините, не могу комментировать ответы) ответ подобен любому другому ответу в Интернете, за исключением того, что он показывает одну очень важную деталь, которую большинство не учитывает. Вы должны поместить тег в тег. Большинство просто говорят, чтобы выразить это в манифесте, не сказав ГДЕ, чтобы сказать это. Я положил его внутрь и, наконец, НАКОНЕЦ получил его на работу

Ответ 12

Еще одна наиболее вероятная причина, по которой выяснилось, заключалась в том, что были конфликтующие библиотеки, поэтому в результате возникают проблемы с ClassLoading, хорошо удалить другие ненужные библиотеки. Если вы включили google maps Lib, как было предложено предыдущими участниками, удалите их, чтобы ваш проект выглядел следующим образом.

enter image description here

enter image description here

Другая возможная причина - это объявление пакета в вашем манифесте. enter image description here