このガイドでは、Android 向け Navigation SDK を使用する場合のビルド構成の要件について説明します。以下の手順は、Android IDE がインストールされており、Android 開発に精通していることを前提としています。
Navigation SDK の使用に必要な最小要件
これらの要件は、Android バージョン 4.99 以前の Navigation SDK に適用されます。
Navigation SDK が有効になっている Google Cloud Console プロジェクト。プロビジョニングについては、Google Maps Platform の担当者にお問い合わせください。
アプリは API レベル 30 以降を対象にする必要があります。
Navigation SDK でビルドされたアプリを実行するには、Android デバイスに Google Play 開発者サービスがインストールされ、有効になっている必要があります。
帰属表示とライセンス テキストをアプリに追加する必要があります。
プロジェクトをセットアップする: Cloud コンソール プロジェクトと Android プロジェクト
アプリを構築またはテストする前に、Cloud Console プロジェクトを作成し、API キーの認証情報を追加する必要があります。Navigation SDK にアクセスするには、プロジェクトにプロビジョニングが必要です。Cloud コンソール プロジェクト内のすべてのキーには、Navigation SDK に対する同じアクセス権が付与されます。1 つの鍵に複数の開発プロジェクトを関連付けることができます。すでにコンソール プロジェクトがある場合は、現在のプロジェクトにキーを追加できます。
設定方法
- お好みのウェブブラウザで Cloud Console にログインし、Cloud Console プロジェクトを作成します。
- Android Studio などの IDE で、Android アプリ開発プロジェクトを作成し、パッケージ名をメモします。
- Cloud コンソール プロジェクトで Navigation SDK にアクセスするには、Google Maps Platform の担当者にお問い合わせください。
- ウェブブラウザで Cloud コンソールのダッシュボードで、認証情報を作成して制限付きの API キーを生成します。
- API キーのページで、[アプリケーションの制限] の [Android アプリ] をクリックします。
- [パッケージ名とフィンガープリントを追加] をクリックし、開発プロジェクトのパッケージ名とそのキーの SHA-1 フィンガープリントを入力します。
- [保存] をクリックします。
Navigation SDK をプロジェクトに追加する
Navigation SDK は Maven を介して、または AAR バンドルとして利用できます。開発プロジェクトを作成したら、次のいずれかの方法で SDK を統合できます。
Navigation SDK v4.5 以降で Maven を使用する(推奨)
以下では、google()
Maven リポジトリを使用します。これは、Navigation SDK をプロジェクトに追加する最も簡単で推奨される方法です。
次の依存関係を Gradle または Maven の構成に追加します。
VERSION_NUMBER
プレースホルダは、目的のバージョンの Navigation SDK for Android に置き換えます。Gradle
モジュール レベルの
build.gradle
に以下を追加します。dependencies { ... implementation 'com.google.android.libraries.navigation:navigation:VERSION_NUMBER' }
元の Maven リポジトリからアップグレードする場合は、グループ名とアーティファクト名が変更されているため、
com.google.cloud.artifactregistry.gradle-plugin
プラグインは不要になります。トップレベルの
build.gradle
に以下を追加します。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
pom.xml
に次の行を追加します。<dependencies> ... <dependency> <groupId>com.google.android.libraries.navigation</groupId> <artifactId>navigation</artifactId> <version>VERSION_NUMBER</version> </dependency> </dependencies>
Maps SDK を使用する依存関係がある場合は、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>
Navigation SDK v4.5 より前または Driver SDK で Maven を使用する
Navigation SDK は、残りの v4 バージョンまで、元の Maven リポジトリを介して引き続き利用できます。これは、上記のバージョンと同じ更新がすべて適用されたライブラリであり、移行期間中は Driver SDK や他のライブラリとの互換性を提供します。この依存関係を使用するには、コンパイル時に gcloud
経由でクラウド プロジェクトにログインする必要があります。
- Consumer SDK ドキュメントの前提条件セクションに説明されているように、Google の Maven リポジトリにアクセスするための環境を設定します。Navigation SDK へのアクセスは、ワークスペース グループによって制御されます。
必要なバージョンの Navigation SDK の
VERSION_NUMBER
プレースホルダに置き換えて、Gradle または Maven の構成に次の依存関係を追加します。Gradle
モジュール レベルの
build.gradle
に以下を追加します。dependencies { ... implementation 'com.google.android.maps:navsdk:VERSION_NUMBER' }
トップレベルの
build.gradle
に以下を追加します。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
pom.xml
に次の行を追加します。<dependencies> ... <dependency> <groupId>com.google.android.maps</groupId> <artifactId>navsdk</artifactId> <version>VERSION_NUMBER</version> </dependency> </dependencies>
Maps SDK を使用する依存関係がある場合は、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>
ダウンロードした AAR バンドルを使用する(非推奨)
Navigation SDK は AAR バンドルとしても利用できます。開発プロジェクトを作成したら、SDK を統合できます。以下の手順は、IDE に Android Studio を使用していることを前提としています。
共有ドライブから Navigation SDK の最新バージョンをダウンロードして解凍します。アクセス権がない場合は、担当者にお問い合わせください。
Android Studio でプロジェクトを開き、SDK Manager を使用して Google Play 開発者サービス パッケージを追加します。
ZIP ファイル ディレクトリから、
libs/google_navigation_navmap.aar
をプロジェクトのapp/libs
ディレクトリにコピーします。モジュール レベルの
build.gradle
に次の行を追加します。implementation(name: 'google_navigation_navmap', ext: 'aar')
さらに、最上位の
build.gradle
に以下を追加します。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' } } }
ビルドを構成する
プロジェクトを作成したら、Navigation SDK を正常にビルドして使用するための設定を構成できます。
ローカル プロパティを更新する
- Gradle Scripts フォルダで、
local.properties
ファイルを開いてandroid.useDeprecatedNdk=true
を追加します。
Gradle ビルド スクリプトを更新する
build.gradle (Module:app)
ファイルを開き、次のガイドラインに沿って設定を更新して Navigation SDK の要件を満たし、最適化オプションの設定も検討します。Navigation SDK に必要な設定
minSdkVersion
を 23 以上に設定します。targetSdkVersion
を 30 以上に設定します。javaMaxHeapSize
を増やすdexOptions
設定を追加します。- 追加のライブラリの場所を設定します。
- Navigation SDK の
repositories
とdependencies
を追加します。 - 依存関係のバージョン番号を最新の利用可能なバージョンに置き換えます。
ビルド時間を短縮するためのオプションの設定
- R8 / ProGuard を使用してコード圧縮とリソース圧縮を有効にし、依存関係から未使用のコードとリソースを削除します。R8 / ProGuard のステップの実行に時間がかかりすぎる場合は、開発作業で マルチデックスを有効にすることを検討してください。
- ビルドに含まれる言語の翻訳の数を減らす: 開発中に 1 つの言語に
resConfigs
を設定します。最終ビルドでは、実際に使用する言語にresConfigs
を設定します。デフォルトでは、Gradle には Navigation SDK でサポートされているすべての言語のリソース文字列が含まれています。
以下に、このアプリケーションの Gradle ビルド スクリプトの例を示します。使用している Navigation SDK のバージョンは、このドキュメントよりも若干早くなっている可能性があるため、更新された依存関係のセットについては、サンプルアプリを確認してください。
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'
}
アプリに API キーを追加する
このセクションでは、アプリで安全に参照されるように API キーを保存する方法を説明します。API キーは、バージョン管理システムにはチェックインせず、プロジェクトのルート ディレクトリにある secrets.properties
ファイルに保存することをおすすめします。secrets.properties
ファイルについて詳しくは、Gradle プロパティ ファイルをご覧ください。
このタスクを効率化するには、Android 用 Secrets Gradle プラグインの使用をおすすめします。
Android 用 Secrets Gradle プラグインを Google マップ プロジェクトにインストールする手順は以下のとおりです。
-
Android Studio で最上位レベルの
build.gradle.kts
またはbuild.gradle
ファイルを開き、buildscript
の配下にあるdependencies
要素に次のコードを追加します。Kotlin
buildscript { dependencies { classpath("com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1") } }
Groovy
buildscript { dependencies { classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1" } }
-
モジュール レベルの
build.gradle.kts
またはbuild.gradle
ファイルを開き、次のコードをplugins
要素に追加します。Kotlin
plugins { // ... id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") }
Groovy
plugins { // ... id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' }
- モジュール レベルの
build.gradle.kts
ファイルまたはbuild.gradle
ファイルで、targetSdk
とcompileSdk
が 34 に設定されていることを確認します。 - ファイルを保存して、プロジェクトを Gradle と同期します。
-
最上位レベルのディレクトリで
secrets.properties
ファイルを開き、次のコードを追加します。YOUR_API_KEY
は実際の API キーに置き換えてください。secrets.properties
はバージョン管理システムにチェックインされないため、このファイルにキーを保存します。NAV_API_KEY=YOUR_API_KEY
- ファイルを保存します。
-
最上位レベルのディレクトリ(
secrets.properties
ファイルと同じフォルダ)にlocal.defaults.properties
ファイルを作成し、次のコードを追加します。NAV_API_KEY=DEFAULT_API_KEY
このファイルの目的は、
secrets.properties
ファイルがない場合に API キーのバックアップ場所を提供し、ビルドが失敗しないようにすることです。この状況は、secrets.properties
を省略したバージョン管理システムからアプリのクローンを作成し、API キーを提供するためにsecrets.properties
ファイルをまだローカルに作成していない場合に発生する可能性があります。 - ファイルを保存します。
-
AndroidManifest.xml
ファイルでcom.google.android.geo.API_KEY
に移動し、android:value attribute
を更新します。<meta-data>
タグがない場合は、<application>
タグの子として作成します。<meta-data android:name="com.google.android.geo.API_KEY" android:value="${MAPS_API_KEY}" />
注:
com.google.android.geo.API_KEY
は、API キーの推奨されるメタデータ名です。この名前のキーは、Android プラットフォームで複数の Google マップベースの API(Navigation SDK for Android など)の認証に使用できます。下位互換性を確保するため、API ではcom.google.android.maps.v2.API_KEY
という名前もサポートされています。このレガシー名は、Android Maps API v2 の認証にのみ使用できます。アプリケーションが指定できる API キーのメタデータ名は 1 つのみです。両方を指定すると、API から例外がスローされます。 -
Android Studio でモジュール レベルの
build.gradle.kts
またはbuild.gradle
ファイルを開き、secrets
プロパティを編集します。secrets
プロパティが存在しない場合は追加します。プラグインのプロパティを編集して、
propertiesFileName
をsecrets.properties
に設定し、defaultPropertiesFileName
をlocal.defaults.properties
に設定し、その他のプロパティを設定します。Kotlin
secrets { // To add your Maps API key to this project: // 1. If the secrets.properties file does not exist, create it in the same folder as the 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" // 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.*" }
Groovy
secrets { // To add your Maps API key to this project: // 1. If the secrets.properties file does not exist, create it in the same folder as the 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" // 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.*" }
アプリに必要な属性情報を含める
アプリで Android 向け Navigation SDK を使用する場合は、アプリの法的通知のセクションに、帰属表示のテキストとオープンソース ライセンスを含める必要があります。
必要な帰属テキストとオープンソース ライセンスは、Navigation SDK for Android の ZIP ファイルにあります。
NOTICE.txt
LICENSES.txt