Konfigurowanie projektu – wersja 4.99 lub wcześniejsze

W tym przewodniku znajdziesz wymagania dotyczące konfiguracji kompilacji w przypadku korzystania z pakietu Navigation SDK na Androida. W instrukcjach założono, że masz zainstalowane środowisko IDE na Androida i znasz podstawy programowania na Androida.

Minimalne wymagania dotyczące korzystania z pakietu Navigation SDK

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

  • Konsola Google Cloud

    projekt z włączonym pakietem Navigation SDK. Aby uzyskać dostęp, skontaktuj się z przedstawicielem Google Maps Platform.

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

  • Aby uruchomić aplikację utworzoną za pomocą pakietu Navigation SDK, na urządzeniu z Androidem muszą być zainstalowane i włączone Usługi Google Play.

  • Informacje o autorze i tekst licencji należy dodać do aplikacji.

Konfigurowanie projektów: projekt w konsoli Cloud i projekt aplikacji na Androida

Zanim zaczniesz tworzyć lub testować aplikację, musisz utworzyć projekt w konsoli Cloud i dodać dane logowania klucza interfejsu API. Projekt musi mieć dostęp do pakietu Navigation SDK. Wszystkie klucze w projekcie w konsoli Cloud mają taki sam dostęp do pakietu Navigation SDK. Klucz może być powiązany z więcej niż 1 projektem deweloperskim. Jeśli masz już projekt w konsoli, możesz dodać do niego klucz.

Aby skonfigurować:

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

Dodawanie pakietu Navigation SDK do projektu

Pakiet Navigation SDK jest dostępny w Maven lub jako pakiet AAR bundle. Po utworzeniu projektu deweloperskiego możesz zintegrować z nim pakiet SDK, korzystając z jednej z tych metod.

Używanie Maven w przypadku pakietu Navigation SDK w wersji 4.5 lub nowszej (zalecane)

Poniższy przykład używa repozytorium Maven google(), które jest najprostszym i zalecanym sposobem dodania pakietu Navigation SDK do projektu.

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

    Gradle

    Dodaj ten kod do pliku build.gradle na poziomie modułu:

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

    Jeśli uaktualniasz z oryginalnego repozytorium Maven, pamiętaj, że nazwy grupy i artefaktu uległy zmianie, a wtyczka com.google.cloud.artifactregistry.gradle-plugin nie jest już potrzebna.

    Dodaj ten kod do pliku build.gradle na najwyższym poziomie:

    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

    Dodaj ten kod do pliku pom.xml:

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

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

Używanie Maven w przypadku pakietu Navigation SDK w wersji starszej niż 4.5 lub z pakietem Driver SDK

Pakiet Navigation SDK jest nadal dostępny w oryginalnym repozytorium Maven w pozostałych wersjach 4. Jest to ta sama biblioteka z tymi samymi aktualizacjami co wersja powyżej. Zapewnia też zgodność z pakietem Driver SDK i innymi bibliotekami podczas przejścia. Użycie tej zależności wymaga zalogowania się w projekcie w chmurze za pomocą gcloud podczas kompilacji.

  1. Skonfiguruj środowisko, aby uzyskać dostęp do repozytorium Maven Google, zgodnie z opisem w sekcji Wymagania wstępne w dokumentacji pakietu Consumer SDK. Dostęp do pakietu Navigation SDK jest kontrolowany przez grupę w Workspace.
  2. Dodaj tę zależność do konfiguracji Gradle lub Maven, zastępując symbol zastępczy VERSION_NUMBER wersją pakietu Navigation SDK.

    Gradle

    Dodaj ten kod do pliku build.gradle na poziomie modułu:

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

    Dodaj ten kod do pliku build.gradle na najwyższym poziomie:

    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 ten kod do pliku pom.xml:

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

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

Używanie pobranego pakietu AAR (niezalecane)

Pakiet Navigation SDK jest też dostępny jako pakiet AAR bundle. Po utworzeniu projektu deweloperskiego możesz zintegrować pakiet SDK. W tych instrukcjach założono, że używasz Android Studio jako środowiska IDE.

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

  2. W Android Studio otwórz projekt i dodaj pakiet usługi Google Play za pomocą SDK Manager.

  3. Skopiuj plik libs/google_navigation_navmap.aar z katalogu pliku ZIP do katalogu app/libs projektu.

  4. Dodaj ten kod do pliku build.gradle na poziomie modułu:

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

    Dodaj ten kod do pliku build.gradle na najwyższym poziomie:

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

