Konfigurowanie projektu – wersja 4.99 lub wcześniejsze

Z tego przewodnika dowiesz się, jakie wymagania dotyczące konfiguracji kompilacji musisz spełnić, aby korzystać z Navigation SDK na Androida. W tych instrukcjach przyjęliśmy, że masz zainstalowane środowisko IDE na Androida i znasz się na programowaniu na Androida.

Minimalne wymagania dotyczące korzystania z pakietu SDK nawigacji

Te wymagania dotyczą pakietu SDK nawigacji na Androida w wersji 4.99 lub starszej.

  • projekt w konsoli Google Cloud z włączonym pakietem SDK Nawigacji; Aby uzyskać pomoc, skontaktuj się z przedstawicielem Google Maps Platform.

  • Aplikacja musi być kierowana na interfejs API na poziomie 30 lub wyższym.

  • Aby uruchomić aplikację stworzoną przy użyciu pakietu Navigation SDK, na urządzeniu z Androidem muszą być zainstalowane i włączone Usługi Google Play.

  • Do aplikacji trzeba dodać informacje o atrybucji i licencjach.

Konfigurowanie projektów: projekt Cloud Console i projekt Androida

Zanim skompilujesz lub przetestujesz aplikację, musisz utworzyć projekt w konsoli Cloud i dodać dane logowania klucza interfejsu API. Projekt musi mieć skonfigurowany dostęp do pakietu SDK nawigacji. Wszystkie klucze w projekcie konsoli Cloud mają taki sam dostęp do pakietu SDK nawigacji. Z kluczem może być powiązany więcej niż 1 projekt programisty. Jeśli masz już projekt w konsoli, możesz dodać do niego klucz.

Konfigurowanie

  1. W ulubionej przeglądarce zaloguj się w konsoli Cloud i utwórz projekt w konsoli Cloud.
  2. środowisku IDE, takim jak Android Studio, utwórz projekt tworzenia aplikacji na Androida i zapisz nazwę pakietu.
  3. Skontaktuj się z przedstawicielem Google Maps Platform, aby uzyskać dostęp do pakietu SDK nawigacji w przypadku projektu Cloud Console.
  4. panelu Cloud Console w przeglądarce utwórz dane logowania, aby wygenerować klucz interfejsu API z ograniczeniami.
  5. Na stronie klucza interfejsu API w obszarze Ograniczenia aplikacji kliknij Aplikacje na Androida.
  6. Kliknij Dodaj nazwę pakietu i odcisk cyfrowy, a następnie wpisz nazwę pakietu projektu programistycznego i odcisk cyfrowy SHA-1 dla tego klucza.
  7. Kliknij Zapisz.

Dodawanie do projektu pakietu SDK nawigacji

Pakiet SDK Nawigacji jest dostępny w Maven lub jako pakiet AAR. Po utworzeniu projektu programistycznego możesz zintegrować z nim pakiet SDK, korzystając z jednej z poniższych metod.

Poniższe polecenie korzysta z repozytorium Maven google(), które jest najprostszym i zalecanym sposobem dodania pakietu SDK nawigacji do projektu

  1. Dodaj do konfiguracji Gradle lub Maven następującą zależność, zastępując miejsce zapełnienia VERSION_NUMBER żądaną wersją pakietu SDK nawigacji na Androida.

    Gradle

    Dodaj do build.gradle na poziomie modułu te elementy:

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

    Jeśli przechodzisz na nową wersję z pierwotnego repozytorium Maven, pamiętaj, że nazwy grup i elementów uległy zmianie, a wtyczka com.google.cloud.artifactregistry.gradle-plugin nie jest już potrzebna.

    Do build.gradle najwyższego poziomu dodaj te elementy:

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

    Maven

    Dodaj do pliku pom.xml te informacje:

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

    Jeśli masz zależności, które korzystają z pakietu Maps SDK, musisz wykluczyć zależność w każdej zadeklarowanej zależności, która korzysta z pakietu 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>
    

Korzystanie z Maven w przypadku pakietu SDK Nawigacji w wersji wcześniejszej niż 4.5 lub z pakietem SDK Kierowcy

