ตั้งค่าโครงการของคุณ -- เวอร์ชัน 4.99 และเวอร์ชันก่อนหน้า

คู่มือนี้แสดงข้อกำหนดการกำหนดค่าบิวด์สำหรับการใช้ Navigation SDK สำหรับ Android วิธีการเหล่านี้จะถือว่าคุณได้ติดตั้ง Android IDE และคุ้นเคยกับการพัฒนาแอป Android แล้ว

ข้อกำหนดขั้นต่ำสำหรับการใช้ Navigation SDK

ข้อกำหนดเหล่านี้ใช้กับ Navigation SDK สำหรับ Android เวอร์ชัน 4.99 และต่ำกว่า

ตั้งค่าโปรเจ็กต์: โปรเจ็กต์ Cloud Console และโปรเจ็กต์ Android

ก่อนที่จะสร้างหรือทดสอบแอป คุณต้องสร้างโปรเจ็กต์ Cloud Console และเพิ่มข้อมูลเข้าสู่ระบบคีย์ API โปรเจ็กต์ต้องมีการจัดสรรเพื่อเข้าถึง Navigation SDK คีย์ทั้งหมดภายในโปรเจ็กต์ Cloud Console จะได้รับสิทธิ์เข้าถึง Navigation SDK เหมือนกัน คีย์สามารถเชื่อมโยงกับโปรเจ็กต์การพัฒนาได้มากกว่า 1 รายการ หากมีโปรเจ็กต์คอนโซลอยู่แล้ว คุณสามารถเพิ่มคีย์ลงในโปรเจ็กต์ปัจจุบันได้

วิธีตั้งค่า

  1. ในเว็บเบราว์เซอร์ที่คุณชื่นชอบ ให้ลงชื่อเข้าใช้ Cloud Console แล้วสร้างโปรเจ็กต์Cloud Console
  2. ใน IDE เช่น Android Studio ให้สร้างโปรเจ็กต์การพัฒนาแอป Android แล้วจดชื่อแพ็กเกจไว้
  3. ติดต่อตัวแทนของ Google Maps Platform เพื่อให้สิทธิ์เข้าถึง Navigation SDK สำหรับโปรเจ็กต์ Cloud Console
  4. ขณะอยู่ในแดชบอร์ด Cloud Console ในเว็บเบราว์เซอร์ ให้สร้างข้อมูลเข้าสู่ระบบเพื่อสร้างคีย์ API ที่มีข้อจำกัด
  5. ในหน้าคีย์ API ให้คลิกแอป Android ในส่วน ข้อจำกัดของแอปพลิเคชัน
  6. คลิกเพิ่มชื่อแพ็กเกจและลายนิ้วมือ แล้วป้อนชื่อแพ็กเกจ ของโปรเจ็กต์การพัฒนาและลายนิ้วมือ SHA-1 สำหรับคีย์ดังกล่าว
  7. คลิกบันทึก

เพิ่ม Navigation SDK ลงในโปรเจ็กต์

Navigation SDK พร้อมใช้งานโดยใช้ Maven หรือเป็น AAR bundle หลังจากสร้างโปรเจ็กต์การพัฒนาแล้ว คุณสามารถผสานรวม SDK เข้ากับโปรเจ็กต์ได้โดยใช้วิธีใดวิธีหนึ่งต่อไปนี้

ใช้ Maven สำหรับ Navigation SDK เวอร์ชัน 4.5 ขึ้นไป (แนะนำ)

ตัวอย่างต่อไปนี้ใช้ที่เก็บ Maven ของ google() ซึ่งเป็นวิธีที่ง่ายที่สุดและแนะนำให้ใช้เพื่อเพิ่ม Navigation SDK ลงในโปรเจ็กต์

  1. เพิ่มทรัพยากร Dependency ต่อไปนี้ลงในการกำหนดค่า Gradle หรือ Maven โดยแทนที่ตัวยึดตำแหน่ง VERSION_NUMBER ด้วยเวอร์ชันของ Navigation SDK สำหรับ Android

    Gradle

    เพิ่มรายการต่อไปนี้ลงใน build.gradle ระดับโมดูล

    dependencies {
    ...
    implementation 'com.google.android.libraries.navigation:navigation:VERSION_NUMBER'
    }
    

    หากอัปเกรดจากที่เก็บ Maven เดิม โปรดทราบว่าชื่อกลุ่มและ Artifact เปลี่ยนไปแล้ว และไม่จำเป็นต้องใช้ปลั๊กอิน 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>
    

    หากมีทรัพยากร Dependency ที่ใช้ Maps SDK คุณต้องยกเว้นทรัพยากร Dependency ในทรัพยากร Dependency ที่ประกาศไว้แต่ละรายการซึ่งขึ้นอยู่กับ 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 สำหรับ Navigation SDK เวอร์ชันก่อน 4.5 หรือใช้กับ Driver SDK

