В этом руководстве перечислены требования к конфигурации сборки для использования Navigation SDK для Android. В инструкциях предполагается, что у вас установлена Android IDE и вы знакомы с разработкой Android.
Минимальные требования для использования Navigation SDK
Эти требования применяются к Navigation SDK для Android версии 4.99 и более ранних версий.
Проект Google Cloud Console с включенным навигационным SDK. По вопросам подготовки обратитесь к представителю платформы Google Maps.
Ваше приложение должно быть ориентировано на уровень API 30 или выше.
Чтобы запустить приложение, созданное с помощью Navigation SDK, на устройстве Android должны быть установлены и включены службы Google Play .
В приложение необходимо добавить сведения об авторстве и текст лицензирования .
Настройте свои проекты: проект Cloud Console и проект Android.
Прежде чем вы сможете создать или протестировать приложение, вам необходимо создать проект Cloud Console и добавить учетные данные ключа API. В проекте должна быть предусмотрена подготовка для доступа к навигационному SDK. Всем ключам в проекте Cloud Console предоставляется одинаковый доступ к Navigation SDK. С ключом может быть связано несколько проектов разработки. Если у вас уже есть консольный проект, вы можете добавить ключ к текущему проекту.
Чтобы настроить
- В своем любимом веб-браузере войдите в Cloud Console и создайте проект Cloud Console .
- В вашей IDE , например Android Studio, создайте проект разработки приложения Android и запишите имя пакета.
- Свяжитесь с представителем платформы Google Maps, чтобы предоставить доступ к навигационному SDK для вашего проекта Cloud Console.
- На панели управления Cloud Console в веб-браузере создайте учетные данные для создания ключа API с ограничениями.
- На странице ключа API нажмите «Приложения Android» в области «Ограничения приложений» .
- Нажмите Добавить имя пакета и отпечаток пальца , а затем введите имя пакета вашего проекта разработки и отпечаток SHA-1 для этого ключа.
- Нажмите Сохранить .
Добавьте навигационный SDK в свой проект
Навигационный SDK доступен через Maven или в виде пакета AAR . После создания проекта разработки вы можете интегрировать в него SDK, используя один из следующих подходов.
Использование Maven for Navigation SDK версии 4.5 и более поздних версий (рекомендуется)
Ниже используется репозиторий google()
Maven, который является самым простым и рекомендуемым способом добавления навигационного SDK в ваш проект.
Добавьте следующую зависимость в конфигурацию Gradle или Maven, заменив заполнитель
VERSION_NUMBER
на нужную версию Navigation SDK для Android.Градл
Добавьте следующее в
build.gradle
на уровне модуля:dependencies { ... implementation 'com.google.android.libraries.navigation:navigation:VERSION_NUMBER' }
При обновлении исходного репозитория Maven обратите внимание, что имена групп и артефактов изменились, и плагин
com.google.cloud.artifactregistry.gradle-plugin
больше не нужен.И добавьте следующее в свой
build.gradle
верхнего уровня:allprojects { ... // Required: you must exclude the Google Play service Maps SDK from // your transitive dependencies. This is to ensure there won't be // multiple copies of Google Maps SDK in your binary, as the Navigation // SDK already bundles the Google Maps SDK. configurations { implementation { exclude group: 'com.google.android.gms', module: 'play-services-maps' } } }
Мавен
Добавьте следующее в ваш
pom.xml
:<dependencies> ... <dependency> <groupId>com.google.android.libraries.navigation</groupId> <artifactId>navigation</artifactId> <version>VERSION_NUMBER</version> </dependency> </dependencies>
Если у вас есть какие-либо зависимости, использующие Maps SDK, вам необходимо исключить зависимость в каждой объявленной зависимости, основанной на Maps SDK.
<dependencies> <dependency> <groupId>project.that.brings.in.maps</groupId> <artifactId>MapsConsumer</artifactId> <version>1.0</version> <exclusions> <!-- Navigation SDK already bundles Maps SDK. You must exclude it to prevent duplication--> <exclusion> <!-- declare the exclusion here --> <groupId>com.google.android.gms</groupId> <artifactId>play-services-maps</artifactId> </exclusion> </exclusions> </dependency> </dependencies>
Использование Maven for Navigation SDK до версии 4.5 или с Driver SDK
Навигационный SDK по-прежнему доступен через исходный репозиторий Maven до конца версий v4. Это та же библиотека со всеми теми же обновлениями, что и в приведенной выше версии, и обеспечивающая совместимость с Driver SDK и другими библиотеками во время перехода. Использование этой зависимости требует входа в ваш облачный проект через gcloud
при компиляции.
- Настройте свою среду для доступа к репозиторию Google Maven, как описано в разделе «Предварительные требования» документации Consumer SDK. Доступ к Navigation SDK контролируется через группу рабочей области.
Добавьте следующую зависимость в конфигурацию Gradle или Maven, заменив заполнитель
VERSION_NUMBER
на нужную версию Navigation SDK.Градл
Добавьте следующее в
build.gradle
на уровне модуля:dependencies { ... implementation 'com.google.android.maps:navsdk:VERSION_NUMBER' }
И добавьте следующее в свой
build.gradle
верхнего уровня:allprojects { ... // Required: you must exclude the Google Play service Maps SDK from // your transitive dependencies. This is to ensure there won't be // multiple copies of Google Maps SDK in your binary, as the Navigation // SDK already bundles the Google Maps SDK. configurations { implementation { exclude group: 'com.google.android.gms', module: 'play-services-maps' } } }
Мавен
Добавьте следующее в ваш
pom.xml
:<dependencies> ... <dependency> <groupId>com.google.android.maps</groupId> <artifactId>navsdk</artifactId> <version>VERSION_NUMBER</version> </dependency> </dependencies>
Если у вас есть какие-либо зависимости, использующие Maps SDK, вам необходимо исключить зависимость в каждой объявленной зависимости, основанной на Maps SDK.
<dependencies> <dependency> <groupId>project.that.brings.in.maps</groupId> <artifactId>MapsConsumer</artifactId> <version>1.0</version> <exclusions> <!-- Navigation SDK already bundles Maps SDK. You must exclude it to prevent duplication--> <exclusion> <!-- declare the exclusion here --> <groupId>com.google.android.gms</groupId> <artifactId>play-services-maps</artifactId> </exclusion> </exclusions> </dependency> </dependencies>
Использование загруженного пакета AAR (не рекомендуется)
Navigation SDK также доступен в виде пакета AAR . После создания проекта разработки вы можете интегрировать SDK. Эти инструкции предполагают использование Android Studio для вашей IDE.
Загрузите последнюю версию Navigation SDK с общего Google Диска и разархивируйте ее. Если у вас нет доступа, обратитесь к своему представителю.
В Android Studio откройте проект и добавьте пакет сервисов Google Play с помощью SDK Manager .
Из каталога zip-файлов скопируйте
libs/google_navigation_navmap.aar
в каталогapp/libs
вашего проекта.Добавьте следующее в
build.gradle
на уровне модуля:implementation(name: 'google_navigation_navmap', ext: 'aar')
И добавьте следующее в свой
build.gradle
верхнего уровня:allprojects { ... // Required: you must exclude the Google Play service Maps SDK from // your transitive dependencies. This is to ensure there won't be // multiple copies of Google Maps SDK in your binary, as the Navigation // SDK already bundles the Google Maps SDK. configurations { implementation { exclude group: 'com.google.android.gms', module: 'play-services-maps' } } }
Настройка сборки
После создания проекта вы можете настроить параметры для успешной сборки и использования Navigation SDK.
Обновить локальные свойства
- В папке Gradle Scripts откройте файл
local.properties
и добавьтеandroid.useDeprecatedNdk=true
.
Обновите скрипт сборки Gradle
Откройте файл
build.gradle (Module:app)
и используйте следующие рекомендации, чтобы обновить настройки в соответствии с требованиями Navigation SDK, а также рассмотрите возможность настройки параметров оптимизации.Необходимые настройки для навигационного SDK
- Установите
minSdkVersion
значение 23 или выше. - Установите
targetSdkVersion
значение 30 или выше. - Добавьте параметр
dexOptions
, который увеличиваетjavaMaxHeapSize
. - Задайте расположение дополнительных библиотек.
- Добавьте
repositories
иdependencies
для Navigation SDK. - Замените номера версий в зависимостях на последние доступные версии.
Дополнительные настройки для сокращения времени сборки
- Включите сжатие кода и ресурсов с помощью R8/ProGuard, чтобы удалить неиспользуемый код и ресурсы из зависимостей. Если выполнение шага R8/ProGuard занимает слишком много времени, рассмотрите возможность включения multidex для разработки.
- Уменьшите количество языковых переводов, включенных в сборку: установите
resConfigs
для одного языка во время разработки. Для окончательной сборки установитеresConfigs
для языков, которые вы фактически используете. По умолчанию Gradle включает строки ресурсов для всех языков, поддерживаемых Navigation SDK.
- Установите
Ниже приведен пример сценария сборки Gradle для приложения. Проверьте образцы приложений на наличие обновленных наборов зависимостей, поскольку используемая вами версия Navigation SDK может немного опережать или отставать от этой документации.
apply plugin: 'com.android.application'
apply plugin: 'com.google.cloud.artifactregistry.gradle-plugin'
ext {
androidxVersion = "1.0.0"
lifecycle_version = "1.1.1"
}
android {
compileSdkVersion 30
buildToolsVersion '28.0.3'
defaultConfig {
applicationId "<your id>"
// Navigation SDK supports SDK 23 and later.
minSdkVersion 23
targetSdkVersion 30
versionCode 1
versionName "1.0"
// Set this to the languages you actually use, otherwise you'll include resource strings
// for all languages supported by the Navigation SDK.
resConfigs "en"
multiDexEnabled true
}
dexOptions {
// This increases the amount of memory available to the dexer. This is required to build
// apps using the Navigation SDK.
javaMaxHeapSize "4g"
}
buildTypes {
// Run ProGuard. Note that the Navigation SDK includes its own ProGuard configuration.
// The configuration is included transitively by depending on the Navigation SDK.
// If the ProGuard step takes too long, consider enabling multidex for development work
// instead.
all {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
// This tells Gradle where to look to find additional libraries - in this case, the
// google_navigation_navmap.aar file.
repositories {
flatDir {
dirs 'libs'
}
google()
// Required for accessing the Navigation SDK on Google's Maven repository.
maven {
url "artifactregistry://us-west2-maven.pkg.dev/gmp-artifacts/transportation"
}
}
dependencies {
// Include the Google Navigation SDK
implementation 'com.google.android.maps:navsdk:4.4.0'
// The included AAR file under libs can be used instead of the Maven repository.
// Uncomment the line below and comment out the previous dependency to use
// the AAR file instead. Ensure that you add the AAR file to the libs directory.
// implementation(name: 'google_navigation_navmap', ext: 'aar')
// These dependencies are required for the Navigation SDK to function
// properly at runtime.
implementation 'org.chromium.net:cronet-fallback:69.3497.100'
// Optional for Cronet users:
// implementation 'org.chromium.net:cronet-api:69.3497.100'
implementation 'androidx.appcompat:appcompat:${androidxVersion}'
implementation 'androidx.cardview:cardview:${androidxVersion}'
implementation 'com.google.android.material:material:${androidxVersion}'
implementation 'androidx.mediarouter:mediarouter:${androidxVersion}'
implementation 'androidx.preference:preference:${androidxVersion}'
implementation 'androidx.recyclerview:recyclerview:${androidxVersion}'
implementation 'androidx.legacy:legacy-support-v4:${androidxVersion}'
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'com.github.bumptech.glide:okhttp-integration:4.9.0'
implementation 'android.arch.lifecycle:common-java8:$lifecycle_version'
implementation 'com.android.support:multidex:1.0.3'
implementation 'com.google.android.datatransport:transport-api:2.2.0'
implementation 'com.google.android.datatransport:transport-backend-cct:2.2.0'
implementation 'com.google.android.datatransport:transport-runtime:2.2.0'
implementation 'joda-time:joda-time:2.9.9'
annotationProcessor 'androidx.annotation:annotation:1.1.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
}
Добавьте ключ API в свое приложение
В этом разделе описывается, как хранить ключ API, чтобы ваше приложение могло безопасно ссылаться на него. Вам не следует проверять свой ключ API в системе контроля версий, поэтому мы рекомендуем хранить его в файле secrets.properties
, который находится в корневом каталоге вашего проекта. Дополнительные сведения о файле secrets.properties
см. в разделе Файлы свойств Gradle .
Чтобы упростить эту задачу, мы рекомендуем вам использовать плагин Secrets Gradle для Android .
Чтобы установить плагин Secrets Gradle для Android в свой проект Google Maps:
- В Android Studio откройте файл
build.gradle.kts
илиbuild.gradle
верхнего уровня и добавьте следующий код в элементdependencies
вbuildscript
.Котлин
buildscript { dependencies { classpath("com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1") } }
классный
buildscript { dependencies { classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1" } }
- Откройте файл
build.gradle.kts
илиbuild.gradle
уровня модуля и добавьте следующий код в элементplugins
.Котлин
plugins { // ... id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") }
классный
plugins { // ... id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' }
- В файле
build.gradle.kts
илиbuild.gradle
на уровне модуля убедитесь, что дляtargetSdk
иcompileSdk
установлено значение 34. - Сохраните файл и синхронизируйте проект с Gradle .
- Откройте файл
secrets.properties
в каталоге верхнего уровня, а затем добавьте следующий код. ЗаменитеYOUR_API_KEY
своим ключом API. Сохраните свой ключ в этом файле, посколькуsecrets.properties
не подлежит проверке в системе контроля версий.NAV_API_KEY=YOUR_API_KEY
- Сохраните файл.
Создайте файл
local.defaults.properties
в каталоге верхнего уровня, в той же папке, что и файлsecrets.properties
, а затем добавьте следующий код.NAV_API_KEY=DEFAULT_API_KEY
Целью этого файла является предоставление резервного местоположения для ключа API, если файл
secrets.properties
не найден, чтобы сборка не завершалась сбоем. Это может произойти, если вы клонируете приложение из системы контроля версий, в которой отсутствуетsecrets.properties
, и вы еще не создали файлsecrets.properties
локально, чтобы предоставить свой ключ API.- Сохраните файл.
- В файле
AndroidManifest.xml
перейдите по адресуcom.google.android.geo.API_KEY
и обновитеandroid:value attribute
. Если тег<meta-data>
не существует, создайте его как дочерний элемент тега<application>
.<meta-data android:name="com.google.android.geo.API_KEY" android:value="${MAPS_API_KEY}" />
Note:
com.google.android.geo.API_KEY
is the recommended metadata name for the API key. A key with this name can be used to authenticate to multiple Google Maps-based APIs on the Android platform, including the Navigation SDK for Android. For backwards compatibility, the API also supports the namecom.google.android.maps.v2.API_KEY
. This legacy name allows authentication to the Android Maps API v2 only. An application can specify only one of the API key metadata names. If both are specified, the API throws an exception. -
In Android Studio, open your module-level
build.gradle.kts
orbuild.gradle
file and edit thesecrets
property. If thesecrets
property does not exist, add it.Edit the properties of the plugin to set
propertiesFileName
tosecrets.properties
, setdefaultPropertiesFileName
tolocal.defaults.properties
, and set any other properties.Kotlin
secrets { // To add your Maps API key to this project: // 1. If the secrets.properties file does not exist, create it in the same folder as the local.properties file. // 2. Add this line, where YOUR_API_KEY is your API key: // MAPS_API_KEY=YOUR_API_KEY propertiesFileName = "secrets.properties" // A properties file containing default secret values. This file can be // checked in version control. defaultPropertiesFileName = "local.defaults.properties" // Configure which keys should be ignored by the plugin by providing regular expressions. // "sdk.dir" is ignored by default. ignoreList.add("keyToIgnore") // Ignore the key "keyToIgnore" ignoreList.add("sdk.*") // Ignore all keys matching the regexp "sdk.*" }
классный
secrets { // To add your Maps API key to this project: // 1. If the secrets.properties file does not exist, create it in the same folder as the local.properties file. // 2. Add this line, where YOUR_API_KEY is your API key: // MAPS_API_KEY=YOUR_API_KEY propertiesFileName = "secrets.properties" // A properties file containing default secret values. This file can be // checked in version control. defaultPropertiesFileName = "local.defaults.properties" // Configure which keys should be ignored by the plugin by providing regular expressions. // "sdk.dir" is ignored by default. ignoreList.add("keyToIgnore") // Ignore the key "keyToIgnore" ignoreList.add("sdk.*") // Ignore all keys matching the regexp "sdk.*" }
Включите необходимую атрибуцию в свое приложение
Если вы используете Navigation SDK для Android в своем приложении, вы должны включить текст указания авторства и лицензии с открытым исходным кодом в раздел юридических уведомлений вашего приложения.
Требуемый текст указания авторства и лицензии с открытым исходным кодом можно найти в ZIP-файле Navigation SDK для Android:
-
NOTICE.txt
-
LICENSES.txt