Настройте свой проект

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

В инструкциях предполагается, что у вас установлена ​​Android IDE и вы знакомы с разработкой Android.

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

Эти требования применяются к Navigation SDK для Android версии 5.0.0 и более поздних версий.

  • Проект Google Cloud Console с включенным навигационным SDK. По вопросам подготовки обратитесь к представителю платформы Google Maps.

  • Ваше приложение должно быть ориентировано на уровень API 33 или выше.

  • Чтобы запустить приложение, созданное с помощью Navigation SDK, на устройстве Android должны быть установлены и включены службы Google Play .

  • В приложение необходимо добавить сведения об авторстве и текст лицензирования .

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

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

Установить

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

Добавьте навигационный SDK в свой проект

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

Ниже используется репозиторий google() Maven, который является самым простым и рекомендуемым способом добавления навигационного 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 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 при компиляции.

  1. Настройте свою среду для доступа к репозиторию Google Maven, как описано в разделе «Предварительные требования» документации 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. 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>
    

Настройка сборки

После создания проекта вы можете настроить параметры для успешной сборки и использования Navigation SDK.

Обновить локальные свойства

  • В папке Gradle Scripts откройте файл local.properties и добавьте android.useDeprecatedNdk=true .

Обновите скрипт сборки Gradle

  • Откройте файл build.gradle (Module:app) и используйте следующие рекомендации, чтобы обновить настройки в соответствии с требованиями Navigation SDK, а также рассмотрите возможность настройки параметров оптимизации.

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

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

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

    • Включите сжатие кода и ресурсов с помощью R8/ProGuard, чтобы удалить неиспользуемый код и ресурсы из зависимостей. Если выполнение шага R8/ProGuard занимает слишком много времени, рассмотрите возможность включения multidex для разработки.
    • Уменьшите количество языковых переводов, включенных в сборку: установите resConfigs для одного языка во время разработки. Для окончательной сборки установите resConfigs для языков, которые вы фактически используете. По умолчанию Gradle включает строки ресурсов для всех языков, поддерживаемых Navigation SDK.

    Добавить обессахаривание для поддержки Java8.

    • Если вы создаете свое приложение с помощью подключаемого модуля Android Gradle 4.0.0 или более поздней версии, этот подключаемый модуль расширяет поддержку использования ряда API-интерфейсов языка Java 8. Дополнительную информацию см. в разделе Поддержка очистки от сахара в Java 8 . См. приведенный ниже пример фрагмента сценария сборки, чтобы узнать, как компилировать и использовать параметры зависимостей.

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

apply plugin: 'com.android.application'
apply plugin: 'com.google.cloud.artifactregistry.gradle-plugin'

ext {
    androidxLifecycleVersion = "2.4.1"
    glideVersion = "4.13.2"
    navSdk = "__NAVSDK_VERSION__"
}

android {
    compileSdk 33
    buildToolsVersion='28.0.3'

    defaultConfig {
        applicationId "<your id>"
        // Navigation SDK supports SDK 23 and later.
        minSdk 23
        targetSdk 33
        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 {
        // Flag to enable support for the new language APIs
        coreLibraryDesugaringEnabled true
        // Sets Java compatibility to Java 8
        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.
    // Note: remember to exclude Google play service Maps SDK from your transitive
    // dependencies to avoid duplicate copies of the Google Maps SDK.
    api "com.google.android.maps:navsdk:${navSdk}"

    // Add: android.useDeprecatedNdk=true
    // to local.properties.
    api "org.chromium.net:cronet-fallback:76.3809.111"
    // Optional for Cronet users:
    // api "org.chromium.net:cronet-api:69.3497.100"

    // Add LeakCanary to debugImplementation because LeakCanary should only run
    // in debug builds.
    debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.10'

    // And dependencies.
    api "androidx.appcompat:appcompat:1.6.1"
    api "androidx.cardview:cardview:1.0.0"
    api "androidx.constraintlayout:constraintlayout:2.0.4"
    api "androidx.legacy:legacy-support-v4:1.0.0"
    api "androidx.lifecycle:lifecycle-common-java8:${androidxLifecycleVersion}"
    api "androidx.lifecycle:lifecycle-process:${androidxLifecycleVersion}"
    api "androidx.mediarouter:mediarouter:1.3.0"
    api "androidx.preference:preference:1.1.1"
    api "androidx.recyclerview:recyclerview:1.2.1"
    api "androidx.tracing:tracing:1.0.0"
    api "com.github.bumptech.glide:glide:${glideVersion}"
    api "com.google.android.datatransport:transport-api:3.0.0"
    api "com.google.android.datatransport:transport-backend-cct:3.1.4"
    api "com.google.android.datatransport:transport-runtime:3.1.4"
    api "joda-time:joda-time:2.10.14"
    // Also include the Google Places SDK, which is used by this example, but
    // isn't required by the Navigation SDK.
    api "com.google.android.libraries.places:places:2.5.0"
    api "com.google.android.material:material:1.5.0"
    api 'org.jetbrains.kotlin:kotlin-reflect:1.6.21'
    api 'org.jetbrains.kotlin:kotlin-stdlib:1.6.21'
    api 'com.google.guava:guava:31.0.1-android'

    annotationProcessor "androidx.annotation:annotation:1.2.0"
    annotationProcessor "com.github.bumptech.glide:compiler:${glideVersion}"
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.9'
}

Добавьте ключ API в свое приложение

В этом разделе описывается, как хранить ключ API, чтобы ваше приложение могло безопасно ссылаться на него. Вам не следует проверять свой ключ API в системе контроля версий, поэтому мы рекомендуем хранить его в файле local.properties , который находится в корневом каталоге вашего проекта. Дополнительные сведения о файле local.properties см. в разделе Файлы свойств Gradle .

Чтобы упростить эту задачу, мы рекомендуем вам использовать плагин Secrets Gradle для Android . Чтобы установить плагин и сохранить ключ API:

  1. В Android Studio откройте файл build.gradle уровня проекта и добавьте следующий код в элемент dependencies в buildscript .
    plugins {
        // ...
        id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' version '2.0.1' apply false
    }
  2. Затем откройте файл build.gradle уровня модуля и добавьте следующий код в элемент plugins .
    id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
        
  3. Сохраните файл и синхронизируйте проект с Gradle .
  4. Откройте local.properties в каталоге уровня вашего проекта, а затем добавьте следующий код. Замените YOUR_API_KEY своим ключом API.
    MAPS_API_KEY=YOUR_API_KEY
        
  5. Сохраните файл.
  6. В файле AndroidManifest.xml перейдите по адресу com.google.android.geo.API_KEY и обновите android:value attribute следующим образом:
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="${MAPS_API_KEY}" />
        

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

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

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

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

  • NOTICE.txt
  • LICENSES.txt

Если вы являетесь клиентом компании Mobility или Fleet Engine Deliverys

Если вы являетесь клиентом Mobility или Fleet Engine Delivery, узнайте о выставлении счетов в документации Mobility. Дополнительные сведения о записи транзакций см. в разделах Настройка выставления счетов , Запись оплачиваемых транзакций , Отчетность и Запись оплачиваемых транзакций (Android) .