Настройте свой проект — версия 4.99 и более ранние.

В этом руководстве перечислены требования к конфигурации сборки для использования Navigation SDK для Android. Инструкции предполагают, что у вас установлена среда разработки Android IDE и вы знакомы с разработкой для Android.

Минимальные требования для использования Navigation SDK

Эти требования применимы к Navigation SDK для Android версии 4.99 и более ранних.

Настройте свои проекты: проект Cloud Console и проект Android

Прежде чем приступить к сборке или тестированию приложения, необходимо создать проект Cloud Console и добавить учётные данные API-ключа. Проект должен быть подготовлен для доступа к Navigation SDK. Все ключи в проекте Cloud Console имеют одинаковый доступ к Navigation SDK. С одним ключом может быть связано несколько проектов разработки. Если у вас уже есть консольный проект, вы можете добавить ключ к текущему проекту.

Чтобы настроить

  1. В вашем любимом веб-браузере войдите в Cloud Console и создайте свой проект Cloud Console .
  2. В вашей среде IDE , например Android Studio, создайте проект разработки приложения для Android и запишите имя пакета.
  3. Обратитесь к представителю Google Maps Platform, чтобы предоставить доступ к Navigation SDK для вашего проекта Cloud Console.
  4. Находясь на панели управления облачной консоли в веб-браузере, создайте учетные данные для генерации ключа API с ограничениями.
  5. На странице ключа API нажмите Приложения Android в области Ограничения приложений .
  6. Нажмите Добавить имя пакета и отпечаток пальца , а затем введите имя пакета вашего проекта разработки и отпечаток пальца SHA-1 для этого ключа.
  7. Нажмите «Сохранить» .

Добавьте Navigation SDK в свой проект

Navigation SDK доступен через Maven или в виде пакета AAR . После создания проекта разработки вы можете интегрировать SDK в него одним из следующих способов.

Используйте Maven for Navigation SDK версии 4.5 и более поздних версий (рекомендуется)

Ниже приведен пример использования репозитория Maven google() , который является самым простым и рекомендуемым способом добавления Navigation SDK в ваш проект.

  1. Добавьте следующую зависимость в конфигурацию 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 to make nsure 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'
           }
    }
    }
    

    Maven

    Добавьте в 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 для Navigation SDK до версии 4.5 или с Driver SDK

Navigation SDK по-прежнему доступен через оригинальный репозиторий Maven для всех остальных версий v4. Это та же библиотека со всеми теми же обновлениями, что и в предыдущей версии, и она обеспечивает совместимость с Driver SDK и другими библиотеками во время перехода. Для использования этой зависимости требуется авторизоваться в вашем облачном проекте с помощью gcloud при компиляции.

  1. Настройте свою среду для доступа к репозиторию Maven от Google, как описано в разделе «Предварительные требования» документации по Consumer SDK. Доступ к Navigation SDK контролируется через группу рабочей области.
  2. Добавьте следующую зависимость в конфигурацию 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 to make sure 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'
            }
    }
    }
    

    Maven

    Добавьте в 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.

  1. Скачайте последнюю версию Navigation SDK с общего хранилища Google Диска и распакуйте её. Если у вас нет доступа, обратитесь к своему представителю.

  2. В Android Studio откройте проект и добавьте пакет сервисов Google Play с помощью SDK Manager .

  3. Из каталога zip-файла скопируйте libs/google_navigation_navmap.aar в каталог app/libs вашего проекта.

  4. Добавьте следующее в 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 to make sure 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, а также рассмотрите возможность настройки параметров оптимизации.

    Необходимые настройки для Navigation SDK

    1. Установите minSdkVersion на 23 или выше.
    2. Установите targetSdkVersion на 30 или выше.
    3. Добавьте параметр dexOptions , который увеличивает javaMaxHeapSize .
    4. Укажите местоположение дополнительных библиотек.
    5. Добавьте repositories и dependencies для Navigation SDK.
    6. Замените номера версий в зависимостях на последние доступные версии.

    Дополнительные настройки для сокращения времени сборки

    • Включите сжатие кода и ресурсов с помощью 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. Make sure 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:

  1. В 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"
        }
    }
  2. Откройте файл 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'
    }
  3. В файле build.gradle.kts или build.gradle на уровне модуля убедитесь, что для targetSdk и compileSdk задано значение 34.
  4. Синхронизируйте свой проект с Gradle .
  5. Откройте файл secrets.properties в каталоге верхнего уровня и добавьте следующий код. Замените YOUR_API_KEY вашим ключом API. Сохраните свой ключ в этом файле, поскольку secrets.properties не подлежит проверке в системе контроля версий.
    MAPS_API_KEY=YOUR_API_KEY
  6. Создайте файл local.defaults.properties в каталоге верхнего уровня, в той же папке, что и файл secrets.properties , а затем добавьте следующий код.

    MAPS_API_KEY=DEFAULT_API_KEY

    Этот файл предназначен для резервного хранения ключа API на случай, если файл secrets.properties не будет найден, чтобы предотвратить сбои сборок. Это может произойти, если вы клонируете приложение из системы контроля версий, в которой отсутствует файл secrets.properties , и вы ещё не создали файл secrets.properties локально для хранения ключа API.

  7. В файле 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}" />

    Примечание: com.google.android.geo.API_KEY — рекомендуемое имя метаданных для ключа API. Ключ с таким именем можно использовать для аутентификации в нескольких API Google Карт на платформе Android, включая Navigation SDK для Android. Для обратной совместимости API также поддерживает имя com.google.android.maps.v2.API_KEY . Это устаревшее имя позволяет выполнять аутентификацию только в Android Maps API v2. Приложение может указать только одно из имён метаданных ключа API. Если указаны оба, API выдаёт исключение.

  8. В Android Studio откройте файл build.gradle.kts или build.gradle на уровне модуля и отредактируйте свойство secrets . Если свойство secrets отсутствует, добавьте его.

    Отредактируйте свойства плагина, чтобы задать для propertiesFileName значение secrets.properties , для defaultPropertiesFileName — значение local.defaults.properties , а также задать любые другие свойства.

    Котлин

    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"
    }
            

    Круто

    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"
    }
            

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

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

Необходимый текст атрибуции и лицензии с открытым исходным кодом можно найти в zip-файле Navigation SDK для Android:

  • NOTICE.txt
  • LICENSES.txt