15

我正在尝试在(姜饼 2.3.5)手机上构建官方的android google map api v2示例。我添加android-support-v4.jar到官方示例项目中。

我从官方教程中获取了样本<android-sdk>/extras/google-play-services/samples/maps

我在 Eclipse 中复制了示例应用程序,将该google-play-services_lib项目作为 Android 库引用,并使用 Android SDK 4.1.2 (api 16) 构建整个项目。

不幸的是,当我启动应用程序时,地图是空白的,我没有任何异常或消息。我唯一得到的是 logcat 中的那些可疑行:

    Unable to resolve superclass of Lmaps/a/du; (411)                     
    Link of class 'Lmaps/a/du;' failed                                    
    Unable to resolve superclass of Lmaps/a/ej; (2363)                    
    Link of class 'Lmaps/a/ej;' failed                                    
    Unable to resolve superclass of Lmaps/j/k; (2379)                     
    Link of class 'Lmaps/j/k;' failed                                     

ERR 找不到类'maps.jk',引用自方法maps.y.ae.a
VFY:无法解析Lmaps/y/ae 中的新实例3571 (Lmaps/j/k;);

我怀疑我在 eclipse 3.8 中的项目结构有些混乱。

我尝试了以下事情(即使是最愚蠢的)但无济于事。

1. api密钥无效?

我使用 keytool 生成了一个“debug.keystore”并更新了 eclipse 首选项(Android/Build/Keystore)。当然,我注册了新的密钥库/SHA1 并获得了我在 AndroidManifest 文件中使用的新 api 密钥

2. 错误的项目目标?

我尝试使用以下目标构建我的两个项目:

  • 安卓 4.2.1
  • 谷歌 API 4.2.1

3. 添加 google-play-services_lib 作为项目依赖

我尝试将 google-play-services_lib 添加为项目依赖项,并在演示构建路径中添加为 android 库。并勾选匹配的导出复选框。

4.在手机上测试google maps api v2

我下载了trulia房地产应用,据说在手机上使用v2 api,以确保手机与新api兼容

这是示例应用程序的清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mapdemo"
    android:versionCode="1"
    android:versionName="1.0" >
    <permission
        android:name="com.example.mapdemo.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />
    <uses-permission android:name="com.example.mapdemo.permission.MAPS_RECEIVE" />
    <!-- Copied from Google Maps Library/AndroidManifest.xml. -->
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <!-- External storage for caching. -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- My Location -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- Maps API needs OpenGL ES 2.0. -->
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />
    <!-- End of copy. -->
    <application
        android:hardwareAccelerated="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/demo_title" >
        <!-- You must insert your own Google Maps for Android API v2 key in here. -->
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="XXXXXXXX" />
        <activity android:name=".MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".BasicMapActivity"
            android:label="@string/basic_map" />
        <activity
            android:name=".CameraDemoActivity"
            android:label="@string/camera_demo" />
        <activity
            android:name=".EventsDemoActivity"
            android:label="@string/events_demo" />
        <activity
            android:name=".GroundOverlayDemoActivity"
            android:label="@string/groundoverlay_demo" />
        <activity
            android:name=".LayersDemoActivity"
            android:label="@string/layers_demo" />
        <activity
            android:name=".LocationSourceDemoActivity"
            android:label="@string/locationsource_demo" />
        <activity
            android:name=".MarkerDemoActivity"
            android:label="@string/marker_demo" />
        <activity
            android:name=".OptionsDemoActivity"
            android:label="@string/options_demo" />
        <activity
            android:name=".PolygonDemoActivity"
            android:label="@string/polygon_demo" />
        <activity
            android:name=".PolylineDemoActivity"
            android:label="@string/polyline_demo" />
        <activity
            android:name=".ProgrammaticDemoActivity"
            android:label="@string/programmatic_demo" />
        <activity
            android:name=".TileOverlayDemoActivity"
            android:label="@string/tile_overlay_demo" />
        <activity
            android:name=".UiSettingsDemoActivity"
            android:label="@string/uisettings_demo" />
        <activity
            android:name=".RawMapViewDemoActivity"
            android:label="@string/raw_mapview_demo" />
        <activity
            android:name=".RetainMapActivity"
            android:label="@string/retain_map" />
        <activity
            android:name=".MultiMapDemoActivity"
            android:label="@string/multi_map_demo" />
    </application>