Navigation SDK จะยังคงพร้อมใช้งานโดยใช้ที่เก็บ Maven เดิมตลอดเวอร์ชัน 4 ซึ่งเป็นไลบรารีเดียวกันที่มีการอัปเดตทั้งหมดเหมือนกับเวอร์ชันด้านบน และรองรับ Driver SDK และไลบรารีอื่นๆ ในระหว่างการเปลี่ยนผ่าน การใช้ทรัพยากร Dependency นี้กำหนดให้ต้องเข้าสู่ระบบโปรเจ็กต์ที่อยู่ในระบบคลาวด์โดยใช้ gcloud เมื่อคอมไพล์

  1. ตั้งค่าสภาพแวดล้อมเพื่อเข้าถึงที่เก็บ Maven ของ Google ตามที่อธิบายไว้ใน ส่วน ข้อกำหนดเบื้องต้น ของเอกสารประกอบ Consumer SDK การเข้าถึง Navigation SDK จะควบคุมผ่านกลุ่ม Workspace
  2. เพิ่มทรัพยากร Dependency ต่อไปนี้ลงในการกำหนดค่า 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>
    

    หากมีทรัพยากร Dependency ที่ใช้ Maps SDK คุณต้องยกเว้นทรัพยากร Dependency ในทรัพยากร Dependency ที่ประกาศไว้แต่ละรายการซึ่งขึ้นอยู่กับ 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 Bundle ที่ดาวน์โหลด (ไม่แนะนำ)

Navigation SDK ยังพร้อมใช้งานเป็น AAR bundle ด้วย หลังจากสร้างโปรเจ็กต์การพัฒนาแล้ว คุณสามารถผสานรวม SDK ได้ วิธีการเหล่านี้จะถือว่าคุณใช้ Android Studio สำหรับ IDE

  1. ดาวน์โหลด Navigation SDK เวอร์ชันล่าสุดจาก shared Google ไดรฟ์ แล้วแยกไฟล์ หากไม่มีสิทธิ์เข้าถึง โปรดติดต่อตัวแทน

  2. ใน Android Studio ให้เปิดโปรเจ็กต์และ เพิ่มแพ็กเกจ บริการ Google Play โดยใช้ เครื่องมือจัดการ SDK

  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. เพิ่มการตั้งค่า dexOptions ที่เพิ่ม javaMaxHeapSize
    4. ตั้งค่าตำแหน่งสำหรับไลบรารีเพิ่มเติม
    5. เพิ่ม repositories และ dependencies สำหรับ Navigation SDK
    6. แทนที่หมายเลขเวอร์ชันในทรัพยากร Dependency ด้วยเวอร์ชันล่าสุดที่พร้อมใช้งาน

    การตั้งค่าที่ไม่บังคับเพื่อลดเวลาบิวด์

    • เปิดใช้การลดขนาดโค้ดและการลดขนาดทรัพยากร โดยใช้ R8/ProGuard เพื่อนำโค้ดและทรัพยากรที่ไม่ได้ใช้ออกจากทรัพยากร Dependency หาก ขั้นตอน R8/ProGuard ใช้เวลานานเกินไป ให้พิจารณาเปิดใช้ Multidex สำหรับ งานพัฒนา
    • ลดจำนวนคำแปลภาษาที่รวมอยู่ในบิวด์: ตั้งค่า resConfigs สำหรับ 1 ภาษาในระหว่างการพัฒนา สำหรับบิวด์สุดท้าย ให้ตั้งค่า resConfigs สำหรับภาษาที่คุณใช้จริง โดยค่าเริ่มต้น Gradle จะรวมสตริงทรัพยากรสำหรับทุกภาษาที่ Navigation SDK รองรับ

