Google Maps Android API v2 - 示例代码崩溃

时间:2012-12-05 22:46:48

标签: android crash maps sample google-maps-android-api-2

我正在努力让sample code Android'Google Maps Android API v2'正常运行。我没有错误地构建项目。但是,当我尝试在我的Galaxy Nexus上运行应用程序(用usb连接到我的笔记本电脑)时,应用程序会立即崩溃。

  • 我在AndroidManifest.xml上填写了我自己的Maps API密钥
  • 我针对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

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

8 个答案:

答案 0 :(得分:78)

非常小心地按照婴儿床单:
https://docs.google.com/document/pub?id=19nQzvKP-CVLd7_VrpwnHfl-AE9fjbJySowONZZtNHzw

特别是,我认为你需要:

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

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

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

答案 1 :(得分:26)

通过谷歌跟踪next sample code instructions

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

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

    “Android的SDK夹\额外\谷歌\ google_play_services \ libproject \ Google处理播放services_lib \库”

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

  • 复制android-support-v4.jar表单:

    “Android的SDK夹\额外\机器人\支持\ V4”

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

“android-sdk-folder”通常如下所示:“C:\ Users \ User_Name \ android-sdks”

答案 2 :(得分:14)

我有同样的问题,我做了以下修复问题。

  1. 转到项目的“属性”。
  2. 选择“Java Build Path”
  3. 选择“订购和导出”标签
  4. 您应该在此处看到所选项目的“src”和“gen”路径和依赖项。
  5. 他们列出的顺序是第一个“src”然后“gen”路径我切换它们,以便“gen”文件夹在“src”之前构建

    然后“检查”列出的每个项目

    请参阅: NoClassDefFoundError for code in an Java library on Android

答案 3 :(得分:2)

这是因为对如何导入项目存在很多困惑。文档 https://developers.google.com/maps/documentation/android/intro#sample_code 假设您不应该随时选择“将项目复制到工作区”,并且为了让样本运行,您需要坚持这样做。不要为播放服务和样本选择此选项 - 将它们保留在原来的位置。

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

  1. 右键单击MainActivity项目,然后选择属性
  2. 转到Android并确保在google-play-services-lib旁边看到一个绿色勾号 (播放服务库不应该作为jar添加 - 而应该添加为Android库)
  3. 转到Java Build Path并在库部分导入外部jar(android-support-v4.jar)
  4. [重要]转到Java Build Path中的Order and Export并确保android-support-v4.jar旁边有一个勾号(默认情况下不会发生这种情况,这就是你看到错误的原因你在顶部提到的)
  5. 确保在进行更改后清理并构建项目,这样您就不会尝试修复有效的内容,但却不会被推送。

答案 4 :(得分:1)

  1. 通过谷歌关注sample code instructions
  2. 并设置如下的Java构建路径:enter image description here

答案 5 :(得分:0)

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

答案 6 :(得分:0)

我遇到了同样的问题。 文件&#39; import-summary.txt&#39;得到了答案。 在我的例子中,我将eclipse项目导入到路径名中带有空格的路径中。这会导致向导出现问题。 创造了新的道路。重新导入项目。然后构建/重建项目。 没问题。

答案 7 :(得分:0)

  1. 在新工作区中尝试相同的示例代码。

  2. 即使你可以复制并粘贴示例地图项目和google play services-lib项目(/ extras / google / google_play_services / libproject / google-play-services_lib),然后将其粘贴到新的新工作区中。< / p>

  3. 不要忘记从SDK添加必需的JAR文件。 (“android-support-v4.jar”位于“/extras/android/compatibility/v4/android-support-v4.jar”下 “android-sdk”drectory。)