Configura tu proyecto (versión 4.99 y anteriores)

En esta guía, se enumeran los requisitos de configuración de compilación para usar el SDK de Navigation para Android. En las instrucciones, se supone que tienes instalado un IDE de Android y que estás familiarizado con el desarrollo de Android.

Requisitos mínimos para usar el SDK de Navigation

Estos requisitos se aplican al SDK de Navigation para Android versión 4.99 y anteriores.

Configura tus proyectos: proyecto de la consola de Cloud y proyecto de Android

Antes de compilar o probar una app, debes crear un proyecto de la consola de Cloud y agregar credenciales de clave de API. El proyecto debe tener aprovisionamiento para acceder al SDK de Navigation. Todas las claves dentro del proyecto de la consola de Cloud tienen el mismo acceso al SDK de Navigation. Una clave puede tener más de un proyecto de desarrollo asociado. Si ya tienes un proyecto de la consola, puedes agregar una clave a tu proyecto actual.

Para configurar

  1. En tu navegador web favorito, accede a la consola de Cloud y crea tu proyecto de la consola de Cloud.
  2. En tu IDE, como Android Studio, crea un proyecto de desarrollo de apps para Android y anota el nombre del paquete.
  3. Comunícate con tu representante de Google Maps Platform para proporcionar acceso al SDK de Navigation para tu proyecto de la consola de Cloud.
  4. Mientras estás en el panel de la consola de Cloud en tu navegador web, crea credenciales para generar una clave de API con restricciones.
  5. En la página de la clave de API, haz clic en Apps para Android en el área Restricciones de la aplicación.
  6. Haz clic en Agregar el nombre del paquete y la huella digital y, luego, ingresa el nombre del paquete de tu proyecto de desarrollo y la huella digital SHA-1 de esa clave.
  7. Haz clic en Guardar.

Agrega el SDK de Navigation a tu proyecto

El SDK de Navigation está disponible con Maven o como un paquete AAR. Después de crear tu proyecto de desarrollo, puedes integrar el SDK en él con uno de los siguientes enfoques.

Usa Maven para el SDK de Navigation v4.5 y versiones posteriores (recomendado)

A continuación, se usa el repositorio de Maven google(), que es la forma más sencilla y recomendada de agregar el SDK de Navigation a tu proyecto.

  1. Agrega la siguiente dependencia a tu configuración de Gradle o Maven, y reemplaza el marcador de posición VERSION_NUMBER por la versión del SDK de Navigation para Android.

    Gradle

    Agrega lo siguiente a tu build.gradle a nivel del módulo:

    dependencies {
    ...
    implementation 'com.google.android.libraries.navigation:navigation:VERSION_NUMBER'
    }
    

    Si realizas una actualización desde el repositorio de Maven original, ten en cuenta que los nombres de grupo y artefacto cambiaron, y que el complemento com.google.cloud.artifactregistry.gradle-plugin ya no es necesario.

    Agrega lo siguiente a tu build.gradle de nivel superior:

    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

    Agrega lo siguiente a tu pom.xml:

    <dependencies>
    ...
    <dependency>
         <groupId>com.google.android.libraries.navigation</groupId>
         <artifactId>navigation</artifactId>
         <version>VERSION_NUMBER</version>
    </dependency>
    </dependencies>
    

    Si tienes dependencias que usan el SDK de Maps, debes excluir la dependencia en cada dependencia declarada que se base en el SDK de Maps.

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

Usa Maven para el SDK de Navigation anterior a la versión 4.5 o con el SDK de Driver

