W tym przewodniku znajdziesz wymagania dotyczące konfiguracji kompilacji na potrzeby pakietu Navigation SDK na Androida. W tych instrukcjach zakładamy, że masz zainstalowane środowisko IDE Androida i znasz podstawy programowania na tę platformę.
Minimalne wymagania dotyczące korzystania z pakietu Navigation SDK
Te wymagania dotyczą pakietu Navigation SDK na Androida w wersji 4.99 i starszych.
-
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.
Do aplikacji należy dodać tekst dotyczący atrybucji i licencji.
Konfigurowanie projektów: projekt w konsoli Cloud i projekt aplikacji na Androida
Zanim utworzysz lub przetestujesz 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 Navigation SDK. Z kluczem może być powiązany więcej niż 1 projekt programistyczny. Jeśli masz już projekt konsoli, możesz dodać klucz do bieżącego projektu.
Konfiguracja
- W wybranej przeglądarce zaloguj się w konsoli Cloud i utwórz projekt w konsoli Cloud.
- W IDE, np. Android Studio, utwórz projekt aplikacji na Androida i zapisz nazwę pakietu.
- Skontaktuj się z przedstawicielem Google Maps Platform, aby uzyskać dostęp do pakietu Navigation SDK w projekcie w konsoli Cloud.
- W panelu konsoli Cloud w przeglądarce utwórz dane logowania, aby wygenerować klucz interfejsu API z ograniczeniami.
- Na stronie klucza interfejsu API w obszarze Ograniczenia aplikacji kliknij Aplikacje na Androida.
- Kliknij Dodaj nazwę pakietu i odcisk cyfrowy, a następnie wpisz nazwę pakietu projektu programistycznego i odcisk cyfrowy SHA-1 tego klucza.
- Kliknij Zapisz.
Dodawanie pakietu Navigation SDK do projektu
Pakiet Navigation SDK 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 tych metod.
Używanie Maven w przypadku pakietu Navigation SDK w wersji 4.5 lub nowszej (zalecane)
W poniższym przykładzie użyto repozytorium Maven google(), które jest najprostszym i zalecanym sposobem dodawania pakietu Navigation SDK do projektu.
Dodaj do konfiguracji Gradle lub Maven poniższą zależność, zastępując obiekt zastępczy
VERSION_NUMBERwersją pakietu Navigation SDK na Androida.Gradle
Dodaj do pliku
build.gradlena poziomie modułu te informacje:dependencies { ... implementation 'com.google.android.libraries.navigation:navigation:VERSION_NUMBER' }Jeśli uaktualniasz oryginalne repozytorium Maven, pamiętaj, że nazwy grup i artefaktów uległy zmianie, a wtyczka
com.google.cloud.artifactregistry.gradle-pluginnie jest już potrzebna.Dodaj też do pliku
build.gradlenajwyższego poziomu te informacje: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 do pliku
pom.xmlte 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 używają pakietu Maps SDK, musisz wykluczyć 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 będzie nadal dostępny w pierwotnym repozytorium Maven w przypadku pozostałych wersji 4. Jest to ta sama biblioteka ze wszystkimi tymi samymi aktualizacjami co wersja powyżej. Zapewnia ona zgodność z pakietem Driver SDK i innymi bibliotekami podczas przejścia.
Korzystanie z tej zależności wymaga zalogowania się w projekcie w chmurze za pomocą gcloud podczas kompilacji.
- Skonfiguruj środowisko, aby uzyskać dostęp do repozytorium Maven Google, zgodnie z opisem w sekcji Wymagania wstępne w dokumentacji pakietu SDK dla konsumentów. Dostęp do pakietu Navigation SDK jest kontrolowany przez grupę obszaru roboczego.
Dodaj do konfiguracji Gradle lub Maven poniższą zależność, zastępując obiekt zastępczy
VERSION_NUMBERwersją pakietu Navigation SDK.Gradle
Dodaj do pliku
build.gradlena poziomie modułu te informacje:dependencies { ... implementation 'com.google.android.maps:navsdk:VERSION_NUMBER' }Dodaj też do pliku
build.gradlenajwyż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.xmlte 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 używają pakietu Maps SDK, musisz wykluczyć 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. Po utworzeniu projektu programistycznego możesz zintegrować pakiet SDK. W tych instrukcjach przyjęto, że używasz środowiska IDE Android Studio.
Pobierz najnowszą wersję pakietu Navigation SDK z udostępnionego Dysku Google i rozpakuj ją. Jeśli nie masz dostępu, skontaktuj się z przedstawicielem.
W Android Studio otwórz projekt i dodaj pakiet Usług Google Play za pomocą Menedżera SDK.
Skopiuj plik
libs/google_navigation_navmap.aarz katalogu pliku ZIP do kataloguapp/libsprojektu.Dodaj do pliku
build.gradlena poziomie modułu te informacje:implementation(name: 'google_navigation_navmap', ext: 'aar')Dodaj też do pliku
build.gradlenajwyż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' } } }
Konfigurowanie kompilacji
Po utworzeniu projektu możesz skonfigurować ustawienia, aby pomyślnie utworzyć i używać pakietu Navigation SDK.
Aktualizowanie właściwości lokalnych
- W folderze skryptów Gradle otwórz plik
local.propertiesi dodajandroid.useDeprecatedNdk=true.
Aktualizowanie skryptu kompilacji Gradle
Otwórz plik
build.gradle (Module:app)i skorzystaj z tych wskazówek, aby zaktualizować ustawienia zgodnie z wymaganiami pakietu Navigation SDK. Możesz też rozważyć ustawienie opcji optymalizacji.Wymagane ustawienia pakietu Navigation SDK
- Ustaw
minSdkVersionna 23 lub więcej. - Ustaw
targetSdkVersionna 30 lub więcej. - Dodaj ustawienie
dexOptions, które zwiększajavaMaxHeapSize. - Ustaw lokalizację dodatkowych bibliotek.
- Dodaj
repositoriesidependenciesdla pakietu Navigation SDK. - 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 zajmuje zbyt dużo czasu, rozważ włączenie multidex na potrzeby prac programistycznych.
- Zmniejsz liczbę tłumaczeń językowych uwzględnionych w kompilacji: podczas tworzenia aplikacji ustaw
resConfigsdla jednego języka. W przypadku ostatecznej kompilacji ustawresConfigsdla języków, których faktycznie używasz. Domyślnie Gradle zawiera ciągi zasobów we wszystkich językach obsługiwanych przez pakiet Navigation SDK.
- Ustaw
Poniżej znajdziesz przykładowy skrypt 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 opisana w dokumentacji.
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 opisano, jak przechowywać klucz interfejsu API, aby aplikacja mogła się do niego bezpiecznie odwoływać. Nie należy sprawdzać klucza interfejsu API w systemie kontroli wersji, dlatego zalecamy przechowywanie go w pliku secrets.properties w katalogu głównym projektu i wykluczenie tego pliku z kontroli wersji. Więcej informacji o plikach właściwości Gradle znajdziesz w artykule na ten temat.
Aby uprościć to zadanie, zalecamy użycie wtyczki Secrets Gradle do Androida.
Aby zainstalować wtyczkę Gradle obiektów tajnych dla Androida i zapisać klucz interfejsu API:
-
W Android Studio otwórz plik
build.gradle.ktslubbuild.gradlenajwyższego poziomu i dodaj ten kod do blokuplugins.Kotlin
plugins { // ... id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") version "2.0.1" apply false }
Zakręcony
plugins { // ... id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' version '2.0.1' apply false }
-
Otwórz plik
build.gradle.ktslubbuild.gradlena poziomie modułu i dodaj ten kod do elementuplugins.Kotlin
plugins { id("com.android.application") // ... id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") }
Zakręcony
plugins { id 'com.android.application' // ... id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' }
- Jeśli używasz Android Studio, zsynchronizuj projekt z Gradle.
-
Otwórz plik
secrets.propertiesw katalogu najwyższego poziomu i dodaj podany niżej kod. ZastąpYOUR_API_KEYkluczem interfejsu API. Dodajsecrets.propertiesdo pliku.gitignore(lub w inny sposób wyklucz go z systemu kontroli wersji), aby nie sprawdzać klucza interfejsu API w systemie kontroli wersji.MAPS_API_KEY=YOUR_API_KEY
-
Utwórz plik
local.defaults.propertiesw katalogu najwyższego poziomu, czyli w tym samym folderze, w którym znajduje się pliksecrets.properties, a następnie dodaj podany niżej kod.MAPS_API_KEY=DEFAULT_API_KEY
Ten plik służy do podania zapasowej lokalizacji klucza interfejsu API, jeśli nie można znaleźć pliku
secrets.properties, aby kompilacje nie kończyły się niepowodzeniem. Może się tak zdarzyć, jeśli sklonujesz aplikację z systemu kontroli wersji, który pomija pliksecrets.properties, i nie utworzysz jeszcze lokalnie plikusecrets.properties, aby podać klucz interfejsu API. -
Możesz dodać klucz interfejsu API do pliku
AndroidManifest.xmllub podać go automatycznie.- 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_KEYto 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 Androida, w tym w pakiecie Navigation SDK na Androida. Ze względu na 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ślić tylko jedną z nazw metadanych klucza interfejsu API. Jeśli podasz obie wartości, interfejs API zgłosi wyjątek. - Podaj klucz interfejsu API automatycznie:
Wtyczka Gradle obiektów tajnych udostępnia klucz w klasie
BuildConfig. W ramach inicjowania aplikacji (np. w metodzieApplication.onCreate()) wywołaj metodę w ten sposób:Kotlin
- Dodaj te instrukcje importu:
import com.google.android.libraries.navigation.NavigationApi
- Dodaj do metody
Application.onCreate()te wiersze:NavigationApi.setApiKey(BuildConfig.MAPS_API_KEY)
Java
- Dodaj te instrukcje importu:
import com.google.android.libraries.navigation.NavigationApi;
- Dodaj do metody
Application.onCreate()te wiersze:NavigationApi.setApiKey(BuildConfig.MAPS_API_KEY);
Uwaga: podczas korzystania zsetApiKey()pamiętaj o tych kwestiach:- Podaj klucz interfejsu API, który nie jest pusty ani nie ma wartości null.
- Wywołaj
setApiKey()tylko raz w okresie istnienia aplikacji. Jeśli metoda zostanie wywołana więcej niż raz, zgłosi błądIllegalStateException. - Wywołaj
setApiKey()przed zainicjowaniem innych komponentów pakietu Navigation SDK, takich jakNavigator. - Klucz podany w tej metodzie zastępuje wszystkie klucze interfejsu API w
AndroidManifest.xml. - Używaj pakietu Navigation SDK w wersji 7.6 lub nowszej.
- Dodaj te instrukcje importu:
- Dodaj klucz interfejsu API do
-
W Android Studio otwórz plik
build.gradle.ktslubbuild.gradlena poziomie modułu i edytuj właściwośćsecrets. Jeśli właściwośćsecretsnie istnieje, dodaj ją.Edytuj właściwości wtyczki, aby ustawić
propertiesFileNamena"secrets.properties",defaultPropertiesFileNamena"local.defaults.properties"i skonfigurować 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 root directory (the same folder as the root 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" }
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 root directory (the same folder as the root 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" }
Uwzględnianie wymaganych informacji o autorach w aplikacji
Jeśli w aplikacji używasz pakietu Navigation SDK na Androida, w sekcji informacji prawnych musisz umieścić informację o pochodzeniu danych i licencje open source.
Wymagane informacje o pochodzeniu danych i licencje open source znajdziesz w pliku ZIP pakietu SDK do nawigacji na Androida:
NOTICE.txtLICENSES.txt