ตั้งค่าโปรเจ็กต์ Android Studio

หน้านี้จะอธิบายวิธีผสานรวม Navigation SDK เข้ากับโปรเจ็กต์การพัฒนา

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

Navigation SDK พร้อมใช้งานผ่านที่เก็บ Maven ของ Google คุณเพิ่ม SDK ลงในโปรเจ็กต์ได้โดยใช้การกำหนดค่า Gradle build.gradle หรือ Maven pom.xml

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

    Gradle

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

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

    Maven

    เพิ่มโค้ดต่อไปนี้ใน pom.xml

    <dependencies>
      ...
      <dependency>
        <groupId>com.google.android.libraries.navigation</groupId>
        <artifactId>navigation</artifactId>
        <version>VERSION_NUMBER</version>
      </dependency>
    </dependencies>
    
  2. หากคุณมีทรัพยากร Dependency ที่ใช้ Maps SDK คุณต้องยกเว้นทรัพยากร Dependency ในแต่ละทรัพยากร Dependency ที่ประกาศซึ่งอิงตาม Maps SDK

    Gradle

    เพิ่มโค้ดต่อไปนี้ใน 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>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 ให้สำเร็จได้

อัปเดตพร็อพเพอร์ตี้ในพื้นที่

  • ในโฟลเดอร์สคริปต์ Gradle ให้เปิดไฟล์ local.properties แล้วเพิ่ม android.useDeprecatedNdk=true

อัปเดตสคริปต์บิลด์ Gradle

  • เปิดไฟล์ build.gradle (Module:app) และใช้หลักเกณฑ์ต่อไปนี้ เพื่ออัปเดตการตั้งค่าให้เป็นไปตามข้อกำหนดสำหรับ Navigation SDK และพิจารณาตั้งค่า ตัวเลือกการเพิ่มประสิทธิภาพด้วย

    การตั้งค่าที่จำเป็นสำหรับ Navigation SDK

    1. ตั้งค่า minSdkVersion เป็น 24 ขึ้นไป
    2. ตั้งค่า targetSdkVersion เป็น 36 ขึ้นไป
    3. เพิ่มdexOptionsการตั้งค่าที่เพิ่มjavaMaxHeapSize
    4. ตั้งค่าตำแหน่งสำหรับไลบรารีเพิ่มเติม
    5. เพิ่ม repositories และ dependencies สำหรับ Navigation SDK
    6. แทนที่หมายเลขเวอร์ชันใน Dependencies ด้วยเวอร์ชันล่าสุด ที่พร้อมใช้งาน

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

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

    เพิ่มกระบวนการ Desugaring สำหรับรองรับ Java8

    • หากคุณสร้างแอปโดยใช้ปลั๊กอิน Android Gradle 4.0.0 ขึ้นไป ปลั๊กอินจะขยายการรองรับการใช้ API ภาษา Java 8 จำนวนหนึ่ง ดูข้อมูลเพิ่มเติมได้ที่การรองรับ การยกเลิกการเพิ่มน้ำตาลใน Java 8 ดูตัวอย่างข้อมูลโค้ดสคริปต์บิลด์ด้านล่างสำหรับวิธี คอมไพล์และตัวเลือกทรัพยากร Dependency
    • ใช้ Gradle, ปลั๊กอิน Android Gradle (AGP) และไลบรารี Desugar เวอร์ชันที่ตรงกับเวอร์ชัน Navigation SDK ดูตาราง ต่อไปนี้
    • ต้องเปิดใช้ไลบรารี Desugar สำหรับโมดูล app และโมดูลใดก็ตาม ที่ขึ้นต่อกันกับ Navigation SDK โดยตรง

ตารางต่อไปนี้แสดงเวอร์ชันของไลบรารี Gradle, AGP และ Desugar ที่จำเป็นสำหรับ Navigation SDK แต่ละเวอร์ชัน

เวอร์ชัน Navigation SDK เวอร์ชัน Gradle เวอร์ชัน AGP ไลบรารี Desugar
8.0.0 ขึ้นไป 9.1.0 9.0.1 com.android.tools:desugar_jdk_libs_nio:2.1.5
7.7.0 ถึง 7.9.0 8.13 8.13.2 com.android.tools:desugar_jdk_libs_nio:2.1.5
7.3.0 ถึง 7.6.0 8.11.1 8.10.0 com.android.tools:desugar_jdk_libs_nio:2.0.3

