43

我正在尝试使Android 'Google Maps Android API v2'的示例代码正常工作。我得到的项目没有错误。但是,当我尝试在我的 Galaxy Nexus 上运行该应用程序(通过 USB 连接到我的笔记本电脑)时,该应用程序立即崩溃。

  • 我在 AndroidManifest.xml 中填写了我自己的 Maps API Key
  • 我针对 Android 4.1.2 构建

这是日志记录:

Unable to resolve superclass of Lcom/example/mapdemo/BasicMapActivity; (66) 
Link of class 'Lcom/example/mapdemo/BasicMapActivity;' failed 
Could not find class 'com.example.mapdemo.BasicMapActivity', referenced from method com.example.mapdemo.MainActivity.<clinit> 
VFY: unable to resolve const-class 108 (Lcom/example/mapdemo/BasicMapActivity;) in Lcom/example/mapdemo/MainActivity; 
VFY: replacing opcode 0x1c at 0x000d 
Exception Ljava/lang/NoClassDefFoundError; thrown while initializing Lcom/example/mapdemo/MainActivity; 
Class init failed in newInstance call (Lcom/example/mapdemo/MainActivity;) 
Shutting down VM 
threadid=1: thread exiting with uncaught exception (group=0x41ac9930) 
FATAL EXCEPTION: main 
java.lang.ExceptionInInitializerError
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1319)
at android.app.Instrumentation.newActivity(Instrumentation.java:1054)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5039)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NoClassDefFoundError: com.example.mapdemo.BasicMapActivity
at com.example.mapdemo.MainActivity.<clinit>(MainActivity.java:97)
... 15 more

有没有人提示如何解决这个问题或我可能做错了什么?

4

8 回答 8

77

非常非常仔细地遵循婴儿床单:
https ://docs.google.com/document/pub?id=19nQzvKP-CVLd7_VrpwnHfl-AE9fjbJySowONZZtNHzw

特别是,我认为您需要:

  • 导入“google-play-services_lib”项目的实际源代码并将其链接为Android库。
    • 通过 Project -> Properties -> Android -> Library, Add -> google-play-services_lib 执行此操作(您可以右键单击您的项目并选择 Properties,然后选择 Android)。
    • 不要通过您的项目的“Java 构建路径”其添加为依赖项目,这对我不起作用。
  • 将 google-play-services.jar 和 android-support-v4.jar 添加到示例项目的“libs”文件夹中,并在“构建路径 -> 配置构建路径 -> 库”中将它们添加为“外部外部 JAR” .

我发现第二步是必要的,因为我在尝试使用示例代码时遇到了与您完全相同的错误。第一步是避免在我的实际项目中出现的必要NoClassDefFoundError步骤com.google.android.gms.R$styleable

在示例代码工作之前,我还需要执行干净的构建并从设备中卸载应用程序(来自早期的测试尝试)。

于 2012-12-05T23:41:47.633 回答
26

按照谷歌的下一个示例代码说明进行操作。

跳过“4”部分,并按照以下说明进行操作:

  • 将新文件夹添加到名为“libs”的项目中
  • 复制 google-play-services.jar 表单:

    “android-sdk 文件夹\extras\google\google_play_services\libproject\google-play-services_lib\libs”

    到“libs”文件夹->右键单击此文件夹中的此jar->构建路径->添加到构建路径。

  • 复制 android-support-v4.jar 形式:

    “android-sdk-文件夹\extras\android\support\v4”

    到“libs”文件夹->右键单击此文件夹中的此jar->构建路径->添加到构建路径。

其中“android-sdk-folder”通常看起来像:“C:\Users\User_Name\android-sdks”

于 2012-12-10T22:45:51.810 回答
14

我有同样的问题,我做了以下解决问题。

  1. 转到项目的“属性”。
  2. 选择“Java 构建路径”
  3. 选择“订购和导出”选项卡
  4. 您应该在此处看到所选项目的“src”和“gen”路径和依赖项。

他们列出的顺序是首先是“src”,然后是“gen”路径我切换它们,以便在“src”之前构建“gen”文件夹

然后“检查”列出的每一项

请参阅: Android 上 Java 库中的代码的 NoClassDefFoundError

于 2013-03-29T18:56:33.637 回答
2

发生这种情况是因为对如何导入项目有很多困惑。文档 https://developers.google.com/maps/documentation/android/intro#sample_code 说您不应该在任何时候选择“将项目复制到工作区”,并且要让示例运行,这是您需要坚持的。不要为播放服务和示例选择此选项 - 将它们留在原处。

导入两者后,请检查以下内容:

  1. 右键单击 MainActivity 项目并选择属性
  2. 转到 Android 并确保您在 google-play-services-lib 旁边看到一个绿色勾号(播放服务库不应添加为 jar - 而应添加为 Android 库)
  3. 转到 Java 构建路径并在库部分中导入外部 jar (android-support-v4.jar)
  4. [重要] 转到 Java 构建路径中的 Order and Export 并确保 android-support-v4.jar 旁边有一个勾号(默认情况下不会发生,这就是您看到您提到的错误的原因在顶部)
  5. 确保在进行更改后清理并构建项目,这样您就不会最终尝试修复有效的东西,但根本没有被推动。
于 2013-06-09T17:42:08.023 回答
1
  1. 按照谷歌的示例代码说明进行操作。
  2. 并像这样设置Java构建路径:在此处输入图像描述
于 2013-09-20T07:14:01.240 回答
0

我遇到了同样的问题,无法解决。最后,我从另一台机器上获取了示例项目文件夹,将其复制到我的并加载了我从另一台机器上获取的新项目。然后一切正常。我试图通过比较 2 个示例项目来跟踪问题,但不能。无论如何,我从另一台机器上获取的新示例项目运行良好。

于 2013-04-23T11:50:03.777 回答
0

我有很多同样的问题。文件“import-summary.txt”有答案。就我而言,我已将 eclipse 项目导入到路径名中带有空格的路径中。这会导致向导出现问题。创建了新路径。重新导入项目。然后构建/重建项目。没问题。

于 2015-03-17T05:46:03.183 回答
0
  1. 在新工作区中尝试相同的示例代码。

  2. 甚至您也可以复制并粘贴示例地图项目和 google play services-lib 项目 (/extras/google/google_play_services/libproject/google-play-services_lib,) 并将其粘贴到新的工作区中。

  3. 之后不要忘记从 SDK 添加所需的 JAR 文件。(“android-support-v4.jar”位于“android-sdk”目录下的“/extras/android/compatibility/v4/android-support-v4.jar”中。)
于 2015-06-23T11:33:37.850 回答