Google MapFragment为空白(白色),找不到类'maps.j.k'

时间:2012-12-06 15:55:33

标签: android google-maps

我正在尝试在(姜饼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.j.k',从方法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。错误的项目目标?

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

  • Android 4.2.1
  • Google Api 4.2.1

3。将google-play-services_lib添加为项目依赖项

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

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

我下载了trulia real estate应用程序,据称在手机上使用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>

以下是我的项目结构/构建路径的一些截图。

Project structure

Target and libraries

Build path

12 个答案:

答案 0 :(得分:15)

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

Google Maps API v2Google Maps Android API v2

您应该使用Google Maps Android API v2

答案 1 :(得分:4)

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

答案 2 :(得分:3)

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

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

答案 3 :(得分:2)

您使用的是ProGuard吗?通常类名称如“a”,“b”等是ProGuard混淆类名的结果,也许Maps API会在发生这种情况时中断。如果是这种情况,您将需要禁用ProGuard或向proguard.cfg文件添加一些-keep行。 This post显示了这些行的外观。

答案 4 :(得分:2)

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

  1. 在我的手机上没有安装最新的Google地图应用(事实上根本没有谷歌地图)
  2. 我没有在清单中设置所有必需的权限
  3. 
        <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

    中所述

答案 5 :(得分:1)

http://developer.android.com/sdk/index.html - 这是android..try中的adt包的链接,下载并重新开始..可能是你的ADT有问题。

答案 6 :(得分:0)

检查您已启用Google地图 Android API v2

的控制台API

答案 7 :(得分:0)

我正在处理同样的问题。我试图实现com.example.mapdemo并且有点时间。

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

基本上,我无法上班。我在调试器中遇到“授权失败”错误。

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

我做了Project-&gt;每一步都干净。

我首先在调试器中运行它,然后运行。并且,如果我记得,在更改清单后几次。

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

在我的情况下,我添加了LocationSource接口,因此我可以获取位置数据,但我忘了添加:

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

at Manifest文件。

答案 10 :(得分:0)

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

答案 11 :(得分:0)

如果您已尝试过所有内容,请尝试卸载并重新安装您的应用:在我的手机上(S3 mini),首次使用错误的密钥启动后,我更正了它,但直到完全卸载后它才能正常工作。 也许使用某种缓存。