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

Posted

技术标签:

【中文标题】Google Maps Android API v2 - 示例代码崩溃【英文标题】:Google Maps Android API v2 - Sample Code crashes 【发布时间】:2012-11-23 21:49:14 【问题描述】:

我正在尝试让 android 'Google Maps Android API v2' 的 sample code 工作。我得到的项目没有错误。但是,当我尝试在我的 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

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

【问题讨论】:

发布的堆栈跟踪中的第一行:Unable to resolve superclass of Lcom/example/mapdemo/BasicMapActivity。看起来你让BasicMapActivity 扩展了错误的类。 【参考方案1】:

    在新工作区中试用相同的示例代码。

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

    之后不要忘记从 SDK 添加所需的 JAR 文件。 (“android-support-v4.jar”位于您的“/extras/android/compatibility/v4/android-support-v4.jar”下 “android-sdk”目录。)

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:
    通过谷歌关注sample code instructions。 并像这样设置Java构建路径:

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

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

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

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

见: NoClassDefFoundError for code in an Java library on Android

【讨论】:

【参考方案7】:

通过谷歌关注next sample code instructions。

跳过“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”

【讨论】:

【参考方案8】:

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

我认为您尤其需要:

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

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

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

【讨论】:

谢谢!我确实不得不将 android-support-v4.jar 放在一个新的“libs”文件夹中。 (在我将此 jar 添加为外部 jar 依赖项之前。)现在应用程序不再崩溃。 谢谢,它对我有用。顺便说一句:Android 上有什么东西真的可以工作吗?还是你需要解决所有问题? 不幸的是,这些步骤对我不起作用。然后我按照 John Oleynik 的步骤(如下:***.com/a/15709686/20146),并且成功了。 只有当我从 libs 目录中删除 google-play-services.jar 时才为我工作。您的所有其他步骤都有效。 @alexx 你的评论拯救了我的一天:),谢谢

以上是关于Google Maps Android API v2 - 示例代码崩溃的主要内容,如果未能解决你的问题,请参考以下文章