Android: Google Map v2 не отображает карту для релиза apk

Приложение google map отлично работает на устройстве с помощью отладочной карты Google Maps API KEY, но когда я создаю подписанный apk для своего приложения с выпуском API карты Google Maps, он не отображает карту. Чтобы создать режим выпуска google API KEY, я использую отпечаток SHA1 с моим хранилищем ключей. И я также определяю "подписи и создания типов" в моих настройках проекта, как объясняется разработчиком .android.com(http://developer.android.com/tools/publishing/app-signing.html).

Пробовал все возможные решения (удаление apk и повторная установка его снова, перезапуск устройства, очистка проекта). ничего не получилось. У кого-нибудь есть хорошее решение моей проблемы, пожалуйста, помогите. FYI Использование платформы для Android.

Ответы

Ответ 1

Возможно, у вас есть два файла google_maps_api.xml, один в папке app/src/debug/res/values, а другой в папке app/src/release/res/values, но только отладочный содержит ваш ключ API.

Ответ 2

Ключ API должен быть жестко закодирован в манифесте Android, и он не работает, если он находится в отдельном XML файле ресурсов.

Ответ 3

Сертификат отладки отличается от вашего производственного сертификата. Вам нужно добавить оба к своей ключевой записи в Google Maps в консоли API в качестве seaparate row - каждый с одним и тем же packageId, но, естественно, другой хэш SHA1.

ИЗМЕНИТЬ

Нет ограничений на то, сколько отпечатков пальцев сертификата и имен пакетов назначается одному ключу Google Maps, поэтому, если вам не нужно, это разделение отлично подходит для создания и создания сборки с использованием того же ключа. В консоли Google это будет так (один sha1 из сертификата отладки, который будет одинаковым для всех приложений, которые вы создаете с помощью этой IDE, а другой - с сертификатом производства):

83:10:58:52:EF:3B:59:70:2B:28:9E:AE:4F:5E:1D:F0:7E:19:FB:F1;com.foo.bar
AE:4F:5E:1D:F0:7E:19:FB:83:10:58:52:EF:3B:59:70:2B:28:9E:AA;com.foo.bar

или даже (но я не рекомендую использовать тот же ключ для разных приложений):

83:10:58:52:EF:3B:59:70:2B:28:9E:AE:4F:5E:1D:F0:7E:19:FB:F1;com.foobar.myapp
AE:4F:5E:1D:F0:7E:19:FB:83:10:58:52:EF:3B:59:70:2B:28:9E:AA;com.foo.bar
EF:3B:59:7E:19:FB:83:10:58:57:AE:4F:5E:1D:F0:2B:28:DE:9E:01;net.something.otherapp

Ответ 4

У меня была эта проблема и я выполнял эти шаги, я думаю, что этот путь является совершенным и полным

Для Android Studio:

  • Build-Generate Signed APK
  • Скопировать путь сохранения ключа.
  • Теперь откройте командную строку и перейдите в папку C:\Program Files\Java\jdk1.6.0_39\bin > (или любую установленную версию jdk).
  • Введите keytool -list -v -keystore, а затем вставьте свой путь к хранилищу ключей (например, C:\Program Files\Java\jdk1.6.0_39\bin > keytool -list -v -keystore "E:\Мои проекты \Android\android studio\подписаны apks\Hello World\HelloWorld.jks" ).
  • Теперь он запросит пароль для хранения ключей, предоставит вам и нажмите Enter, чтобы получить ключи сертификата SHA1 и MD5.
  • Вы можете увидеть SHA1 для своего отладочного сертификата и использовать его в Google Developer Консоль

Ответ 5

Прошу прощения за ответ. Надеюсь, это поможет в будущем. Я использую это решение для решения одной и той же проблемы Когда мы используем карты Google во время разработки, используется debug.keystore по умолчанию, у которого нет пароля. Когда мы создаем файл apk для загрузки в Play Store, создается новый ключ SHA-1, поэтому для этого нужно создать новый debug.keystore. Мы должны создать новый ключ API для этого SHA-1. Согласно решению Как получить сертификат отпечатка сертификата подписки (SHA1) для OAuth 2.0 на Android?, мы можем получить SHA-1 для экспортированного файла apk.

После этого используйте этот новый ключ API в Android Manifest как предыдущий, и вы закончили.

РЕДАКТИРОВАТЬ 1 -
Шаги для этого
1) Создайте файл apk, используя "Использовать мастер экспорта" в файле Android Manifest вашего проекта.
2) После вставки ключа и перед завершением показаны клавиши MD5 и SHA1, как показано на рисунке: pic- (http://i.stack.imgur.com/SldEv.png)
3) Создайте новый API-ключ для Android-проекта в https://console.developers.google.com для нового SHA1, который извлекается в пункте 2).
4) Используйте этот ключ API в файле манифеста, как показано ниже.   

