谷歌地图API V2无法使用。

7
我正在尝试运行此处提到的示例代码:Google Maps Android API V2示例代码,但我遇到了NoClassDefFound错误。以下是我的logcat。
有人能帮我解决吗? 非常感谢任何帮助。
12-04 18:04:18.854: E/AndroidRuntime(1801): java.lang.ExceptionInInitializerError
12-04 18:04:18.854: E/AndroidRuntime(1801):     at java.lang.Class.newInstanceImpl(Native Method)
12-04 18:04:18.854: E/AndroidRuntime(1801):     at java.lang.Class.newInstance(Class.java:1319)
12-04 18:04:18.854: E/AndroidRuntime(1801):     at android.app.Instrumentation.newActivity(Instrumentation.java:1053)
12-04 18:04:18.854: E/AndroidRuntime(1801):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974)
12-04 18:04:18.854: E/AndroidRuntime(1801):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
12-04 18:04:18.854: E/AndroidRuntime(1801):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
12-04 18:04:18.854: E/AndroidRuntime(1801):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
12-04 18:04:18.854: E/AndroidRuntime(1801):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-04 18:04:18.854: E/AndroidRuntime(1801):     at android.os.Looper.loop(Looper.java:137)
12-04 18:04:18.854: E/AndroidRuntime(1801):     at android.app.ActivityThread.main(ActivityThread.java:4745)
12-04 18:04:18.854: E/AndroidRuntime(1801):     at java.lang.reflect.Method.invokeNative(Native Method)
12-04 18:04:18.854: E/AndroidRuntime(1801):     at java.lang.reflect.Method.invoke(Method.java:511)
12-04 18:04:18.854: E/AndroidRuntime(1801):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-04 18:04:18.854: E/AndroidRuntime(1801):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-04 18:04:18.854: E/AndroidRuntime(1801):     at dalvik.system.NativeStart.main(Native Method)
12-04 18:04:18.854: E/AndroidRuntime(1801): Caused by: java.lang.NoClassDefFoundError: com.example.mapdemo.BasicMapActivity
12-04 18:04:18.854: E/AndroidRuntime(1801):     at com.example.mapdemo.MainActivity.<clinit>(MainActivity.java:98)
12-04 18:04:18.854: E/AndroidRuntime(1801):     ... 15 more

com.example.mapdemo.BasicMapActivity 存在吗? - njzk2
是的,我检查了所有的库和类都存在。 - xyz
显然,它没有找到。它被导出了吗?它在bin文件夹里吗? - njzk2
10个回答

35

我曾经遇到了相同的问题,通过以下步骤解决:

  • 删除您手动添加的android-support-v4.jar文件
  • 右击项目,选择“Android Tools”->“Add Support Library ...”

之后,一切都正常工作。


你是在哪个项目中添加了支持库?是主项目还是 Google Play 服务库项目? - Richard Lewin
2
我无法确定地图API v2的最低Android操作系统要求是什么。这能在Android 2.2上使用吗? - Ivan G.
@RichardLewin请按照Jairo的说明操作Demo应用程序,不要使用google-play-services_lib。 - Stealth Rabbi
@Jairo:感谢分享!我想知道,第一次设置Android示例项目时不会遇到麻烦是什么时候…… - longi

3

这对我很有帮助。

一旦您导入了Android-Support-V4.jar和Google_Play_Services_lib.jar,请转到:

项目属性 > Java Build Path > Order and Export。

然后确保您选中了Android-Support-V4.jar和Google_Play_Services_lib.jar旁边的复选框。

点击确定,然后运行。一切都应该没问题。


1

android-support-v4.jar的多重引用

这对我有用。
如果你的项目和Google Play服务库项目都包含android-support-v4.jar,则会发生冲突。
从任何一个项目中删除android-support-v4.jar。


1

关注NewUserSOF的答案(我对此很陌生):

我实施了Jairo的解决方案,Google Maps V2“MainActivity”运行并显示了选项列表。

