W tym przewodniku znajdziesz wymagania dotyczące konfiguracji kompilacji, które należy spełnić, aby korzystać z pakietu SDK nawigacji na Androida. W instrukcjach przyjęto, że masz zainstalowane środowisko IDE na Androida i znasz się na programowaniu na Androidzie.
Minimalne wymagania dotyczące korzystania z pakietu SDK nawigacji
Te wymagania dotyczą pakietu Navigation SDK na Androida w wersji 4.99 lub starszej.
Projekt Google Cloud Console z włączonym pakietem Navigation SDK. 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ę utworzoną za pomocą pakietu Navigation SDK, na urządzeniu z Androidem muszą być zainstalowane i włączone Usługi Google Play.
Do aplikacji należy dodać informacje o źródłach i tekst licencji.
Konfigurowanie projektów: projekt w konsoli Cloud i projekt Androida
Zanim skompilujesz lub przetestujesz aplikację, musisz utworzyć projekt w Cloud Console i dodać dane logowania do klucza interfejsu API. Aby uzyskać dostęp do pakietu SDK nawigacji, projekt musi mieć obsługę administracyjną. Wszystkie klucze w projekcie Cloud Console otrzymują takie same uprawnienia dostępu do pakietu Navigation SDK. Z kluczem może być powiązany więcej niż 1 projekt deweloperski. Jeśli masz już projekt w konsoli, możesz dodać do niego klucz.
Aby skonfigurować
- W swojej ulubionej przeglądarce zaloguj się w konsoli Google Cloud i utwórz projekt w konsoli Cloud.
- W swoim IDE, na przykład Android Studio, utwórz projekt tworzenia aplikacji na Androida i zapisz nazwę pakietu.
- Aby przyznać Ci dostęp do pakietu SDK Nawigacji w projekcie w konsoli Cloud, skontaktuj się z przedstawicielem Google Maps Platform.
- W panelu konsoli Cloud w przeglądarce utwórz dane logowania, aby wygenerować klucz interfejsu API z ograniczeniami.
- Na stronie klucza interfejsu API kliknij Aplikacje na Androida w obszarze Ograniczenia aplikacji.
- Kliknij Dodaj nazwę pakietu i odcisk cyfrowy, a następnie wpisz nazwę pakietu swojego projektu programistycznego oraz odcisk cyfrowy SHA-1 tego klucza.
- Kliknij Zapisz.
Dodaj do projektu pakiet SDK nawigacji
Pakiet SDK nawigacji jest dostępny w narzędziu Maven lub w pakiecie AAR. Po utworzeniu projektu możesz zintegrować z nim pakiet SDK, korzystając z jednej z poniższych metod.
Używanie pakietu SDK Maven for Navigation w wersji 4.5 lub nowszej (zalecane)
Poniżej znajduje się repozytorium Maven google()
, które jest najprostszym i zalecanym sposobem dodania pakietu Navigation SDK do projektu.
Dodaj podaną niżej zależność do konfiguracji Gradle lub Maven, zastępując zmienną
VERSION_NUMBER
odpowiednią wersją pakietu Navigation SDK na Androida.Gradle
Dodaj ten kod do modułu
build.gradle
na poziomie modułu:dependencies { ... implementation 'com.google.android.libraries.navigation:navigation:VERSION_NUMBER' }
Przy uaktualnianiu z pierwotnego repozytorium Maven nazwy grup i artefaktów uległy zmianie, a wtyczka
com.google.cloud.artifactregistry.gradle-plugin
nie jest już potrzebna.I dodaj do
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' } } }
Maven
Dodaj do elementu
pom.xml
:<dependencies> ... <dependency> <groupId>com.google.android.libraries.navigation</groupId> <artifactId>navigation</artifactId> <version>VERSION_NUMBER</version> </dependency> </dependencies>
Jeśli masz zależności korzystające z pakietu SDK Map Google, musisz wykluczyć tę zależność w każdej zadeklarowanej zależności, która korzysta z pakietu SDK Map Google.
<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 pakietu Maven for Navigation SDK w wersji wcześniejszej niż 4.5 lub z pakietem Driver SDK
Pakiet SDK nawigacji jest w dalszym ciągu dostępny w pierwotnym repozytorium Maven do końca pozostałych wersji 4. To ta sama biblioteka, która zawiera te same aktualizacje co wersja powyżej i zapewnia zgodność z pakietem Driver SDK i innymi bibliotekami podczas przenoszenia. Użycie tej zależności wymaga zalogowania się w projekcie w chmurze za pomocą gcloud
podczas kompilacji.
- Skonfiguruj środowisko tak, aby uzyskać dostęp do repozytorium Google Maven zgodnie z sekcją Wymagania wstępne dokumentacji pakietu SDK konsumenckiego. Dostępem do pakietu SDK nawigacji steruje się przez grupę obszarów roboczych.
Dodaj podaną niżej zależność do konfiguracji Gradle lub Maven, zastępując zmienną
VERSION_NUMBER
odpowiednią wersją pakietu Navigation SDK.Gradle
Dodaj ten kod do modułu
build.gradle
na poziomie modułu:dependencies { ... implementation 'com.google.android.maps:navsdk:VERSION_NUMBER' }
I dodaj do
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' } } }
Maven
Dodaj do elementu
pom.xml
:<dependencies> ... <dependency> <groupId>com.google.android.maps</groupId> <artifactId>navsdk</artifactId> <version>VERSION_NUMBER</version> </dependency> </dependencies>
Jeśli masz zależności korzystające z pakietu SDK Map Google, musisz wykluczyć tę zależność w każdej zadeklarowanej zależności, która korzysta z pakietu SDK Map Google.
<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życie pobranego pakietu AAR (niezalecane)
Pakiet SDK nawigacji jest też dostępny jako pakiet AAR. Po utworzeniu projektu możesz zintegrować pakiet SDK. W tych instrukcjach przyjęto założenie, że w Twoim IDE należy korzystać z Android Studio.
Pobierz najnowszą wersję pakietu Navigation SDK z udostępnianego Dysku Google i rozpakuj ją. Jeśli nie masz do niej dostępu, skontaktuj się z przedstawicielem.
W Android Studio otwórz projekt i za pomocą Menedżera pakietów SDK dodaj pakiet Usług Google Play.
Z katalogu pliku ZIP skopiuj
libs/google_navigation_navmap.aar
do kataloguapp/libs
projektu.Dodaj ten kod do modułu
build.gradle
na poziomie modułu:implementation(name: 'google_navigation_navmap', ext: 'aar')
I dodaj do
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 udanej kompilacji i korzystania z pakietu Navigation SDK.
Aktualizowanie usług lokalnych
- W folderze Skrypty Gradle otwórz plik
local.properties
i dodajandroid.useDeprecatedNdk=true
.
Aktualizowanie skryptu kompilacji Gradle
Otwórz plik
build.gradle (Module:app)
i skorzystaj z podanych niżej wskazówek, aby zaktualizować ustawienia tak, aby spełniały wymagania pakietu Navigation SDK. Zastanów się też nad ustawieniem opcji optymalizacji.Wymagane ustawienia pakietu Navigation SDK
- Ustaw
minSdkVersion
na wartość 23 lub więcej. - Ustaw
targetSdkVersion
na wartość 30 lub więcej. - Dodaj ustawienie
dexOptions
, które zwiększajavaMaxHeapSize
. - Ustaw lokalizację bibliotek dodatkowych.
- Dodaj
repositories
idependencies
do pakietu SDK nawigacji. - Zastąp numery wersji w zależności najnowszymi dostępnymi wersjami.
Opcjonalne ustawienia skracające czas kompilacji
- Włącz zmniejszanie kodu i zmniejszanie zasobów za pomocą 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 programowania.
- Zmniejsz liczbę tłumaczeń na jeden język w kompilacji: w trakcie programowania ustaw
resConfigs
dla jednego języka. W ostatniej kompilacji ustawresConfigs
dla języków, których faktycznie używasz. Domyślnie Gradle uwzględnia ciągi zasobów dla wszystkich języków obsługiwanych przez pakiet SDK nawigacji.
- Ustaw
Poniżej znajdziesz przykład skryptu kompilacji aplikacji Gradle. Sprawdź, czy w przykładowych aplikacjach znajdują się zaktualizowane zestawy zależności, ponieważ wersja używanego przez Ciebie pakietu SDK nawigacji może być nieco udoskonalona lub niezgodna z tą 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 bezpiecznie się do niego odwoływać. Nie należy sprawdzać klucza interfejsu API w systemie kontroli wersji, dlatego 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 uprościć to zadanie, zalecamy korzystanie z wtyczki Gradle obiektów tajnych na Androida.
Aby zainstalować wtyczkę Secrets Gradle na Androida w projekcie Map Google:
-
W Android Studio otwórz plik
build.gradle
lubbuild.gradle.kts
najwyższego poziomu i dodaj ten kod do elementudependencies
w sekcjibuildscript
.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") } }
-
Otwórz plik
build.gradle
na poziomie modułu i dodaj do elementuplugins
poniższy kod.Zakręcony
plugins { // ... id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' }
Kotlin
plugins { id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") }
- W pliku
build.gradle
na poziomie modułu sprawdź, czytargetSdk
icompileSdk
mają wartość 34. - Zapisz plik i zsynchronizuj projekt z Gradle.
-
Otwórz plik
secrets.properties
w katalogu najwyższego poziomu i dodaj ten kod. ZastąpYOUR_API_KEY
swoim kluczem interfejsu API. Zapisz klucz w tym pliku, ponieważ adressecrets.properties
nie jest rejestrowany w systemie kontroli wersji.MAPS_API_KEY=YOUR_API_KEY
- Zapisz plik.
-
Utwórz plik
local.defaults.properties
w katalogu najwyższego poziomu, w tym samym folderze co pliksecrets.properties
, a następnie dodaj poniższy kod.MAPS_API_KEY=DEFAULT_API_KEY
Ten plik służy do podania lokalizacji kopii zapasowej klucza interfejsu API na wypadek, gdyby nie udało się znaleźć pliku
secrets.properties
, co pozwoli uniknąć błędów kompilacji. Może się tak zdarzyć, jeśli sklonujesz aplikację z systemu kontroli wersji, który pomija elementsecrets.properties
, i nie utworzyłeś jeszcze lokalnie plikusecrets.properties
zawierającego Twój klucz interfejsu API. - Zapisz plik.
-
W pliku
AndroidManifest.xml
przejdź docom.google.android.geo.API_KEY
i zaktualizujandroid: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}" />
Note:
com.google.android.geo.API_KEY
is the recommended metadata name for the API key. A key with this name can be used to authenticate to multiple Google Maps-based APIs on the Android platform, including the Navigation SDK for Android. For backwards compatibility, the API also supports the namecom.google.android.maps.v2.API_KEY
. This legacy name allows authentication to the Android Maps API v2 only. An application can specify only one of the API key metadata names. If both are specified, the API throws an exception. -
In Android Studio, open your module-level
build.gradle
orbuild.gradle.kts
file and edit thesecrets
property. If thesecrets
property does not exist, add it.Edit the properties of the plugin to set
propertiesFileName
tosecrets.properties
, setdefaultPropertiesFileName
tolocal.defaults.properties
, and set any other properties.Groovy
secrets { // Optionally specify a different file name containing your secrets. // The plugin defaults to "local.properties" 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.*" }
Kotlin
secrets { // Optionally specify a different file name containing your secrets. // The plugin defaults to "local.properties" 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.*" }
Uwzględnij w aplikacji wymagane informacje o źródłach
Jeśli w swojej aplikacji używasz pakietu Navigation SDK na Androida, w sekcji informacji prawnych umieść tekst atrybucji i licencje open source.
Wymagany tekst źródła i licencje open source znajdziesz w pliku ZIP SDK nawigacji:
NOTICE.txt
LICENSES.txt
O ile nie stwierdzono inaczej, treść tej strony jest objęta licencją Creative Commons – uznanie autorstwa 4.0, a fragmenty kodu są dostępne na licencji Apache 2.0. Szczegółowe informacje na ten temat zawierają zasady dotyczące witryny Google Developers. Java jest zastrzeżonym znakiem towarowym firmy Oracle i jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2024-03-15 UTC.
[{ "type": "thumb-down", "id": "missingTheInformationINeed", "label":"Brak potrzebnych mi informacji" },{ "type": "thumb-down", "id": "tooComplicatedTooManySteps", "label":"Zbyt skomplikowane / zbyt wiele czynności do wykonania" },{ "type": "thumb-down", "id": "outOfDate", "label":"Nieaktualne treści" },{ "type": "thumb-down", "id": "translationIssue", "label":"Problem z tłumaczeniem" },{ "type": "thumb-down", "id": "samplesCodeIssue", "label":"Problem z przykładami/kodem" },{ "type": "thumb-down", "id": "otherDown", "label":"Inne" }] [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"Łatwo zrozumieć" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"Rozwiązało to mój problem" },{ "type": "thumb-up", "id": "otherUp", "label":"Inne" }]