</manifest>

这是我的项目结构/构建路径的一些屏幕截图。

项目结构

目标和库

构建路径

4

12 回答 12

15

我认为您在应用 api KEY 时可能会出错。我有同样的问题,最后我发现我打开了错误的服务。在https://code.google.com/apis/console/

Google Maps API v2Google Maps Android API v2

你应该使用Google Maps Android API v2.

于 2012-12-10T07:16:03.183 回答
4

我遇到了完全相同的问题(所有配置都相同,logcat 中的 maps.jk 内容)。但是,对我来说,选择 Google API 作为构建目标解决了它。但那是 Google APIs 4.2,所以我建议您安装更新并尝试使用更新的目标。

于 2012-12-07T22:53:43.793 回答
3

我通过在AndroiMainfest.xml文件中使用 de last targetSdkVersion更改 de targetSdkVersion解决了这个问题。

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />
于 2013-04-13T23:04:28.620 回答
2

你在使用 ProGuard 吗?通常,像“a”、“b”等类名是 ProGuard 混淆类名的结果,当这种情况发生时,地图 API 可能会中断。如果是这种情况,您将不得不禁用 ProGuard 或-keep在您的 proguard.cfg 文件中添加一些行。这篇文章展示了这些线条的外观。

于 2012-12-06T16:18:49.097 回答
2

就我而言,这是由于两个问题

  1. 在我的手机上没有安装最新的谷歌地图应用程序(事实上根本没有谷歌地图)
  2. 我没有在清单中设置所有必需的权限

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

https://developers.google.com/maps/documentation/android/start#installing_the_google_maps_android_v2_api中所述

于 2012-12-19T21:47:59.633 回答
1

http://developer.android.com/sdk/index.html -- 这是 android 中的 adt 包的链接..尝试下载并重新开始..也许您的 ADT 有问题。

于 2013-02-05T03:25:01.590 回答
0

检查您已启用 Google Maps Android API v2的控制台 API

于 2012-12-11T18:22:20.383 回答
0

我正在处理同样的问题。我试图实现 com.example.mapdemo 并且玩得很开心。

我将 BasicMapActivity 的代码复制到一个干净的新项目中,并使库看起来如上。

基本上,我都无法工作。我在调试器中收到“授权失败”错误。

然后,今天,我在 Google Console 中准备密钥时,专门为每个项目准备了新的密钥,分号后带有特定的 com.example.xxx。

我在每一步都做了项目->清洁。

我先在调试器中运行它,然后运行。而且,如果我记得的话,在对清单进行更改后几次。

然后,最后,他们工作了。最后,似乎每个特定项目都需要一个密钥。

于 2012-12-21T16:03:24.513 回答
0

这对我有用。当您使用 Google API 控制台创建 API 密钥时,请务必将 ;com.example.mapdemo 附加到 SHA1 指纹。(我正在使用更适合我目前正在开发的另一个应用程序的其他东西。)在这个解决方案中让我知道的是 LogCat 中的授权错误。

于 2013-02-09T13:40:00.143 回答
0

就我而言,我添加了 LocationSource 接口,以便获取位置数据,但我忘了添加:

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

在清单文件中。

于 2013-04-05T01:34:40.567 回答
0

不要忘记为应用程序的调试和发布版本使用单独的密钥!

于 2013-08-23T08:06:41.893 回答
0

如果您已经尝试了所有方法,请尝试卸载并重新安装您的应用程序:在我的手机(S3 mini)上,第一次使用错误的密钥启动后,我更正了它,但直到完全卸载它才起作用。也许使用了某种缓存。

于 2013-09-26T05:15:04.590 回答