【问题标题】:Cannot resolve MapActivity class on Android无法在 Android 上解析 MapActivity 类
【发布时间】:2011-04-06 23:25:39
【问题描述】:

我有一个包含 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}

我确实将目标设置为 Google API,这是一款适用于 Android 1.5 的应用,并在清单文件中将 minsdk 指定为级别 3。地图的使用库也在清单文件中。

<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 时遇到问题,但在任何地方都没有解决方案。有人有线索吗?谢谢。

【问题讨论】:

标签: android


【解决方案1】:

问题在于您的 MapVis 类可能扩展了 com.google.android.maps.MapActivity。为了让系统能够找到这个类,您需要做两件事:

首先确保您的项目在构建路径中包含 Android ma​​ps.jar。从 Eclipse 中找到

Project > Properties > Android

然后选择适合您应用的“Google API”之一。您可以通过检查确认 maps.jar 在您的构建路径中:

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

第二次浏览到您的清单文件,并确保您将uses-library sn-p 嵌套在&lt;application&gt; 标记中,如下所示:

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

愿原力与你同在!

【讨论】:

  • 显然在Project &gt; Properties &gt; Android 下选择google api 意味着您也在选择android 库!呸!
  • "" 确保你有嵌套在 标签中的 uses-library sn-p "" 真正的救星,谢谢!
  • 你救了我的命!我没有在清单中添加&lt;uses-library android:name="com.google.android.maps" /&gt; :)
【解决方案2】:

显然在某些时候我的构建环境真的搞砸了。看起来我不知何故在我的项目中有两次 google APIs jar,导致冲突。我删除了项目并重新创建了它,现在可以使用了。

【讨论】:

  • 您知道,如果您知道接受自己的答案,您将获得“自学”徽章?您已经获得了所需的三票。
  • 同样的事情。在 Eclipse 提示我之后,我再次手动将谷歌地图添加到构建路径中。在重新创建了几次但它不起作用后,我按照@cyber-monk 的说明从构建中删除了地图 jar。之后效果很好。
【解决方案3】:

我也遇到了同样的问题。

我在构建路径中手动添加 maps.jar 并使用 android 2.1 作为目标。尽管我遵循的教程说要这样做,但这似乎不起作用(无论如何都不是在 2.1 上)。

我是如何解决的:

-删除手动添加的 maps.jar,然后我将构建目标设置为 Google APIs 2.1 而不是 Android 2.1

后来我意识到 maps.jar 自动包含在“Google”Android 库中,因此存在冲突。 :D

【讨论】:

  • 完美,这是我的问题 :)
【解决方案4】:

我更新了cyber-monk的答案,因为问题不是你没有maps.jar,问题是你有冲突的jar(例如你将maps.jar与android 4.0混合)。 所以

  1. 确保在Project &gt; Properties &gt; Android 中签入Google API。如果不是这种情况,请选择它并单击应用。此更改将修改文件 project.properties 中的目标属性并更改包含的库。 (例如,使用最新的 android sdk,您将拥有:target=Google Inc.:Google APIs:14
  2. 转到Project &gt; Properties &gt; Java Build Path &gt; Libraries 并确保没有直接包含android.jarma​​ps.jar。您应该只拥有 Google API,其中至少有 ma​​ps.jarandroid.jar 作为叶子。

【讨论】:

    【解决方案5】:

    对于使用 Android studio 和 gradle 的人:

    1. 从依赖项中完全删除 maps.jar(以及为谷歌地图添加的任何其他库)。
    2. 在您的项目清单和地图库(如果您使用一个)模块中,在“应用程序”部分添加此行:

    3. 在您的项目 build.gradle 文件中(如果您正在使用,也可以在地图库 gradle 中)修改 compileSdkVersion:

      compileSdkVersion "Google Inc.:Google APIs:19"

    4. 清理并重建您的项目。

    【讨论】:

      【解决方案6】:

      我遇到了同样的问题,我意识到你不能只将地图库添加到项目中,你必须将目标更改为类似target=Google Inc.:Google APIs:8 而不是android=android-8

      无论如何,谢谢你给了我发现它的提示;)

      【讨论】:

        【解决方案7】:

        试试这个:

        在您的 Android .jar 上右键单击构建路径-> 配置构建路径。那么如果您看到 2 个 maps.jar 包含删除其中一个...

        【讨论】:

        • 没错,当我将 Google 地图支持添加到现有项目时,这也发生在我身上。如果您首先添加代码并在 Eclipse 告诉您包含 maps.jar 时接受,然后更改构建目标,您最终会在构建路径中得到 2 个 maps.jar。
        【解决方案8】:

        约翰的回答对我有用。我花了很长时间才遇到这个解决方案。使用 MapActivity 的一个很好的页面是 here。它涵盖了使用它时遇到的大部分问题,包括 John 的解决方案。

        【讨论】:

          【解决方案9】:

          我遇到了同样的问题,并尝试了上述所有建议的解决方案(重建项目除外),但均未成功。然后我清理了项目并修复了它。在 Eclipse Project>Clean 中检查您的项目并选择确定。

          【讨论】:

          • 遇到了同样的问题,一个简单的项目清理就可以了,谢谢!
          【解决方案10】:

          在我的例子中,maps.jar 也位于我的 libs 目录中。从中删除它可以解决问题。

          【讨论】:

            【解决方案11】:

            @cyber-monk 的(抱歉,还不能对答案发表评论)的答案与互联网上的所有其他答案相似,只是它显示了一个非常重要的细节,大多数人都忽略了。您必须将标签放在标签内。大多数人只是说把它放在清单中,而没有说把它放在哪里。我把它放进去,最后,终于让它工作了

            【讨论】:

              【解决方案12】:

              事实证明,另一个最可能的原因是存在冲突的库,因此导致这些类加载问题,最好删除其他不必要的库。如果您按照以前的贡献者的建议包含了 google maps Lib,那么请删除它们,以便您的项目现在如下所示。

              另一个可能的原因是清单上的包声明。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-01-18
                • 1970-01-01
                • 2020-11-11
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-12-24
                • 2011-07-14
                相关资源
                最近更新 更多