Pakiet SDK nawigacji jest nadal dostępny w pierwotnym repozytorium Maven w pozostałych wersjach w ramach pakietu SDK w wersji 4. To ta sama biblioteka ze wszystkimi aktualizacjami z powyżej, która zapewnia zgodność z Driver SDK i innymi bibliotekami podczas przejścia. Aby korzystać z tej zależności, podczas kompilacji musisz zalogować się do projektu w chmurze za pomocą interfejsu gcloud.

  1. Skonfiguruj środowisko, aby uzyskać dostęp do repozytorium Maven Google zgodnie z opisem w sekcji Wstępne wymagania w dokumentacji pakietu Consumer SDK. Dostęp do pakietu SDK nawigacji jest kontrolowany przez grupę Workspace.
  2. Dodaj tę zależność do konfiguracji Gradle lub Maven, zastępując miejsce zapełnienia VERSION_NUMBER żądaną wersją pakietu SDK Nawigacji.

    Gradle

    Dodaj do build.gradle na poziomie modułu te elementy:

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

    Do build.gradle najwyższego poziomu dodaj te elementy:

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

    Maven

    Dodaj do pliku pom.xml te informacje:

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

    Jeśli masz zależności, które korzystają z pakietu Maps SDK, musisz wykluczyć zależność w każdej zadeklarowanej zależności, która korzysta z pakietu 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>
    

Pakiet Navigation SDK jest również dostępny jako pakiet AAR. Po utworzeniu projektu programistycznego możesz zintegrować pakiet SDK. Te instrukcje dotyczą używania Android Studio w IDE.

  1. Pobierz najnowszą wersję pakietu Navigation SDK z udostępnionego Dysku Google i rozpakuj ją. Jeśli nie masz do niej dostępu, skontaktuj się z przedstawicielem.

  2. Android Studio otwórz projekt i dodaj pakiet Usługi Google Play za pomocą Menedzera pakietu SDK.

  3. Z katalogu pliku zip skopiuj folder libs/google_navigation_navmap.aar do katalogu app/libs projektu.

  4. Dodaj do build.gradle na poziomie modułu te elementy:

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

    Dodaj te informacje do pliku build.gradle najwyższego poziomu:

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

Konfigurowanie kompilacji

Po utworzeniu projektu możesz skonfigurować ustawienia pod kątem udanej kompilacji i użycia pakietu Navigation SDK.

Aktualizowanie właściwości lokalnych

  • folderze skryptów Gradle otwórz plik local.properties i dodaj android.useDeprecatedNdk=true.

Aktualizowanie skryptu kompilacji Gradle

  • Otwórz plik build.gradle (Module:app) i postępuj zgodnie z poniższymi wskazówkami, aby zaktualizować ustawienia tak, aby spełniały wymagania pakietu Navigation SDK, i zastanów się nad ustawieniem opcji optymalizacji.

    Wymagane ustawienia pakietu Navigation SDK

    1. Ustaw wartość minSdkVersion na 23 lub więcej.
    2. Ustaw targetSdkVersion na 30 lub więcej.
    3. Dodaj ustawienie dexOptions, które zwiększa javaMaxHeapSize.
    4. Ustaw lokalizację dodatkowych bibliotek.
    5. Dodaj repositoriesdependencies dla pakietu SDK Nawigacji.
    6. Zastąp numery wersji w zależnościach najnowszymi dostępnymi wersjami.

    Opcjonalne ustawienia skracające czas kompilacji

    • Włącz ograniczanie kodu i ograniczanie zasobów przy użyciu R8/ProGuard, aby usunąć z zależności nieużywany kod i zasoby. Jeśli wykonanie kroku R8/ProGuard trwa zbyt długo, rozważ włączenie multidex na potrzeby prac programistycznych.
    • Zmniejsz liczbę tłumaczeń językowych uwzględnionych w kompilacji: podczas tworzenia ustaw opcję resConfigs dla jednego języka. W przypadku ostatecznej wersji ustaw resConfigs dla języków, których używasz. Domyślnie Gradle zawiera ciągi znaków zasobu we wszystkich językach obsługiwanych przez pakiet SDK nawigacji.

Poniżej znajduje się przykład skryptu kompilacji Gradle dla aplikacji. Sprawdź w przykładowych aplikacjach, czy dostępne są zaktualizowane zestawy zależności, ponieważ wersja pakietu Navigation SDK, której używasz, może być nieco późniejsza lub późniejsza niż ta dokumentacją.

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

Dodawanie klucza interfejsu API do aplikacji