5) Очистите проект и снова создайте файл APK в соответствии с точкой 1).
6) Теперь вы можете видеть карты Google в этом apk.

Ответ 6

Есть две вещи, которые нужно запомнить и заставить работать.

  • Отладка варианта сборки

    • Создайте новый отладочный ключ для Android с помощью keytool
    • Свяжите этот ключ (SHA-1) с ключом api для карты Android на консоли Google.
    • В режиме отладки есть google_maps_api.xml, где хранится ключ api для Android-андроида (src/debug/.../google_maps_api.xml) в виде строки "google_maps_key"
  • Вариант выпуска версии

    • Сгенерируйте новый ключ релиза Android с помощью keytool
    • Ассизируйте этот ключ (SHA-1) с помощью нового ключа api для карты Android на консоли Google.
    • В режиме выпуска есть google_maps_api.xml, где ключ api для релиза android maps хранится (src/release/.../google_maps_api.xml) в виде строки "google_maps_key".

В AndroidManifest.xml добавьте следующую строку:

<meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_maps_key" />

Следуйте обычной процедуре для отладки и выпуска. Он должен работать без проблем.

Ответ 8

вы не можете использовать тот же ключ, который вы использовали при отладке в выпуске, у них разные работы. Чтобы решить эту проблему, вам нужно создать новый ключ API карты Google KEY из хранилища ключей, который вы используете в своем выпуске. см. это видео для получения более подробной информации https://www.youtube.com/watch?v=xLJ0jDFdUZ0

Ответ 9

для фьючерсов refs --- my case --- есть два файла google_maps_api.xml, где вам нужно поместить ключ google go. Вы можете очень легко сделать ошибку, чтобы заменить YOUR_API_KEY только в одном из них (особенно если вы просто удалили приложение api/app google и создали новые)

Ответ 10

В консоли Google Api, где мы создали API KEY, у нас есть возможность добавить несколько отпечатков пальцев к одному и тому же ключу. То, что я сделал, это добавить два отпечатка пальца SHA1 для моего отладочного хранилища ключей и освободить хранилище ключей, и для меня работал тот же самый ключ API.

Обратите внимание: ниже для Ubuntu:

  • Получить SHA1 для отладки, используя следующую команду

    keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
    
  • Для получения SHA1 для выпуска команда изменится на

    keytool -list -v -keystore /home/atul/Desktop/Learnings/Projects/TestApp/keystore.jks -alias test -storepass password -keypass password
    

где

/home/atul/Desktop/Learnings/Projects/TestApp/keystore.jks - это путь, в котором присутствует мой файл ключей для подписанного apk

test - это ключевое имя псевдонима, используемое при генерации подписанного хранилища ключей

и password - это пароль, используемый при подписании apk

Надеюсь, это поможет. Счастливое кодирование:)

Ответ 11

Как получить отпечаток api SHA1 для выпуска:

установите подписанный APK, из Playstore или просто скопируйте его на телефон.

Подключите USB-кабель, если он является реальным телефоном, и откройте Android Studio.

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

E/Google Maps Android API: In the Google Developer Console (https://console.developers.google.com)

Ensure that the "Google Maps Android API v2" is enabled.
Ensure that the following Android Key exists:

API Key: AIzaS<YOUR KEY YOUR KEY YOUR KEY YOUR KEY>

Android Application (<cert_fingerprint>;<package_name>): 56:AF:B2:<THIS IS WHAT YOU ARE LOOKING FOR>;br.com.tinx.<your package>

просто следуйте этим инструкциям, создав новую запись в консоли разработчика.

  • Если вы нажмете карты приложений, прежде чем просматривать журнал, вам может потребоваться закрыть приложение из памяти и повторите попытку)
  • Эта процедура также должна работать на эмуляторе.

