Google MapFragment пуст (белый) с Не удалось найти класс 'maps.j.k'

Я пытаюсь создать официальный образец android google map api v2 на телефоне (пряничный 2.3.5). Я добавил 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: невозможно разрешить новый экземпляр 3571 (Lmaps/j/k;) в Lmaps/y/ae;

Я подозреваю, что моя структура проекта в eclipse 3.8 несколько запутана.

Я пробовал следующие вещи (даже самые идиотские) безрезультатно.

1. Неверный ключ api?

Я сгенерировал "debug.keystore" с keytool и обновил предпочтение eclipse (Android/Build/Keystore). Конечно, я зарегистрировал новое хранилище ключей /SHA 1 и получил новый ключ api, который я использовал в файле AndroidManifest

2. Неверная цель проекта?

Я попытался построить два моих проекта со следующими целями:

  • Android 4.2.1
  • Google Api 4.2.1

3. добавление google-play-services_lib в зависимости от проекта

Я попытался добавить google-play-services_lib в качестве зависимости проекта от того, чтобы добавить его в качестве библиотеки андроида в путь создания демо. Установите галочку напротив соответствующего экспорта.

4. проверить карты Google 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

Ответ 1

У меня была точно такая же проблема (все конфигурации одинаковы, файл maps.j.k в logcat). Тем не менее, для меня выбор Google API, как цель сборки, решил. Но это Google API 4.2, поэтому я предлагаю вам установить обновление и попробовать с более новой целью.

Ответ 2

Я думаю, что вы можете сделать что-то не так, когда примените api KEY. У меня такая же проблема, и, наконец, я обнаружил, что я включил неверный сервис. на https://code.google.com/apis/console/,

Есть Google Maps API v2 и Google Maps Android API v2.

Вы должны использовать Google Maps Android API v2.

Ответ 3

Я решил эту проблему, изменив targetSdkVersion с последней доступной targetSdkVersion в файле AndroiMainfest.xml.

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

Ответ 4

Используете ли вы ProGuard? Обычно имена классов, такие как "a", "b" и т.д., Являются результатом того, что ProGuard запутывает имена классов, и, возможно, API карт нарушается, когда это происходит. В этом случае вам придется отключить ProGuard или добавить некоторые строки -keep в файл proguard.cfg. Этот пост показывает, как выглядят эти строки.

Ответ 5

В моем случае это произошло из-за 2 проблем

  • на моем телефоне последнее приложение Google Maps не было установлено (на самом деле карт Google не было вообще)
  • У меня не было всех необходимых разрешений в моем манифесте

    <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

Ответ 6

http://developer.android.com/sdk/index.html - это ссылка для пакета adt в android. Загрузите это и начните заново.. может быть там проблема с вашим ADT.

Ответ 7

Проверьте API-интерфейс консоли, который вы включили Google Maps Android API v2

Ответ 8

Я имел дело с той же проблемой. Я попытался реализовать com.example.mapdemo и имел чертовски время.

Я скопировал код BasicMapActivity в чистый новый проект и сделал библиотеки похожими, как указано выше.

В принципе, я не мог заставить себя работать. Я получил ошибку "Ошибка авторизации" в отладчике.

Затем, сегодня, я подготовил новые ключи специально для каждого проекта с конкретным com.example.xxx после точки с запятой при подготовке ключа в Google Консоли.

Я делал Project- > Clean на каждом шагу.

Сначала я запустил его в отладчике, а затем просто запустил. И, если я помню, несколько раз после внесения изменений в манифест.

Тогда, наконец, они сработали. В конце концов, казалось, потребовался ключ для каждого конкретного проекта.

Ответ 9

Вот что сработало для меня. Когда вы используете консоль Google API для создания вашего ключа API, обязательно добавьте com.example.mapdemo к отпечатку SHA1. (Я использовал что-то еще более подходящее для другого приложения, которое я сейчас разрабатываю.) Что меня насторожило в этом решении, было ошибкой авторизации в LogCat.

Ответ 10

В моем случае я добавил интерфейс LocationSource, чтобы получить данные о местоположении, но я забыл добавить:

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

в файле манифеста.

Ответ 11

Не забудьте использовать отдельные ключи для отладки и выпуска версии приложения.

Ответ 12

Если вы уже все пробовали, попробуйте удалить и снова установить приложение: на моем телефоне (S3 mini) после первого запуска с неправильным ключом я его исправил, но он не работал до полной деинсталляции, Возможно, используется какое-то кеширование.