Konfigurowanie projektu w Android Studio

Na tej stronie dowiesz się, jak zintegrować Navigation SDK z projektem deweloperskim.

Dodawanie pakietu Navigation SDK do projektu

Pakiet Navigation SDK jest dostępny w repozytorium Google Maven. Pakiet SDK możesz dodać do projektu za pomocą konfiguracji Gradle build.gradle lub Maven pom.xml.

  1. Dodaj do konfiguracji Gradle lub Maven poniższą zależność, zastępując symbol zastępczy VERSION_NUMBER żądaną wersją pakietu Navigation SDK na Androida.

    Gradle

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

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

    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>
    
  2. 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 opiera się na pakiecie Maps SDK.

    Gradle

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

    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

    Dodaj do pliku pom.xml te informacje:

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

Konfigurowanie kompilacji

Po utworzeniu projektu możesz skonfigurować ustawienia, aby zapewnić prawidłowe kompilowanie i używanie pakietu Navigation SDK.

Aktualizowanie właściwości lokalnych

  • W folderze Gradle Scripts 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 tymi wytycznymi, aby zaktualizować ustawienia zgodnie z wymaganiami pakietu Navigation SDK. Rozważ też skonfigurowanie opcji optymalizacji.

    Wymagane ustawienia pakietu Navigation SDK

    1. Ustaw wartość minSdkVersion na 24 lub większą.
    2. Ustaw wartość targetSdkVersion na 36 lub większą.
    3. Dodaj ustawienie dexOptions, które zwiększa javaMaxHeapSize.
    4. Ustaw lokalizację dodatkowych bibliotek.
    5. Dodaj symbole repositories i dependencies do pakietu Navigation SDK.
    6. Zastąp numery wersji w zależnościach najnowszymi dostępnymi wersjami.

    Opcjonalne ustawienia skracające czas kompilacji

    • Włącz zmniejszanie kodu i zasobów za pomocą R8/ProGuard, aby usunąć nieużywany kod i zasoby z zależności. Jeśli krok R8/ProGuard trwa zbyt długo, rozważ włączenie multidexu na potrzeby prac programistycznych.
    • Zmniejsz liczbę tłumaczeń na inne języki w kompilacji: podczas tworzenia aplikacji ustaw wartość resConfigs dla jednego języka. W przypadku ostatecznej wersji ustaw resConfigs dla języków, których faktycznie używasz. Domyślnie Gradle zawiera ciągi zasobów dla wszystkich języków obsługiwanych przez pakiet SDK Navigation.

    Dodanie desugaryzacji na potrzeby obsługi Javy 8

    • Jeśli do kompilacji aplikacji używasz wtyczki Androida do obsługi Gradle w wersji 4.0.0 lub nowszej, wtyczka ta rozszerza obsługę wielu interfejsów API języka Java 8. Więcej informacji znajdziesz w artykule Obsługa usuwania składni Java 8. Poniżej znajdziesz przykładowy fragment skryptu kompilacji, który pokazuje, jak używać opcji kompilacji i zależności.
    • Używaj wersji Gradle, wtyczki Androida do obsługi Gradle (AGP) i biblioteki Desugar, które są zgodne z wersją pakietu Navigation SDK. Patrz tabela poniżej.
    • Bibliotekę Desugar należy włączyć w przypadku modułu app i każdego modułu, który jest bezpośrednio zależny od pakietu Navigation SDK.

W tabeli poniżej znajdziesz wersje bibliotek Gradle, AGP i Desugar wymagane w przypadku poszczególnych wersji pakietu Navigation SDK.

Wersja pakietu Navigation SDK Wersja Gradle Wersja AGP Desugar library
8.0.0 lub nowsza 9.1.0 9.0.1 com.android.tools:desugar_jdk_libs_nio:2.1.5
7.7.0–7.9.0 8.13 8.13.2 com.android.tools:desugar_jdk_libs_nio:2.1.5
7.3.0–7.6.0 8.11.1 8.10.0 com.android.tools:desugar_jdk_libs_nio:2.0.3

Poniżej znajdziesz przykład skryptu kompilacji Gradle dla aplikacji. Sprawdź przykładowe aplikacje, aby uzyskać zaktualizowane zestawy zależności, ponieważ używana wersja pakietu Navigation SDK może być nieco nowsza lub starsza niż ta w dokumentacji.

apply plugin: 'com.android.application'

ext {
    navSdk = "__NAVSDK_VERSION__"
}

android {
    compileSdk 33
    buildToolsVersion='28.0.3'

    defaultConfig {
        applicationId "<your id>"
        // Navigation SDK supports SDK 23 and later.
        minSdkVersion 23
        targetSdkVersion 34
        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
    }
}

repositories {
    // Navigation SDK for Android and other libraries are hosted on Google's Maven repository.
    google()
}

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.libraries.navigation:navigation:${navSdk}"

    // Declare other dependencies for your app here.

    annotationProcessor "androidx.annotation:annotation:1.7.0"
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.1.5'
}