Konfigurowanie kompilacji

Po utworzeniu projektu możesz skonfigurować ustawienia, aby kompilacja przebiegła pomyślnie i można było używać 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 wskazówkami, aby zaktualizować ustawienia zgodnie z wymaganiami pakietu Navigation SDK. Rozważ też ustawienie opcji optymalizacji.

    Ustawienia wymagane w przypadku pakietu Navigation SDK

    1. Ustaw minSdkVersion na 23 lub wyższy.
    2. Ustaw targetSdkVersion na 30 lub wyższy.
    3. Dodaj ustawienie dexOptions, które zwiększa javaMaxHeapSize.
    4. Ustaw lokalizację dodatkowych bibliotek.
    5. Dodaj repositories i dependencies dla pakietu Navigation SDK.
    6. Zastąp numery wersji w zależnościach najnowszymi dostępnymi wersjami.

    Ustawienia opcjonalne, które skracają 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 wykonanie kroku R8/ProGuard trwa zbyt długo, rozważ włączenie multidexu na potrzeby prac deweloperskich.
    • Zmniejsz liczbę tłumaczeń językowych uwzględnionych w kompilacji: podczas programowania ustaw resConfigs dla 1 języka. W przypadku kompilacji końcowej 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 Navigation SDK.

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

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

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 dodawać klucza interfejsu API do systemu kontroli wersji, dlatego zalecamy przechowywanie go w pliku secrets.properties, który znajduje się w katalogu głównym projektu. Więcej informacji o pliku secrets.properties znajdziesz w Pliki właściwości Gradle.

Aby uprościć to zadanie, zalecamy używanie wtyczki Gradle obiektów tajnych na Androida .

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

  1. W Android Studio otwórz plik build.gradle na poziomie głównym i dodaj ten kod do elementu dependencies w sekcji 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. Otwórz plik build.gradle na poziomie aplikacji i dodaj ten kod do elementu 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. Jeśli używasz Android Studio, zsynchronizuj projekt z Gradle.
  4. Otwórz plik local.properties w katalogu na poziomie projektu, a następnie dodaj ten kod. Zastąp YOUR_API_KEY swoim kluczem interfejsu API.
    MAPS_API_KEY=YOUR_API_KEY
  5. Możesz dodać klucz interfejsu API do pliku AndroidManifest.xml lub podać go programowo.
    • Dodaj klucz interfejsu API do pliku 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 zachować 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 na Androida w wersji 2. Aplikacja może określać tylko jedną z nazw metadanych klucza interfejsu API. Jeśli określono obie nazwy, interfejs API zgłasza wyjątek.

    • Podaj klucz interfejsu API programowo:

      Wtyczka Gradle obiektów tajnych udostępnia klucz w klasie BuildConfig. Podczas inicjowania 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 ten kod do metody Application.onCreate():
        NavigationApi.setApiKey(BuildConfig.MAPS_API_KEY)

      Java

      1. Dodaj te instrukcje importu:
        import com.google.android.libraries.navigation.NavigationApi;
      2. Dodaj ten kod do metody Application.onCreate():
        NavigationApi.setApiKey(BuildConfig.MAPS_API_KEY);
      Uwaga: podczas korzystania z setApiKey() pamiętaj o tych kwestiach:
      • Podaj klucz interfejsu API, który nie jest pusty ani nie zawiera wartości null.
      • Wywołaj setApiKey() tylko raz w całym cyklu życia aplikacji. Jeśli metoda zostanie wywołana więcej niż raz, zgłosi wyjątek IllegalStateException.
      • Wywołaj setApiKey() przed zainicjowaniem innych komponentów pakietu Navigation SDK, takich jak Navigator.
      • Klucz podany za pomocą tej metody zastępuje każdy klucz interfejsu API w pliku AndroidManifest.xml.
      • Używaj pakietu Navigation SDK w wersji 7.6 lub nowszej.

Dodawanie wymaganych informacji o autorze do aplikacji

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

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

  • NOTICE.txt
  • LICENSES.txt