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ć:
- W ulubionej przeglądarce zaloguj się w konsoli Cloud i utwórz projekt w konsoli Cloud.
- W środowisku IDE, np. Android Studio, utwórz projekt deweloperski aplikacji na Androida i zanotuj 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 sekcji Ograniczenia aplikacji kliknij Aplikacje na Androida.
- Kliknij Dodaj nazwę pakietu i odcisk cyfrowy, a następnie wpisz nazwę pakietu projektu deweloperskiego 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 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.
Dodaj tę zależność do konfiguracji Gradle lub Maven, zastępując symbol zastępczy
VERSION_NUMBERwersją pakietu Navigation SDK na Androida.Gradle
Dodaj ten kod do pliku
build.gradlena 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-pluginnie jest już potrzebna.Dodaj ten kod do pliku
build.gradlena 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.
- 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.
Dodaj tę zależność do konfiguracji Gradle lub Maven, zastępując symbol zastępczy
VERSION_NUMBERwersją pakietu Navigation SDK.Gradle
Dodaj ten kod do pliku
build.gradlena poziomie modułu:dependencies { ... implementation 'com.google.android.maps:navsdk:VERSION_NUMBER' }Dodaj ten kod do pliku
build.gradlena 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.
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ługi Google Play za pomocą SDK Manager.
Skopiuj plik
libs/google_navigation_navmap.aarz katalogu pliku ZIP do kataloguapp/libsprojektu.Dodaj ten kod do pliku
build.gradlena poziomie modułu:implementation(name: 'google_navigation_navmap', ext: 'aar')Dodaj ten kod do pliku
build.gradlena 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.propertiesi dodajandroid.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
- Ustaw
minSdkVersionna 23 lub wyższy. - Ustaw
targetSdkVersionna 30 lub wyższy. - 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.
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
resConfigsdla 1 języka. W przypadku kompilacji końcowej ustawresConfigsdla 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.
- Ustaw
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:
-
W Android Studio otwórz plik
build.gradlena poziomie głównym i dodaj ten kod do elementudependenciesw sekcjibuildscript.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") } }
-
Otwórz plik
build.gradlena poziomie aplikacji i dodaj ten kod do elementuplugins.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") }
- Jeśli używasz Android Studio, zsynchronizuj projekt z Gradle.
-
Otwórz plik
local.propertiesw katalogu na poziomie projektu, a następnie dodaj ten kod. ZastąpYOUR_API_KEYswoim kluczem interfejsu API.MAPS_API_KEY=YOUR_API_KEY
-
Możesz dodać klucz interfejsu API do pliku
AndroidManifest.xmllub 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_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 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 metodzieApplication.onCreate()) wywołaj metodę w ten sposób:Kotlin
- Dodaj te instrukcje importu:
import com.google.android.libraries.navigation.NavigationApi
- Dodaj ten kod do metody
Application.onCreate():NavigationApi.setApiKey(BuildConfig.MAPS_API_KEY)
Java
- Dodaj te instrukcje importu:
import com.google.android.libraries.navigation.NavigationApi;
- Dodaj ten kod do metody
Application.onCreate():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 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ątekIllegalStateException. - Wywołaj
setApiKey()przed zainicjowaniem innych komponentów pakietu Navigation SDK, takich jakNavigator. - 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.
- Dodaj te instrukcje importu:
- Dodaj klucz interfejsu API do pliku
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.txtLICENSES.txt