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