但现在,当我单击它们中的任何一个时,我的模拟器会说我需要更新Google Play服务。 当我点击“更新”按钮时,该应用程序会崩溃。

来自LogCat:

12-19 16: 02: 44.902:W / GooglePlayServicesUtil(2431):Google Play服务已过期。 需要2012100但找到1015

12-19 16: 02: 51.136:E / AndroidRuntime(2431):android.content.ActivityNotFoundException:未找到处理意图的Activity {act = android.intent.action.VIEW dat = http://play.google.com/store/apps/details?id=com.google.android.gms flg = 0x80000 pkg = com.android.vending}

有没有办法在模拟器上更新Google Play服务。(模拟器是运行Google API的Nexus S)。


它不应该在模拟器上运行,只能在真实设备上运行。 - Andrew S

0

对我来说,问题是没有安装Google地图。我清除了我的平板电脑,忘记重新安装它。


0

听起来你好像缺少了一些重要的东西 ;) 你是否完成了以下步骤?

  • 选择项目 > 属性,选择 Java Build Path,并导航到 Libraries。
  • 选择 Add External Jars,包括以下 jar 文件,并单击 OK:

/extras/android/compatibility/v4/android-support-v4.jar

  • 请添加您自己的Google Maps Android API密钥。

0

你的示例项目中是否将Google Play服务库项目作为库项目引用?


0
编辑:Jairo的答案对我有用。 编辑2:它能运行,但没有显示地图。我已经放置了API密钥。这是一个新的,我刚刚得到它。使用的包名是com.example.mapdemo。 编辑3:刷新了API密钥(它们的有效期不长)。仍然没有显示地图。 编辑4:由于使用了错误的密钥库,导致SHA1错误。当我搜索时,在.android文件夹中找不到它(Ubuntu无法搜索隐藏文件),而是显示了我从下载Android源代码中获得的密钥库。
我遇到了完全相同的错误。
MainActivity开始引用了BasicMapActivity,它位于相同的包中。 BasicMapActivity扩展了android-support-v4.jar中的FragmentActivity。
在这个页面上:https://developers.google.com/maps/documentation/android/intro 查看步骤4:“选择添加外部JAR文件,包括以下JAR文件,并点击确定: /extras/android/compatibility/v4/android-support-v4.jar”
我的路径指向的是/support/而不是/compatibility/ - 我没有/compatibility/文件夹。 也许这是一个线索?

我的 android-support-v4.jar 文件的修改日期是 2012 年 11 月 19 日上午 09:14:47 EST。这让我想知道是否错过了最新的更新。SDK 管理器已经运行多次。


0

1) 确认Eclipse使用的调试密钥库是您提取SHA1哈希以生成API密钥的那个

前往:

窗口 > Android > 构建 >“默认调试密钥库”,并复制密钥库的路径

运行

keytool -list -v -keystore YOUR_KEYSTORE_PATH -alias androiddebugkey

2) 确认在API控制台配置中,在SHA1哈希之后输入了您的应用程序包

Android应用程序: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX;com.yourapp.package

3) 我在测试刚开始就遇到了这个错误,我记得Logcat记录了一个错误。大概是“认证错误”或者“API密钥错误”之类的内容。在第一次运行应用程序时,注意查看Logcat以确保您没有遇到API密钥的问题。

如果您遇到此错误,则需要杀死/重新安装应用程序。在应用程序仍在运行时修复api密钥并不能完全解决问题。

4) 我不得不将支持jar添加到示例应用程序中的libs文件夹中。在eclipse buildpath中将其链接为外部jar对我来说并不起作用。


0

根据您的源代码设置,您可能需要将android-support-library设置为导出(右键单击->属性->Java构建路径->顺序和导出)。 此外,您需要使用SupportMapFragment而不是MapFragment来支持库。 确保您还在使用getSupportFragmentManager而不是getFragmentManager。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接