2014-11-06 2 views
15

Приложение для 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).Android: Google Map v2 не отображается карта для выпуска apk

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

+0

can cre ate map api key с помощью keyStore из SHA1 –

+0

Можете ли вы приложить скриншот вашей консоли API с ключами api? – rom4ek

+0

Можете ли вы уточнить ?. – user1668538

ответ

6

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

EDIT

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

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 
+0

Конечно, для режима выпуска нам нужен другой SHA1.I создавался два отдельных Google карты до. Попробовал сохранить оба сертификата в одном ключе карты, но не повезло. Пробовал все, как описано (https://developers.google.com/maps/documentation/android/start#displaying_certificate_information) здесь. Приложение с сертификатом отладки работает нормально, но при переключении в режим выпуска он не отображает карту. Я что-то упустил в андроидских студиях при создании файла APK. Благодарю. – user1668538

+0

@ marcin-orlowski правильно. До тех пор, пока вы добавили свой отпечаток ключа выпуска в «Разрешенные приложения для Android», с именем пакета в конце, разделенным точкой с запятой, тогда ваш APK выпуска также должен отобразить карту. Я написал сообщение с более подробной информацией здесь http://stackoverflow.com/questions/27351357/getting-android-google-map-v2-working-in-release-version-by-generating-sha1-fing –

1
create another Maps API key (to put in your manifest) corresponding with you release 
keystore for release. 

check Google's documentation

+0

Я сделал что, но все тот же (уже упоминалось в моем посте). – user1668538

14

ключ API должен быть зашиты в Android Manifest, и он не работает, если он находится в отдельном РЕСУРСЫ es XML-файл.

+2

Это не отвечает на вопрос. Если у вас есть другой вопрос, вы можете задать его, нажав [Ask Question] (http://stackoverflow.com/questions/ask). Вы также можете [добавить щедрость] (http://stackoverflow.com/help/privileges/set-bounties), чтобы привлечь больше внимания к этому вопросу, как только у вас будет достаточно [репутации] (http://stackoverflow.com/help/ Что-репутация). – Chrismas007

+3

Возможно, мой плохой английский - проблема. У меня была такая же проблема, и я решил ее, переместив ключ API из отдельного XML-файла ресурса в манифест Android. Я не знаю, почему он работал над отладкой, а не с подписанным APK, но поскольку единственное изменение, которое я сделал, это перемещение ключа API, это решение для меня. –

+1

Человек, ты действительно спас мне психическое здравомыслие. Я боролся с этой проблемой в течение нескольких дней и никогда не думал об этом: студия Android создает отдельный файл ресурсов для ключа при использовании мастера карт, я предположил, что это правильно. Бесконечно благодарен! – Manzotin

1

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

2

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

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

EDIT 1
шаги, чтобы сделать это
1) Создание файла с помощью АПК «С помощью мастера экспорта» в файле «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.

+1

Проверьте ответ на изменение @ tod – Kunal

+0

Большое спасибо. вы меня спасе –

0

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

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

19

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

+0

СПАСИБО, это была моя проблема! Обязательно перейдите в структуру «Проект», чтобы просмотреть иерархию. – baconcheese113

+0

Это правда, но не забудьте указать оригинальному автору этого ответа: http://stackoverflow.com/a/27068196/2249692 – Cyruxx

+0

Мой проект не имеет приложения/src/debug/res/или app/src/release/res , Как я его получаю, или я должен его создать? Ответьте мне –

1

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

+0

Да, это мое дело. Я добавил SHA-1 в консоль разработчика, но все еще не работает. Пока вы не увидите это сообщение и не поймете, что есть два файла google_maps_api.xml, один под параметрами debug/res/values ​​и один в разделе release/res/values. – River2202

2

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

  1. отладочных Вариант

    • Сформировать новый ключ Android отладки с помощью Keytool
    • Associate этот ключ (SHA-1) с андроид карты ключ API на Google консоли
    • отладки mode имеет файл google_maps_api.xml, в котором хранится ключ api для Android android (src/debug /.../ google_maps_api.xml) в виде строки «google_maps_key»
  2. сборки выпуска Вариант

    • Сформировать новый ключ андроид релиз с помощью Keytool
    • Assoiciate этот ключ (SHA-1) с новым Android Map API ключ на 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" /> 

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

3

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

для Android Studio:

  1. Строить-Генерирование Подпись APK
  2. Copy Key Store Path.
  3. Теперь откройте командную строку и перейдите в папку C: \ Program Files \ Java \ jdk1.6.0_39 \ bin> (или любую установленную версию jdk).
  4. Тип keytool -list -v -keystore, а затем вставьте свой путь к хранилищу ключей (например, C: \ Program Files \ Java \ jdk1.6.0_39 \ bin> keytool -list -v -keystore "E: \ Мои проекты \ Android \ android studio \ signed apks \ Hello World \ HelloWorld.jks ").
  5. Теперь он запросит пароль для хранения ключей, предоставит вам и нажмите Enter, чтобы получить ключи сертификата SHA1 и MD5.
  6. вы можете увидеть SHA1 для вашего отладки сертификата и использования в Developer Google консоли
+0

** Пожалуйста, посмотрите на это видео Как создать SHA1 для выпуска ** youtu.be/g75cZXjmuj8 –

1

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

Примечание ниже для Ubuntu конкретно:

  1. Get SHA1 для отладки с помощью следующей команды

    keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android 
    
  2. Для получения 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 ключа имя псевдонима используется при genrating подписанного хранилища ключей

и password пароль, используемый во время подписания apk

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

0

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

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

enter image description here

1

Как получить релиз апи 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> 

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

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

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

Конечно, я снова просмотрел весь процесс API Google Cloud, чтобы проверить, не пропало ли что-то в моих учетных данных ключа API, но я не нашел ничего плохого. Фактически, для новых APK указывается, что добавляет информацию о строках (имя + отпечаток пальца) к существующим Credentials 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»). Это довольно запутывает для меня, поскольку «идентификатор приложения» Gradle не должен перекрывать имя пакета «Манифест». Но когда мы внимательно изучаем всю документацию на Android, мы можем прочитать «если имя пакета манифеста отличается от приложения Gradle applicationId, сборка скопирует идентификатор приложения в файле окончательного манифеста». Конечно, оба варианта имеют один и тот же отпечаток пальца, так как оба имеют один и тот же тип сборки («release»).

Таким образом, решение было добавить в одних и тех же полномочиях проекта две новых записей вариантных наследовать тот же ключ 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.релиз»- SHA-1 сертификат отпечатков пальцев =„не ххххх“никаких изменений, так же, как не использовали до сих пор

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

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