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 - 示例代码崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Maps SDK for Android v.3.0.0 BETA "是否可以在没有Google Play服务的设备上运行?

Google Maps API v.3.31更新会破坏StageWebView和StageWebViewBridge

Google Maps Android API V2 检查 Google Maps 应用程序是不是被禁用

无法运行 Google Maps Android API Utility Demo

Google Geolocation API 和 Google Maps Android SDK

Android:使用 Google API 获取实时方向,还是与 Google Maps 通信?