หน้านี้จะอธิบายวิธีผสานรวม Navigation SDK เข้ากับโปรเจ็กต์การพัฒนา
เพิ่ม Navigation SDK ลงในโปรเจ็กต์
Navigation SDK พร้อมใช้งานผ่านที่เก็บ Maven ของ Google
คุณสามารถเพิ่ม SDK ลงในโปรเจ็กต์โดยใช้การกำหนดค่า Gradle build.gradle หรือ Maven pom.xml ก็ได้
เพิ่มทรัพยากร 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>หากคุณมีทรัพยากร 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 Scripts ให้เปิดไฟล์
local.propertiesและเพิ่มandroid.useDeprecatedNdk=true
อัปเดตสคริปต์บิลด์ Gradle
เปิดไฟล์
build.gradle (Module:app)และใช้หลักเกณฑ์ต่อไปนี้เพื่ออัปเดตการตั้งค่าให้เป็นไปตามข้อกำหนดสำหรับ Navigation SDK และพิจารณาตั้งค่าตัวเลือกการเพิ่มประสิทธิภาพด้วยการตั้งค่าที่จำเป็นสำหรับ Navigation SDK
- ตั้งค่า
minSdkVersionเป็น 24 ขึ้นไป - ตั้งค่า
targetSdkVersionเป็น 36 ขึ้นไป - เพิ่มการตั้งค่า
dexOptionsที่เพิ่มjavaMaxHeapSize - กำหนดตำแหน่งสำหรับไลบรารีเพิ่มเติม
- เพิ่ม
repositoriesและdependenciesสำหรับ Navigation SDK - แทนที่หมายเลขเวอร์ชันในทรัพยากร Dependency ด้วยเวอร์ชันล่าสุดที่มีอยู่
การตั้งค่าที่ไม่บังคับเพื่อลดเวลาในการสร้าง
- เปิดใช้การลดขนาดโค้ดและการลดขนาดทรัพยากรโดยใช้ R8/ProGuard เพื่อนำโค้ดและทรัพยากรที่ไม่ได้ใช้งานออกจากทรัพยากร Dependency หากขั้นตอน R8/ProGuard ใช้เวลาในการรันนานเกินไป ให้พิจารณาเปิดใช้ Multidex สำหรับงานพัฒนา
- ลดจำนวนคำแปลภาษาที่รวมอยู่ในบิลด์: ตั้งค่า
resConfigsสำหรับภาษาเดียวในระหว่างการพัฒนา สำหรับบิลด์สุดท้าย ให้ตั้งค่าresConfigsสำหรับภาษาที่คุณใช้จริง โดยค่าเริ่มต้น Gradle จะรวมสตริงทรัพยากรสำหรับทุกภาษาที่ Navigation SDK รองรับ
เพิ่มกระบวนการ Desugaring สำหรับการรองรับ Java8
- หากคุณสร้างแอปโดยใช้ปลั๊กอิน Android Gradle 4.0.0 ขึ้นไป ปลั๊กอินจะขยายการรองรับการใช้ API ภาษา Java 8 จำนวนมาก ดูข้อมูลเพิ่มเติมได้ที่การรองรับกระบวนการ Desugaring ของ Java 8 ดูตัวอย่างข้อมูลโค้ดสคริปต์บิลด์ด้านล่างเพื่อดูตัวเลือกการคอมไพล์และการขึ้นต่อกัน
- ใช้เวอร์ชัน 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 ในไดเรกทอรีรากของโปรเจ็กต์และยกเว้นไฟล์นั้นจากการควบคุมเวอร์ชัน ดูข้อมูลเพิ่มเติมเกี่ยวกับไฟล์พร็อพเพอร์ตี้ Gradle ได้ที่ไฟล์พร็อพเพอร์ตี้ Gradle
เราขอแนะนำให้ใช้ปลั๊กอินข้อมูลลับ Gradle สำหรับ Android เพื่อให้งานนี้ง่ายขึ้น
วิธีติดตั้งปลั๊กอินข้อมูลลับ Gradle สำหรับ Android และจัดเก็บคีย์ API
-
ใน Android Studio ให้เปิดไฟล์
build.gradle.ktsหรือbuild.gradleระดับบนสุด แล้วเพิ่มโค้ดต่อไปนี้ลงในบล็อกpluginsKotlin
plugins { // ... id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") version "2.0.1" apply false }
ดึงดูด
plugins { // ... id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' version '2.0.1' apply false }
-
เปิดไฟล์
build.gradle.ktsหรือbuild.gradleระดับโมดูล แล้วเพิ่มโค้ดต่อไปนี้ลงในองค์ประกอบpluginsKotlin
plugins { id("com.android.application") // ... id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") }
ดึงดูด
plugins { id 'com.android.application' // ... id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' }
- หากใช้ Android Studio ให้ซิงค์โปรเจ็กต์กับ Gradle
-
เปิดไฟล์
secrets.propertiesในไดเรกทอรีระดับบนสุด แล้วเพิ่มโค้ดต่อไปนี้ แทนที่YOUR_API_KEYด้วยคีย์ API ของคุณ อย่าลืมเพิ่มsecrets.propertiesลงในไฟล์.gitignore(หรือยกเว้นจากระบบควบคุมเวอร์ชัน) เพื่อไม่ให้คุณตรวจสอบคีย์ API ในการควบคุมเวอร์ชันMAPS_API_KEY=YOUR_API_KEY
-
สร้างไฟล์
local.defaults.propertiesในไดเรกทอรีระดับบนสุด ซึ่งเป็นโฟลเดอร์เดียวกับไฟล์secrets.propertiesแล้วเพิ่มโค้ดต่อไปนี้MAPS_API_KEY=DEFAULT_API_KEY
วัตถุประสงค์ของไฟล์นี้คือการระบุตำแหน่งสำรองสำหรับคีย์ API หากไม่พบไฟล์
secrets.propertiesเพื่อไม่ให้บิลด์ล้มเหลว กรณีนี้อาจเกิดขึ้นหากคุณโคลนแอปจากระบบควบคุมเวอร์ชันที่ละเว้นsecrets.propertiesและคุณยังไม่ได้สร้างไฟล์secrets.propertiesในเครื่องเพื่อระบุคีย์ API -
คุณสามารถเพิ่มคีย์ 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 แบบเป็นโปรแกรมโดยทำดังนี้
ปลั๊กอิน Secrets Gradle จะทำให้คีย์พร้อมใช้งานในคลาส
BuildConfigในการเริ่มต้นแอป (เช่น ในเมธอดApplication.onCreate()) ให้เรียกใช้เมธอดดังนี้Kotlin
- เพิ่มคำสั่งนำเข้าต่อไปนี้
import com.google.android.libraries.navigation.NavigationApi
- เพิ่มโค้ดต่อไปนี้ในเมธอด
Application.onCreate()NavigationApi.setApiKey(BuildConfig.MAPS_API_KEY)
Java
- เพิ่มคำสั่งนำเข้าต่อไปนี้
import com.google.android.libraries.navigation.NavigationApi;
- เพิ่มโค้ดต่อไปนี้ในเมธอด
Application.onCreate()NavigationApi.setApiKey(BuildConfig.MAPS_API_KEY);
หมายเหตุ: โปรดคำนึงถึงสิ่งต่อไปนี้เมื่อใช้setApiKey()- ระบุคีย์ API ที่ไม่ใช่ค่า Null และไม่ว่างเปล่า
- เรียกใช้
setApiKey()เพียงครั้งเดียวตลอดอายุการใช้งานของแอปพลิเคชัน เมธอดจะแสดงIllegalStateExceptionหากมีการเรียกใช้มากกว่า 1 ครั้ง - เรียกใช้
setApiKey()ก่อนเริ่มต้นคอมโพเนนต์ Navigation SDK อื่นๆ เช่นNavigator - คีย์ที่คุณระบุด้วยวิธีนี้จะลบล้างคีย์ API ใน
AndroidManifest.xml - ใช้ Navigation SDK เวอร์ชัน 7.6 ขึ้นไป
- เพิ่มคำสั่งนำเข้าต่อไปนี้
- เพิ่มคีย์ API ลงใน
-
ใน Android Studio ให้เปิดไฟล์
build.gradle.ktsหรือbuild.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 root directory (the same folder as the root 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" }
ดึงดูด
secrets { // To add your Maps API key to this project: // 1. If the secrets.properties file does not exist, create it in the root directory (the same folder as the root 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" }
รวมการระบุแหล่งที่มาที่จำเป็นในแอป
หากใช้ Navigation SDK สำหรับ Android ในแอป คุณต้องใส่ข้อความแสดงแหล่งที่มาและใบอนุญาตโอเพนซอร์สเป็นส่วนหนึ่งของส่วนประกาศทางกฎหมายของแอป
คุณดูข้อความแสดงแหล่งที่มาและใบอนุญาตโอเพนซอร์สที่จำเป็นได้ในไฟล์ ZIP ของ Navigation SDK สำหรับ Android ดังนี้
NOTICE.txtLICENSES.txt
หากคุณเป็นลูกค้า Mobility หรือ Fleet Engine Deliveries
หากคุณเป็นลูกค้า Mobility หรือ Fleet Engine Deliveries โปรดดูข้อมูลเกี่ยวกับการเรียกเก็บเงินในเอกสารประกอบของ Mobility ดูข้อมูลเพิ่มเติมเกี่ยวกับการบันทึกธุรกรรมได้ที่ตั้งค่าการเรียกเก็บเงิน, บันทึกธุรกรรมที่เรียกเก็บเงินได้, การรายงาน และบันทึกธุรกรรมที่เรียกเก็บเงินได้ (Android)
ทรัพยากร Dependency ที่ต้องจัดการด้วยตนเอง (ไม่ใช่ Gradle/Maven)
หากระบบบิลด์ไม่แก้ไขทรัพยากร Dependency แบบสกรรมกริยา (เช่น Bazel) หรือหากคุณผสานรวม AAR ด้วยตนเอง คุณต้องเพิ่มทรัพยากร Dependency เหล่านี้ลงในโปรเจ็กต์ Gradle และ Maven จะแก้ไขปัญหาเหล่านี้โดยอัตโนมัติ
androidx.datastore:datastore-coreandroidx.datastore:datastore-guavacom.google.guava:listenablefutureandroidx.concurrent:concurrent-futures