プロジェクトを設定する -- バージョン 4.99 以前

このガイドでは、Android 向け Navigation SDK を使用する場合のビルド構成の要件について説明します。手順は、Android IDE がインストールされており、Android 開発に精通していることを前提としています。

Navigation SDK の使用に必要な最小要件

これらの要件は、Navigation SDK for Android バージョン 4.99 以前に適用されます。

  • Navigation SDK が有効になっている Google Cloud Console プロジェクト。プロビジョニングについては、Google Maps Platform の担当者にお問い合わせください。

  • アプリの対象 API レベルは 30 以降である必要があります。

  • Navigation SDK でビルドされたアプリを実行するには、Android デバイスに Google Play 開発者サービスがインストールされ、有効になっている必要があります。

  • アプリに帰属表示とライセンスに関するテキストを追加する必要があります。

プロジェクトを設定する: Cloud コンソール プロジェクトと Android プロジェクト

アプリをビルドまたはテストする前に、Cloud コンソール プロジェクトを作成し、API キー認証情報を追加する必要があります。プロジェクトには、Navigation SDK にアクセスするためのプロビジョニングが必要です。Cloud コンソール プロジェクト内のすべてのキーには、Navigation SDK に対する同じアクセス権が付与されます。1 つのキーに複数の開発プロジェクトを関連付けることができます。すでにコンソール プロジェクトがある場合は、現在のプロジェクトにキーを追加できます。

設定方法

  1. 任意のウェブブラウザCloud Console にログインし、Cloud Console プロジェクトを作成します。
  2. Android Studio などの IDE で Android アプリ開発プロジェクトを作成し、パッケージ名をメモします。
  3. Cloud コンソール プロジェクトで Navigation SDK にアクセスするには、Google Maps Platform の担当者にお問い合わせください。
  4. ウェブブラウザで Cloud コンソールのダッシュボードで、認証情報を作成して制限付きの API キーを生成します。
  5. [API キー] ページの [アプリケーションの制限] 領域で、[Android アプリ] をクリックします。
  6. [パッケージ名とフィンガープリントを追加] をクリックし、開発プロジェクトのパッケージ名とそのキーの SHA-1 フィンガープリントを入力します。
  7. [保存] をクリックします。

プロジェクトに Navigation SDK を追加する

Navigation SDK は、Maven または AAR バンドルで入手できます。開発プロジェクトを作成したら、次のいずれかの方法で SDK を統合できます。

以下では、google() Maven リポジトリを使用します。これは、Navigation SDK をプロジェクトに追加する最も簡単で推奨される方法です。

  1. 次の依存関係を 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 経由でクラウド プロジェクトにログインする必要があります。

  1. コンシューマ SDK ドキュメントの前提条件セクションの説明に沿って、Google の Maven リポジトリにアクセスするように環境を設定します。Navigation SDK へのアクセスは、ワークスペース グループを介して制御されます。
  2. 必要なバージョンの 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>
    

Navigation SDK は AAR バンドルとしても利用できます。開発プロジェクトを作成したら、SDK を統合できます。以下の手順では、IDE として Android Studio を使用していることを前提としています。

  1. 共有 Google ドライブから Navigation SDK の最新バージョンをダウンロードして解凍します。アクセス権がない場合は、担当者にお問い合わせください。

  2. Android Studio でプロジェクトを開き、SDK Manager を使用して Google Play 開発者サービス パッケージを追加します。

  3. ZIP ファイル ディレクトリから、libs/google_navigation_navmap.aar をプロジェクトの app/libs ディレクトリにコピーします。

  4. モジュール レベルの 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 に必要な設定

    1. minSdkVersion を 23 以上に設定します。
    2. targetSdkVersion を 30 以上に設定します。
    3. javaMaxHeapSize を増やす dexOptions 設定を追加します。
    4. 追加ライブラリの場所を設定します。
    5. Navigation SDK の repositoriesdependencies を追加します。
    6. 依存関係のバージョン番号を、利用可能な最新バージョンに置き換えます。

    ビルド時間を短縮するためのオプションの設定

    • 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 マップ プロジェクトにインストールする手順は以下のとおりです。

  1. 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"
        }
    }
  2. モジュール レベルの 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'
    }
  3. モジュール レベルの build.gradle.kts ファイルか build.gradle ファイルで、targetSdkcompileSdk を 34 に設定します。
  4. ファイルを保存して、プロジェクトを Gradle と同期します
  5. 最上位レベルのディレクトリで secrets.properties ファイルを開き、次のコードを追加します。YOUR_API_KEY は実際の API キーに置き換えてください。secrets.properties はバージョン管理システムにチェックインされないため、このファイルにキーを保存します。
    NAV_API_KEY=YOUR_API_KEY
  6. ファイルを保存します。
  7. 最上位レベルのディレクトリ(secrets.properties ファイルと同じフォルダ)に local.defaults.properties ファイルを作成し、次のコードを追加します。

    NAV_API_KEY=DEFAULT_API_KEY

    このファイルの目的は、secrets.properties ファイルがない場合に API キーのバックアップ場所を提供し、ビルドが失敗しないようにすることです。この状況は、secrets.properties を省略したバージョン管理システムからアプリのクローンを作成し、API キーを提供するために secrets.properties ファイルをまだローカルに作成していない場合に発生する可能性があります。

  8. ファイルを保存します。
  9. 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 から例外がスローされます。

  10. Android Studio でモジュール レベルの build.gradle.kts ファイルか build.gradle ファイルを開き、secrets プロパティを編集します。secrets プロパティがない場合は追加します。

    プラグインのプロパティを編集して propertiesFileNamesecrets.properties に、defaultPropertiesFileNamelocal.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.*"
    }
            

アプリに必要な属性情報を含める

アプリで Navigation SDK for Android を使用する場合は、アプリの法的通知のセクションに帰属表示テキストとオープンソース ライセンスを組み込む必要があります。

必要な帰属情報テキストとオープンソース ライセンスは、Android 向け Navigation SDK の ZIP ファイルにあります。

  • NOTICE.txt
  • LICENSES.txt