ด้านล่างนี้คือตัวอย่างสคริปต์การสร้าง Gradle สำหรับแอปพลิเคชัน ดูชุดการอัปเดตของทรัพยากร Dependency ในแอปตัวอย่าง เนื่องจากเวอร์ชัน Navigation SDK ที่คุณใช้อาจล้าสมัยกว่าหรือใหม่กว่าเอกสารประกอบนี้เล็กน้อย

apply plugin: 'com.android.application'

ext {
    navSdk = "__NAVSDK_VERSION__"
}

android {
    compileSdk 33
    buildToolsVersion='28.0.3'

    defaultConfig {
        applicationId "<your id>"
        // Navigation SDK supports SDK 23 and later.
        minSdkVersion 23
        targetSdkVersion 34
        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 {
        // Flag to enable support for the new language APIs
        coreLibraryDesugaringEnabled true
        // Sets Java compatibility to Java 8
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

repositories {
    // Navigation SDK for Android and other libraries are hosted on Google's Maven repository.
    google()
}

dependencies {
    // Include the Google Navigation SDK.
    // Note: remember to exclude Google Play service Maps SDK from your transitive
    // dependencies to avoid duplicate copies of the Google Maps SDK.
    api "com.google.android.libraries.navigation:navigation:${navSdk}"

    // Declare other dependencies for your app here.

    annotationProcessor "androidx.annotation:annotation:1.7.0"
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.1.5'
}

เพิ่มคีย์ API ลงในแอป

ส่วนนี้อธิบายวิธีจัดเก็บคีย์ API เพื่อให้แอปอ้างอิงได้อย่างปลอดภัย คุณไม่ควรเช็คอินคีย์ API ลงในระบบควบคุมเวอร์ชัน ดังนั้นเราขอแนะนำให้จัดเก็บไว้ในไฟล์ secrets.properties ซึ่งอยู่ในไดเรกทอรีรากของโปรเจ็กต์ ดูข้อมูลเพิ่มเติมเกี่ยวกับไฟล์ secrets.properties ได้ที่ ไฟล์พร็อพเพอร์ตี้ Gradle

หากต้องการเพิ่มประสิทธิภาพงานนี้ เราขอแนะนำให้ใช้ปลั๊กอินข้อมูลลับ Gradle สำหรับ Android

วิธีติดตั้งปลั๊กอินข้อมูลลับ Gradle สำหรับ Android และจัดเก็บคีย์ API

  1. ใน Android Studio ให้เปิดไฟล์ build.gradle ระดับรูท แล้วเพิ่มโค้ดต่อไปนี้ลงในองค์ประกอบ dependencies ภายใต้ buildscript

    ดึงดูด

    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

    ดึงดูด

    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 คีย์ที่มีชื่อนี้ใช้เพื่อตรวจสอบสิทธิ์กับ API ที่อิงตาม Google Maps หลายรายการในแพลตฟอร์ม 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

หากคุณเป็นลูกค้า Mobility หรือ Fleet Engine Deliveries

หากคุณเป็นลูกค้า Mobility หรือ Fleet Engine Deliveries โปรดดูข้อมูลเกี่ยวกับการเรียกเก็บเงินในเอกสารประกอบของ Mobility ดูข้อมูลเพิ่มเติมเกี่ยวกับ การบันทึกธุรกรรมได้ที่ ตั้งค่าการเรียกเก็บเงิน บันทึกธุรกรรมที่เรียกเก็บเงินได้ การรายงาน และ บันทึกธุรกรรมที่เรียกเก็บเงินได้ (Android)

ทรัพยากร Dependency ที่กำหนดเอง (ไม่ใช่ Gradle/Maven)

หากระบบบิลด์ไม่แก้ปัญหาการอ้างอิงแบบทรานซิทีฟ (เช่น Bazel) หรือหากผสานรวม AAR ด้วยตนเอง คุณต้องเพิ่มการอ้างอิงเหล่านี้ลงในโปรเจ็กต์ Gradle และ Maven จะแก้ไขโดยอัตโนมัติ

  • androidx.datastore:datastore-core
  • androidx.datastore:datastore-guava
  • com.google.guava:listenablefuture
  • androidx.concurrent:concurrent-futures