El SDK de Navigation sigue estando disponible con el repositorio de Maven original durante el resto de las versiones 4. Esta es la misma biblioteca con todas las actualizaciones que la versión anterior y proporciona compatibilidad con el SDK de Driver y otras bibliotecas durante la transición. El uso de esta dependencia requiere acceder a tu proyecto de la nube con gcloud durante la compilación.

  1. Configura tu entorno para acceder al repositorio de Maven de Google como se describe en la sección Requisitos previos de la documentación del SDK de Consumer. El acceso al SDK de Navigation se controla a través de un grupo de espacios de trabajo.
  2. Agrega la siguiente dependencia a tu configuración de Gradle o Maven, y reemplaza el marcador de posición VERSION_NUMBER por la versión del SDK de Navigation.

    Gradle

    Agrega lo siguiente a tu build.gradle a nivel del módulo:

    dependencies {
    ...
    implementation 'com.google.android.maps:navsdk:VERSION_NUMBER'
    }
    

    Agrega lo siguiente a tu build.gradle de nivel superior:

    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

    Agrega lo siguiente a tu pom.xml:

    <dependencies>
    ...
    <dependency>
         <groupId>com.google.android.maps</groupId>
         <artifactId>navsdk</artifactId>
         <version>VERSION_NUMBER</version>
    </dependency>
    </dependencies>
    

    Si tienes dependencias que usan el SDK de Maps, debes excluir la dependencia en cada dependencia declarada que se base en el SDK de Maps.

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

Usa un paquete AAR descargado (no recomendado)

El SDK de Navigation también está disponible como un paquete AAR. Después de crear el proyecto de desarrollo, puedes integrar el SDK. En estas instrucciones, se supone que usas Android Studio para tu IDE.

  1. Descarga la versión más reciente del SDK de Navigation desde la unidad compartida de Google Drive y extráela. Si no tienes acceso, comunícate con tu representante.

  2. En Android Studio, abre un proyecto y agrega el paquete de Servicios de Google Play con el SDK Manager.

  3. Desde el directorio del archivo zip, copia libs/google_navigation_navmap.aar al directorio app/libs de tu proyecto.

  4. Agrega lo siguiente a tu build.gradle a nivel del módulo:

    implementation(name: 'google_navigation_navmap', ext: 'aar')
    

    Agrega lo siguiente a tu build.gradle de nivel superior:

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

Configura la compilación

Después de crear el proyecto, puedes configurar los parámetros para una compilación exitosa y el uso del SDK de Navigation.

Actualiza las propiedades locales

  • En la carpeta Gradle Scripts, abre el archivo local.properties y agrega android.useDeprecatedNdk=true.

Actualiza la secuencia de comandos de compilación de Gradle

  • Abre el archivo build.gradle (Module:app) y usa los siguientes lineamientos para actualizar la configuración de modo que cumpla con los requisitos del SDK de Navigation y considera establecer también las opciones de optimización.

    Configuración obligatoria para el SDK de Navigation

    1. Establece minSdkVersion en 23 o superior.
    2. Establece targetSdkVersion en 30 o superior.
    3. Agrega un parámetro dexOptions que aumente el javaMaxHeapSize.
    4. Establece la ubicación de las bibliotecas adicionales.
    5. Agrega los elementos repositories y dependencies para el SDK de Navigation.
    6. Reemplaza los números de versión en las dependencias por las versiones más recientes disponibles.

    Configuración opcional para disminuir el tiempo de compilación

    • Habilita la reducción de código y la reducción de recursos con R8/ProGuard para quitar el código y los recursos sin usar de las dependencias. Si el paso R8/ProGuard tarda demasiado en ejecutarse, considera habilitar multidex para el trabajo de desarrollo.
    • Reduce la cantidad de traducciones de idiomas incluidas en la compilación: Establece resConfigs para un idioma durante el desarrollo. Para la compilación final, establece resConfigs para los idiomas que usas. De forma predeterminada, Gradle incluye cadenas de recursos para todos los idiomas compatibles con el SDK de Navigation.

A continuación, se muestra un ejemplo de la secuencia de comandos de compilación de Gradle para la aplicación. Consulta las apps de ejemplo para obtener conjuntos actualizados de dependencias, ya que la versión del SDK de Navigation que usas puede estar ligeramente por delante o por detrás de esta documentación.

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

Agrega la clave de API a tu app

