У меня была аналогичная проблема: после создания нескольких новых вариантов сборки с таким же типом («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
can cre ate map api key с помощью keyStore из SHA1 –
Можете ли вы приложить скриншот вашей консоли API с ключами api? – rom4ek
Можете ли вы уточнить ?. – user1668538