W tej sekcji opisujemy, jak zapisać klucz interfejsu API, aby aplikacja mogła się do niego bezpiecznie odwoływać. Nie należy sprawdzać klucza interfejsu API w systemie kontroli wersji, więc zalecamy zapisanie go w pliku secrets.properties, który znajduje się w katalogu głównym projektu. Więcej informacji o pliku secrets.properties znajdziesz w artykule o plikach właściwości Gradle.

Aby usprawnić to zadanie, zalecamy użycie wtyczki Gradle obiektów tajnych na Androida.

Aby zainstalować wtyczkę Gradle obiektów tajnych na Androida w projekcie Map Google:

  1. W Android Studio otwórz plik build.gradle.kts lub build.gradle najwyższego poziomu i dodaj poniższy kod do elementu dependencies w sekcji buildscript.

    Kotlin

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

    Zakręcony

    buildscript {
        dependencies {
            classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1"
        }
    }
  2. Otwórz plik build.gradle.kts lub build.gradle na poziomie modułu i dodaj do elementu plugins ten kod:

    Kotlin

    plugins {
        // ...
        id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
    }

    Zakręcony

    plugins {
        // ...
        id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
    }
  3. W pliku build.gradle.kts lub build.gradle na poziomie modułu sprawdź, czy targetSdk i compileSdk mają wartość 34.
  4. Zapisz plik i zsynchronizuj projekt z Gradle.
  5. Otwórz plik secrets.properties w katalogu najwyższego poziomu, a potem dodaj ten kod. Zastąp YOUR_API_KEY swoim kluczem API. Przechowuj klucz w tym pliku, ponieważ secrets.properties nie jest uwzględniany w systemie kontroli wersji.
    NAV_API_KEY=YOUR_API_KEY
  6. Zapisz plik.
  7. Utwórz plik local.defaults.properties w katalogu najwyższego poziomu, w tym samym folderze co plik secrets.properties, a potem dodaj podany niżej kod.

    NAV_API_KEY=DEFAULT_API_KEY

    Ten plik zawiera kopię zapasową klucza interfejsu API na wypadek, gdyby plik secrets.properties nie został znaleziony. Pozwala to uniknąć błędu kompilacji. Może się tak zdarzyć, jeśli skopiujesz aplikację z systemu kontroli wersji, który pomija plik secrets.properties, a na komputerze lokalnym nie masz jeszcze utworzonego pliku secrets.properties, aby podać klucz interfejsu API.

  8. Zapisz plik.
  9. W pliku AndroidManifest.xml przejdź do sekcji com.google.android.geo.API_KEY i zaktualizuj android:value attribute. Jeśli tag <meta-data> nie istnieje, utwórz go jako element podrzędny tagu <application>.
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="${MAPS_API_KEY}" />

    Uwaga: com.google.android.geo.API_KEY to zalecana nazwa metadanych klucza interfejsu API. Klucz o tej nazwie może służyć do uwierzytelniania w wielu interfejsach API opartych na Mapach Google na platformie Android, w tym w pakiecie SDK Navigation SDK na Androida. Aby zapewnić zgodność wsteczną, interfejs API obsługuje też nazwę com.google.android.maps.v2.API_KEY. Ten starszy identyfikator umożliwia uwierzytelnianie tylko w ramach interfejsu Mapy Google na Androida w wersji 2. Aplikacja może podać tylko jedną z nazwy metadanych klucza interfejsu API. Jeśli podasz oba te elementy, API zgłosi wyjątek.

  10. W Android Studio otwórz plik build.gradle.kts lub build.gradle na poziomie modułu i edytuj właściwość secrets. Jeśli właściwość secrets nie istnieje, dodaj ją.

    Zmień właściwości wtyczki, aby ustawić propertiesFileName na secrets.properties, defaultPropertiesFileName na local.defaults.properties i wszystkie inne właściwości.

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

    Zakręcony

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

Dodaj wymagane informacje o przypisaniu w aplikacji

Jeśli w swojej aplikacji używasz pakietu Navigation SDK na Androida, w sekcji Informacje prawne musisz uwzględnić tekst atrybucji i licencje open source.

Wymagany tekst atrybucji i licencji open source znajdziesz w pliku ZIP pakietu SDK nawigacji na Androida:

  • NOTICE.txt
  • LICENSES.txt