Ответ 12

Если вы создали код SHA1 из пользовательского хранилища ключей, используйте тот же режим выпуска. или сгенерировать apk, подписавшись с тем же хранилищем ключей и тестом.

Перед этим вам нужно очистить данные приложения (Настройка- > Приложение-выберите приложение-Очистить данные- > удалить) и попробуйте. это сработало для меня. Убедитесь, что имя пакета совпадает с именем в консоли разработчика Google.

Ответ 13

У меня была аналогичная проблема, и проблема заключалась в том, что я сгенерировал apk из Android Studio без предварительного выбора правильного вкуса. Это означает, что мой манифест по-прежнему использовал ключ API Google Maps, который я создал для отладочного вкуса.

Пожалуйста, убедитесь, что вы выбрали аромат выпуска в своей студии Android. Смотрите снимок экрана ниже:

введите описание изображения здесь

Ответ 14

У меня была аналогичная проблема: после создания нескольких новых вариантов сборки с тем же типом ( "release" ), но с некоторыми новыми вариантами ( "бесплатно" и "премиум" ) фрагмент Google Maps больше не показывал карты и экран оказался совершенно пустым. В logcat я мог видеть только следующее сообщение об ошибке "Неожиданный код ответа 400 для https://clients4.google.com/glm/mmap/api", который, вероятно, указывал на некоторые проблемы с Картами Google Доступ к API.

Конечно, я снова просмотрел весь процесс Google Cloud API, чтобы проверить, не пропало ли что-то в моих учетных данных ключа API, но я не нашел ничего плохого. Фактически для нового APK указывается добавление информации о строках (имя + отпечаток пальца) к существующим учетным данным Project, чтобы наследовать тот же самый ключ API, который все еще действителен.

Инструкции, которые мы можем прочитать, очень понятны: "Добавьте имя своего пакета и отпечаток пальца подписывающего сертификата SHA-1, чтобы ограничить использование ваших приложений для Android. Получите имя пакета из файла AndroidManifest.xml. Затем используйте следующую команду для получения отпечатка пальца: keytool -list -v -keystore mystore.keystore".

В моем случае проблема заключалась в том, что мои новые варианты "имена пакетов" были не такими, которые существуют в имени пакета Manifest ( "com.example.app_name.release" ). Фактически, из-за моих новых вкусов у меня было одно имя манифеста, но два новых "реальных" имени пакета: "com.example.app_name.free.release" и "com.example.app_name.premium.release". Эти имена не отображаются в файле манифеста, как они соответствуют конфигурации Gradle, где определены флайеры (в моем случае с атрибутом "applicationIdSuffix" ). Для меня это довольно сбивает с толку, поскольку id приложения Gradle не должен перекрывать имя пакета Manifest. Но когда мы внимательно изучаем всю документацию на Android, мы можем прочитать "если имя пакета манифеста отличается от Gradle applicationId, build будет копировать идентификатор приложения в файле окончательного манифеста". Конечно, оба варианта имеют один и тот же отпечаток пальца, поскольку оба имеют один и тот же тип сборки ( "release" ).

Таким образом, решение заключалось в том, чтобы добавить в те же учетные данные Project два новых варианта, чтобы наследовать один и тот же ключ API:

  • оригинальная запись (не нужно ее удалять): Имя пакета = "com.example.app_name.release" - сертификат SHA-1 fingerprint = "xxxxx"

  • новая запись 1: Имя пакета = "com.example.app_name.free.release" - сертификат SHA-1 fingerprint = "xxxxx" без изменений, так же, как и до сих пор

  • Новая запись 2: Имя пакета = "com.example.app_name.premium.release" - сертификат SHA-1 fingerprint = "xxxxx" без изменений, так же, как и до сих пор

Наконец, может потребоваться очистить сборку, чтобы убедиться, что вы действительно наблюдаете за правильным обновленным поведением в вашем фрагменте или активности карты.

О других рекомендациях, в моем случае я не должен был их применять: - нет необходимости жестко кодировать ключ API в манифесте - нет необходимости создавать новый ключ API для новых вариантов APK - не нужно использовать файлы google_maps_api.xml