设置项目 - 4.99 及更低版本

本指南列出了使用 Navigation SDK for Android 的 build 配置要求。这些说明假定您已安装 Android IDE,并且熟悉 Android 开发。

使用 Navigation SDK 的最低要求

这些要求适用于 Navigation SDK for Android 4.99 及更低版本。

设置项目:Cloud 控制台项目和 Android 项目

在构建或测试应用之前,您需要创建 Cloud 控制台项目并添加 API 密钥凭据。该项目必须具有预配功能才能访问 Navigation SDK。Cloud 控制台项目中的所有密钥都具有相同的 Navigation SDK 访问权限。一个密钥可以关联多个开发项目。如果您已有控制台项目,则可以向当前项目添加密钥。

如需进行设置

  1. 在您喜欢的 网络浏览器 中,登录 Cloud 控制台 并创建您的 Cloud 控制台 项目。
  2. 在您的 IDE(例如 Android Studio)中,创建一个 Android 应用开发 项目,并记下软件包名称。
  3. 与您的 Google Maps Platform 代表联系,以提供对 Cloud 控制台项目的 Navigation SDK 的访问权限。
  4. 在网络浏览器中打开 Cloud 控制台信息中心 后,创建凭据以生成受限的 API 密钥。
  5. API 密钥页面 上,点击“应用 限制”区域中的“Android 应用” 。
  6. 点击添加软件包名称和指纹 ,然后输入开发项目的软件包 名称和该密钥的 SHA-1 指纹。
  7. 点击保存

将 Navigation SDK 添加到您的项目

Navigation SDK 可通过 Maven 或 AAR 软件包获取。 创建开发项目后,您可以使用以下方法之一将 SDK 集成到其中。

使用 Maven for Navigation SDK v4.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 用于 v4.5 之前的 Navigation SDK 或 Driver SDK

在 v4 版本的剩余时间里,Navigation SDK 将继续通过原始 Maven 制品库提供。这是与上述版本相同的库,具有所有相同的更新,并在过渡期间提供与 Driver SDK 和其他库的兼容性。使用此依赖项需要在编译时使用 gcloud 登录您的云项目。

  1. 按照 Consumer SDK 文档的 “ 前提条件 ”部分中的说明设置环境以访问 Google 的 Maven 制品库。对 Navigation SDK 的访问权限通过 Workspace 群组进行控制。
  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 脚本

  • 打开 build.gradle (Module:app) 文件,并按照以下准则更新设置,以满足 Navigation SDK 的要求,并考虑设置优化选项。

    Navigation SDK 的必要设置

    1. minSdkVersion 设置为 23 或更高版本。
    2. targetSdkVersion 设置为 30 或更高版本。
    3. 添加一个 dexOptions 设置,以增加 javaMaxHeapSize
    4. 设置其他库的位置。
    5. 添加 Navigation SDK 的 repositoriesdependencies
    6. 将依赖项中的版本号替换为最新的可用版本。

    缩短构建时间的可选设置

    • 使用 R8/ProGuard 启用 代码缩减和资源缩减,以从依赖项中移除未使用的代码和资源。如果 R8/ProGuard 步骤的运行时间过长,请考虑为 开发工作启用 multidex
    • 减少 build 中包含的语言翻译数量:在开发期间为一种语言设置 resConfigs。对于最终 build,请为实际使用的语言设置 resConfigs。默认情况下,Gradle 会包含 Navigation SDK 支持的所有语言的资源字符串。

以下是应用的 Gradle build 脚本示例。请查看 示例应用以获取更新的依赖项集,因为您使用的 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 属性文件

为了简化此任务,建议您使用 Android 版 Secret Gradle 插件

如需安装 Android 版 Secrets Gradle 插件并存储您的 API 密钥,请执行以下操作:

  1. 在 Android Studio 中,打开根级 build.gradle 文件,并将以下代码添加到 dependencies 元素下方的 buildscript 中。

    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")
        }
    }
  2. 打开应用级 build.gradle 文件,并将以下代码添加到 plugins 元素中。

    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")
    }
  3. 如果您使用 Android Studio,请将您的项目与 Gradle 同步。
  4. 在项目级目录中打开 local.properties,然后添加 以下代码。将 YOUR_API_KEY 替换为您的 API 密钥。
    MAPS_API_KEY=YOUR_API_KEY
  5. 您可以将 API 密钥添加到 AndroidManifest.xml 文件,也可以以编程方式提供 API 密钥。
    • 将您的 API 密钥添加到 AndroidManifest.xml
      <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 密钥元数据名称。如果同时指定了这两个名称,该 API 将抛出异常。

    • 以编程方式提供 API 密钥:

      Secrets Gradle 插件会在 BuildConfig 类中提供密钥。 在应用的初始化过程中(例如,在您的 Application.onCreate() 方法中), 按如下方式调用该方法:

      Kotlin

      1. 添加以下 import 语句:
        import com.google.android.libraries.navigation.NavigationApi
      2. 将以下内容添加到 Application.onCreate() 方法中:
        NavigationApi.setApiKey(BuildConfig.MAPS_API_KEY)

      Java

      1. 添加以下 import 语句:
        import com.google.android.libraries.navigation.NavigationApi;
      2. 将以下内容添加到 Application.onCreate() 方法中:
        NavigationApi.setApiKey(BuildConfig.MAPS_API_KEY);
      注意: 使用 setApiKey() 时,请注意以下事项:
      • 提供非 null、非空的 API 密钥。
      • 在应用的生命周期内,仅调用 setApiKey() 一次。如果调用该方法的次数超过一次,该方法将抛出 IllegalStateException
      • 在初始化任何其他 Navigation SDK 组件(例如 Navigator)之前调用 setApiKey()
      • 您使用此方法提供的密钥会替换 AndroidManifest.xml 中的任何 API 密钥。
      • 使用 Navigation SDK 7.6 或更高版本。

在应用中添加必要的提供方说明

如果您在应用中使用 Navigation SDK for Android,则必须在应用的法律声明部分中添加提供方文字和开源许可。

您可以在 Navigation SDK for Android ZIP 文件中找到必要的提供方文字和开源许可:

  • NOTICE.txt
  • LICENSES.txt