En esta sección, se describe cómo almacenar tu clave de API para que tu app pueda hacer referencia a ella de manera más segura. No debes incluir la clave de API en el sistema de control de versión, por lo que te recomendamos almacenarla en el archivo secrets.properties, que se encuentra en el directorio raíz de tu proyecto. Para obtener más información sobre el archivo secrets.properties, consulta los archivos de propiedades de Gradle.

Para optimizar esta tarea, te recomendamos que uses el complemento Secrets Gradle para Android.

Para instalar el complemento Secrets Gradle para Android y almacenar tu clave de API, haz lo siguiente:

  1. En Android Studio, abre el archivo build.gradle de nivel raíz y agrega el siguiente código al elemento dependencies en buildscript.

    Groovy

    buildscript {
        dependencies {
            // ...
            classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1"
        }
    }

    Kotlin

    buildscript {
        dependencies {
            // ...
            classpath("com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1")
        }
    }
  2. Abre el archivo build.gradle a nivel de tu app y agrega el siguiente código al elemento plugins.

    Groovy

    plugins {
        id 'com.android.application'
        // ...
        id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
    }

    Kotlin

    plugins {
        id("com.android.application")
        // ...
        id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
    }
  3. Si usas Android Studio, sincroniza tu proyecto con Gradle.
  4. Abre el archivo local.properties en el directorio de nivel de proyecto y, luego, agrega el siguiente código. Reemplaza YOUR_API_KEY por tu clave de API.
    MAPS_API_KEY=YOUR_API_KEY
  5. Puedes agregar la clave de API a tu archivo AndroidManifest.xml o proporcionarla de forma programática.
    • Agrega tu clave de API a AndroidManifest.xml:
      <meta-data
          android:name="com.google.android.geo.API_KEY"
          android:value="${MAPS_API_KEY}" />
              

      Nota: com.google.android.geo.API_KEY es el nombre de metadatos recomendado para la clave de API. Se puede utilizar una clave con este nombre para autenticar varias APIs basadas en Google Maps en la plataforma de Android, incluido el SDK de Navigation para Android. Respecto de la retrocompatibilidad, la API también admite el nombre com.google.android.maps.v2.API_KEY. Este nombre heredado solo permite la autenticación con la versión 2 de la API de Google Maps para Android. Una aplicación puede especificar solo uno de los nombres de metadatos de la clave de API. Si se especifican ambos, la API arrojará una excepción.

    • Proporciona la clave de API de forma programática:

      El complemento Secrets Gradle hace que la clave esté disponible en la clase BuildConfig. En la inicialización de tu app (por ejemplo, en el método Application.onCreate()), llama al método de la siguiente manera:

      Kotlin

      1. Agrega las siguientes instrucciones de importación:
        import com.google.android.libraries.navigation.NavigationApi
      2. Agrega lo siguiente a tu método Application.onCreate():
        NavigationApi.setApiKey(BuildConfig.MAPS_API_KEY)

      Java

      1. Agrega las siguientes instrucciones de importación:
        import com.google.android.libraries.navigation.NavigationApi;
      2. Agrega lo siguiente a tu método Application.onCreate():
        NavigationApi.setApiKey(BuildConfig.MAPS_API_KEY);
      Nota: Cuando uses setApiKey(), ten en cuenta lo siguiente:
      • Proporciona una clave de API no nula y no vacía.
      • Llama a setApiKey() solo una vez durante la vida útil de tu aplicación. El método arroja una IllegalStateException si se llama más de una vez.
      • Llama a setApiKey() antes de inicializar cualquier otro componente del SDK de Navigation, como Navigator.
      • La clave que proporcionas con este método anula cualquier clave de API en tu AndroidManifest.xml.
      • Usa el SDK de Navigation versión 7.6 o posterior.

Incluye las atribuciones obligatorias en tu app

Si usas el SDK de Navigation para Android en tu app, debes incluir el texto de atribución y las licencias de código abierto como parte de la sección de avisos legales de tu app.

Puedes encontrar el texto de atribución obligatorio y las licencias de código abierto en el archivo zip del SDK de Navigation para Android:

  • NOTICE.txt
  • LICENSES.txt