設定專案 -- 4.99 以下版本

本指南列出使用 Android 版 Navigation SDK 的建構設定規定。這些操作說明假設您已安裝 Android IDE,且熟悉 Android 開發作業。

使用 Navigation SDK 的最低需求條件

這些規定適用於 Android 版 Navigation SDK 4.99 以下版本。

  • Google Cloud 控制台

    啟用 Navigation SDK 的專案。如要佈建,請洽詢您的 Google 地圖平台代表。

  • 應用程式必須指定目標 API 級別 30 以上的版本。

  • 如要執行使用 Navigation SDK 建構的應用程式,Android 裝置必須安裝並啟用 Google Play 服務

  • 作者資訊和授權文字必須加入應用程式。

設定專案:Cloud 控制台專案和 Android 專案

您必須先建立 Cloud 控制台專案,並新增 API 金鑰憑證,才能建構或測試應用程式。專案必須佈建,才能存取 Navigation SDK。Cloud 控制台專案中的所有金鑰,都會獲得相同的 Navigation SDK 存取權。一個金鑰可以有多個相關聯的開發專案。如果您已有控制台專案,可以將金鑰新增至目前的專案。

設定方式

  1. 在慣用的網路瀏覽器中登入 Cloud 控制台,然後建立 Cloud 控制台專案。
  2. IDE (例如 Android Studio) 中,建立 Android 應用程式開發專案,並記下套件名稱。
  3. 請聯絡 Google 地圖平台代表,為您的 Cloud Console 專案提供 Navigation SDK 的存取權。
  4. 在網頁瀏覽器中前往 Cloud 控制台資訊主頁,然後建立憑證,產生設有限制的 API 金鑰。
  5. 在「API 金鑰」頁面的「應用程式限制」區域中,按一下「Android 應用程式」。
  6. 按一下「新增套件名稱和指紋」,然後輸入開發專案的套件名稱和該金鑰的 SHA-1 指紋。
  7. 按一下 [儲存]

在專案中新增 Navigation SDK

您可以透過 Maven 取得 Navigation SDK,也可以使用 AAR 套件。建立開發專案後,您可以透過下列其中一種方法,將 SDK 整合到專案中。

使用 Maven 取得 Navigation SDK 4.5 以上版本 (建議做法)

以下使用 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 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

    請將以下內容新增到 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>
    

使用 Maven 取得 4.5 版之前的 Navigation SDK,或使用 Driver SDK

在 v4 版本的其餘時間,您仍可透過原始 Maven 存放區使用 Navigation SDK。這個程式庫與上述版本相同,也包含所有更新,並在轉換期間提供與 Driver SDK 和其他程式庫的相容性。使用這項依附元件時,您必須在編譯時使用 gcloud 登入雲端專案。

  1. 如要設定環境以存取 Google 的 Maven 存放區,請參閱 Consumer SDK 說明文件的必要條件一節。Navigation SDK 的存取權由工作區群組控管。
  2. 將下列依附元件新增至 Gradle 或 Maven 設定,並將 VERSION_NUMBER 預留位置替換為 Navigation SDK 的版本。

    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 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

    請將以下內容新增到 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。這些操作說明假設您使用 Android Studio 做為 IDE。

  1. 共用 Google 雲端硬碟下載最新版 Navigation SDK,然後解壓縮。如果沒有存取權,請與代表聯絡。

  2. Android Studio 中開啟專案,然後使用 SDK 管理工具新增 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 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'
           }
       }
    }
    

設定建構

建立專案後,即可設定相關設定,確保順利建構及使用 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. 新增可增加 javaMaxHeapSizedexOptions 設定。
    4. 設定其他程式庫的位置。
    5. 為 Navigation SDK 新增 repositoriesdependencies
    6. 將依附元件中的版本號碼換成最新版本。

    可縮短建構時間的選用設定

    • 使用 R8/ProGuard 啟用程式碼縮減和資源縮減功能,從依附元件中移除未使用的程式碼和資源。如果 R8/ProGuard 步驟的執行時間過長,請考慮為開發工作啟用 multidex
    • 減少建構版本中包含的語言翻譯數量:在開發期間,為一種語言設定 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. 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'
}

在應用程式中加入 API 金鑰

本節將說明如何儲存 API 金鑰,讓應用程式以安全的方式參照金鑰。API 金鑰不應該登錄在版本管控系統中;我們建議將金鑰儲存在位於專案根目錄的 secrets.properties 檔案內。如要進一步瞭解 secrets.properties 檔案,請參閱這篇文章中關於 Gradle 屬性檔案的說明

建議您使用 Secrets Gradle Plugin for Android 來簡化這項工作。

如要在 Google 地圖專案中安裝 Secrets Gradle Plugin for Android,請按照下列步驟操作:

  1. 在 Android Studio 中開啟頂層的 build.gradle.ktsbuild.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.ktsbuild.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.ktsbuild.gradle 檔案中,確認 targetSdkcompileSdk 已設為 34。
  4. 使用 Gradle 同步處理專案
  5. 開啟頂層目錄中的 secrets.properties 檔案,並加入下列程式碼,然後將 YOUR_API_KEY 替換成您的 API 金鑰。secrets.properties 不會登錄在版本管控系統中,因此請將金鑰儲存至該檔案。
    MAPS_API_KEY=YOUR_API_KEY
  6. 在頂層目錄 (與 secrets.properties 檔案相同的資料夾) 中建立 local.defaults.properties 檔案,然後加入下列程式碼。

    MAPS_API_KEY=DEFAULT_API_KEY

    如果找不到 secrets.properties 檔案,這個檔案便可做為 API 金鑰的備份位置,以確保建置程序不會失敗。如果您從略過 secrets.properties 的版本管控系統複製應用程式,且尚未在本機建立 secrets.properties 檔案來提供 API 金鑰,就可能會發生這種情況。

  7. 找到 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}" />

    注意: API 金鑰的建議中繼資料名稱為 com.google.android.geo.API_KEY。具備這個名稱的金鑰可用來驗證 Android 平台上的多個 Google 地圖相關 API,包括 Navigation SDK for Android。為了兼顧回溯相容性,API 也支援 com.google.android.maps.v2.API_KEY 這個名稱。此舊版名稱僅允許對 Android Maps API 第 2 版進行驗證。應用程式只能指定這兩種 API 金鑰中繼資料名稱的其中一個;如果同時指定兩者,API 會擲回例外狀況。

  8. 在 Android Studio 中開啟模組層級的 build.gradle.ktsbuild.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"
    }
            

    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"
    }
            

在應用程式中加入必要出處資訊

如果您在應用程式中使用 Android 版 Navigation SDK,就必須將出處資訊文字和開放原始碼授權加進應用程式的法律聲明部分。

您可以在 Android 導覽 SDK 的 zip 檔案中找到必要的出處文字和開放原始碼授權:

  • NOTICE.txt
  • LICENSES.txt