Dodawanie klucza interfejsu API do aplikacji

W tej sekcji opisujemy, jak przechowywać klucz interfejsu API, aby aplikacja mogła się do niego bezpiecznie odwoływać. Nie należy umieszczać klucza interfejsu API w systemie kontroli wersji, dlatego zalecamy przechowywanie go w pliku secrets.properties znajdującym się w katalogu głównym projektu. Więcej informacji o pliku secrets.properties znajdziesz w artykule Pliki właściwości Gradle.

Aby uprościć to zadanie, zalecamy użycie wtyczki Secrets Gradle Plugin for Android.

Aby zainstalować wtyczkę Gradle obiektów tajnych dla Androida i przechowywać klucz interfejsu API:

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

    Zakręcony

    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. Otwórz plik build.gradle na poziomie aplikacji i dodaj ten kod do elementu plugins.

    Zakręcony

    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. Jeśli używasz Androida Studio, zsynchronizuj projekt z Gradle.
  4. Otwórz plik local.properties w katalogu na poziomie projektu, a potem dodaj ten kod: Zastąp YOUR_API_KEY swoim kluczem interfejsu API.
    MAPS_API_KEY=YOUR_API_KEY
  5. Klucz interfejsu API możesz dodać do pliku AndroidManifest.xml lub podać go programowo.
    • Dodaj klucz interfejsu API do AndroidManifest.xml:
      <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 Navigation SDK na Androida. Aby zapewnić zgodność wsteczną, interfejs API obsługuje też nazwę com.google.android.maps.v2.API_KEY. Ta starsza nazwa umożliwia uwierzytelnianie tylko w interfejsie API Map Google dla Androida w wersji 2. Aplikacja może określić tylko jedną z nazw metadanych klucza interfejsu API. Jeśli określono oba te parametry, interfejs API zgłasza wyjątek.

    • Programowe podawanie klucza interfejsu API:

      Wtyczka Gradle obiektów tajnych udostępnia klucz w klasie BuildConfig. W inicjalizacji aplikacji (np. w metodzie Application.onCreate()) wywołaj metodę w ten sposób:

      Kotlin

      1. Dodaj te instrukcje importu:
        import com.google.android.libraries.navigation.NavigationApi
      2. Dodaj do metody Application.onCreate() te informacje:
        NavigationApi.setApiKey(BuildConfig.MAPS_API_KEY)

      Java

      1. Dodaj te instrukcje importu:
        import com.google.android.libraries.navigation.NavigationApi;
      2. Dodaj do metody Application.onCreate() te informacje:
        NavigationApi.setApiKey(BuildConfig.MAPS_API_KEY);
      Uwaga: korzystając z funkcji setApiKey(), pamiętaj o tych kwestiach:
      • Podaj klucz interfejsu API, który nie jest pusty ani nie ma wartości null.
      • Wywołuj funkcję setApiKey() tylko raz w okresie istnienia aplikacji. Jeśli metoda zostanie wywołana więcej niż raz, zgłosi wyjątek IllegalStateException.
      • Wywołaj funkcję setApiKey() przed zainicjowaniem innych komponentów pakietu Navigation SDK, np. Navigator.
      • Klucz podany w tej metodzie zastępuje dowolny klucz interfejsu API w AndroidManifest.xml.
      • Używaj pakietu Navigation SDK w wersji 7.6 lub nowszej.

Dodaj w aplikacji wymagane informacje o autorze

Jeśli w aplikacji używasz pakietu Navigation SDK na Androida, musisz umieścić informację o pochodzeniu danych i licencje open source w sekcji informacji prawnych aplikacji.

Wymagana informacja o pochodzeniu danych i licencje open source znajdziesz w pliku ZIP pakietu SDK Navigation na Androida:

  • NOTICE.txt
  • LICENSES.txt

Jeśli jesteś klientem Mobility lub Fleet Engine Deliveries

Jeśli korzystasz z usługi Mobility lub Fleet Engine Deliveries, informacje o rozliczeniach znajdziesz w dokumentacji Mobility. Więcej informacji o rejestrowaniu transakcji znajdziesz w artykułach Konfigurowanie rozliczeń, Rejestrowanie transakcji podlegających rozliczeniu, Raportowanie i Rejestrowanie transakcji podlegających rozliczeniu (Android).

Zależności ręczne (nie Gradle/Maven)

Jeśli Twój system kompilacji nie rozwiązuje zależności przechodnich (np. Bazel) lub jeśli integrujesz plik AAR ręcznie, musisz dodać te zależności do projektu. Gradle i Maven rozwiązują je automatycznie.

  • androidx.datastore:datastore-core
  • androidx.datastore:datastore-guava
  • com.google.guava:listenablefuture
  • androidx.concurrent:concurrent-futures