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) после первого запуска с неправильным ключом я его исправил, но он не работал до полной деинсталляции,
Возможно, используется какое-то кеширование.