ด้านล่างนี้เป็นตัวอย่างสคริปต์บิวด์ Gradle สำหรับแอปพลิเคชัน โปรดตรวจสอบ แอปตัวอย่างเพื่อดูชุดทรัพยากร Dependency ที่อัปเดต เนื่องจากเวอร์ชันของ 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 ลงในระบบควบคุมเวอร์ชัน ดังนั้นเราขอแนะนำให้จัดเก็บคีย์ API ไว้ในไฟล์ secrets.properties ซึ่งอยู่ในไดเรกทอรีรากของโปรเจ็กต์ ดูข้อมูลเพิ่มเติมเกี่ยวกับไฟล์ secrets.properties ได้ที่ ไฟล์พร็อพเพอร์ตี้ Gradle

เราขอแนะนำให้คุณใช้ ปลั๊กอินข้อมูลลับ Gradle สำหรับ Android เพื่อให้งานนี้ง่ายขึ้น

วิธีติดตั้งปลั๊กอินข้อมูลลับ Gradle สำหรับ Android และจัดเก็บคีย์ 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 คีย์ที่มีชื่อนี้สามารถใช้เพื่อตรวจสอบสิทธิ์กับ Google Maps API หลายรายการในแพลตฟอร์ม Android ซึ่งรวมถึง Navigation SDK สำหรับ Android API ยังรองรับชื่อ com.google.android.maps.v2.API_KEY เพื่อความเข้ากันได้กับรุ่นก่อนหน้า ชื่อเดิมนี้ อนุญาตให้ตรวจสอบสิทธิ์กับ Android Maps API v2 เท่านั้น แอปพลิเคชันสามารถ ระบุชื่อข้อมูลเมตาของคีย์ API ได้เพียงชื่อเดียว หากระบุทั้ง 2 ชื่อ API จะแสดงข้อยกเว้น

    • ระบุคีย์ API แบบเป็นโปรแกรม

      ปลั๊กอินข้อมูลลับ Gradle จะทำให้คีย์พร้อมใช้งานในคลาส BuildConfig ในการเริ่มต้นแอป (เช่น ในเมธอด Application.onCreate()) ให้เรียกเมธอดดังนี้

      Kotlin

      1. เพิ่มคำสั่งนำเข้าต่อไปนี้
        import com.google.android.libraries.navigation.NavigationApi
      2. เพิ่มรายการต่อไปนี้ลงในเมธอด Application.onCreate()
        NavigationApi.setApiKey(BuildConfig.MAPS_API_KEY)

      Java

      1. เพิ่มคำสั่งนำเข้าต่อไปนี้
        import com.google.android.libraries.navigation.NavigationApi;
      2. เพิ่มรายการต่อไปนี้ลงในเมธอด Application.onCreate()
        NavigationApi.setApiKey(BuildConfig.MAPS_API_KEY);
      หมายเหตุ: เมื่อใช้ setApiKey() โปรดคำนึงถึงสิ่งต่อไปนี้
      • ระบุคีย์ API ที่ไม่ใช่ค่าว่างและไม่ใช่ค่าว่างเปล่า
      • เรียก setApiKey() เพียงครั้งเดียวในระหว่างอายุการใช้งานของแอปพลิเคชัน เมธอดจะแสดง IllegalStateException หากเรียกมากกว่า 1 ครั้ง
      • เรียก setApiKey() ก่อนที่จะเริ่มต้นคอมโพเนนต์อื่นๆ ของ Navigation SDK เช่น Navigator
      • คีย์ที่คุณระบุด้วยเมธอดนี้จะลบล้างคีย์ API ใดก็ตามใน AndroidManifest.xml
      • ใช้ Navigation SDK เวอร์ชัน 7.6 ขึ้นไป

รวมการระบุแหล่งที่มาที่จำเป็นในแอป

หากคุณใช้ Navigation SDK สำหรับ Android ในแอป คุณต้องรวมข้อความแสดงแหล่งที่มาและใบอนุญาตโอเพนซอร์สเป็นส่วนหนึ่งของส่วนประกาศทางกฎหมายของแอป

คุณดูข้อความแสดงแหล่งที่มาและใบอนุญาตโอเพนซอร์สที่จำเป็นได้ในไฟล์ ZIP ของ Navigation SDK สำหรับ Android ดังนี้

  • NOTICE.txt
  • LICENSES.txt