คู่มือนี้จะอธิบายการเปลี่ยนแปลงที่จำเป็นในการย้ายข้อมูลไปยังเวอร์ชัน 5.0
ข้อมูลอัปเดตเกี่ยวกับปลั๊กอิน Gradle และ Android Gradle
อัปเกรดเวอร์ชันปลั๊กอิน Gradle และ Android Gradle
ก่อนอื่น ให้อัปเกรดเวอร์ชัน Gradle และ Android Gradle Plugin การอัปเกรดนี้ มีความเข้ากันได้ที่ดีขึ้นกับทรัพยากร Dependency ของ SDK บางรายการ (รวมถึง Kotlin 1.9) ตลอดจนการแก้ไขข้อบกพร่องที่สำคัญ
รุ่นหลักของ SDK นี้ต้องใช้ทรัพยากร Dependency ของเวอร์ชันต่อไปนี้สำหรับ โปรเจ็กต์แอปพลิเคชัน Android:
- Gradle เวอร์ชันอย่างน้อย v7.5.0 แต่ไม่สูงกว่า v7.6.0
- เวอร์ชัน Android Gradle Plugin (AGP) ในช่วง v7.4.x
คุณสามารถกําหนดเป้าหมายปลั๊กอินเวอร์ชันที่ใหม่กว่าได้ แต่คุณอาจเห็นคําเตือนการเลิกใช้งาน หรือฟีเจอร์ใหม่บางรายการอาจไม่ทํางาน
หากต้องการแก้ไขเวอร์ชัน Gradle ให้แก้ไขบรรทัดใน
ไฟล์ /gradle/wrapper/gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
หากต้องการแก้ไขเวอร์ชันปลั๊กอิน Android Gradle ให้แก้ไขไฟล์ build.gradle
ที่มีบล็อก buildscript
เช่น
buildscript {
repositories {
google()
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.1'
}
}
Java 7 ไปยังไลบรารี Java 8 สนับสนุนการย้ายข้อมูล
ขั้นตอนที่ 1 - เปิดใช้การสนับสนุนไลบรารี Java 8
เนื่องจากระดับ API ขั้นต่ำของ SDK คือ 23 และเวอร์ชัน AGP ที่จำเป็นคือเวอร์ชัน 7.4 ขึ้นไป จะแตกต่างจากเอกสารประกอบของแหล่งที่มาที่กล่าวถึงไปเล็กน้อย
buildscript {
repositories {
google()
mavenCentral()
jcenter()
maven {
url = uri("https://storage.googleapis.com/r8-releases/raw")
}
}
dependencies {
classpath 'com.android.tools:r8:8.0.46'
classpath 'com.android.tools.build:gradle:7.4.1'
}
}
android {
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
}
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.0.3'
}
ขั้นตอนที่ 2 - ย้ายข้อมูลจาก Proguard หรือ Dexguard ไปยัง R8
AGP v7.4 ขึ้นไปใช้ R8 เป็นเครื่องมือบีบอัด สร้างความสับสน และเพิ่มประสิทธิภาพเริ่มต้นสำหรับไบนารี คุณจึงไม่ต้องดำเนินการพิเศษในตอนนี้
หากย้ายข้อมูลโปรเจ็กต์จาก AGP 4.0 ขึ้นไป AGP อาจออกคำเตือนต่อไปนี้ เกี่ยวกับการลบไฟล์
- การใช้งาน
useProguard true
ในไฟล์build.gradle
- การใช้งาน
android.enableR8=false
ในไฟล์gradle.properties
การนำบรรทัดเหล่านี้ออกมักจะแก้ปัญหาดังกล่าวได้
การย้ายข้อมูล Kotlin 1.6 เป็น 1.9
ขั้นตอนที่ 1 - ย้ายข้อมูลไปยังปลั๊กอิน Kotlin Gradle 1.9.0
อัปเดตเวอร์ชันปลั๊กอิน Kotlin Gradle ในไฟล์ build.gradle ระดับโมดูลบนสุดของแอปพลิเคชัน อย่าลืมเพิ่ม org.jetbrains.kotlin:kotlin-gradle-plugin
ในทรัพยากร Dependency จากบล็อกบิลด์สคริปต์ในกรณีที่หายไป
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
คุณต้องย้ายข้อมูลแอปพลิเคชันจาก Kotlin-synthetics เผื่อไว้ในกรณีที่คุณต้องการ จากปลั๊กอิน Kotlin Gradle 1.6.X หรือ 1.7.X อ้างอิงการย้ายข้อมูลอย่างเป็นทางการ guideสำหรับ ข้อมูลเพิ่มเติม
ขั้นตอนที่ 2 - อัปเกรด kotlin-stdlib เป็น 1.9.0
อัปเกรด kotlin-stblib
เป็น 1.9.0 ในไฟล์ build.gradle ของแอปพลิเคชัน
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.0"
}
อย่าลืมนําการอ้างอิงถึง kotlin-stdlib-jdk7
หรือ
kotlin-stdlib-jdk8
เราได้รวม Dependency ทั้ง 2 รายการเข้าเป็น kotlin-stdlib
แล้วตั้งแต่ Kotlin 1.8.0
การเลิกใช้งาน StatusListener
อินเทอร์เฟซ StatusListener
เลิกใช้งานแล้ว (จะนำออกใน v6) และใช้ DriverStatusListener
แทน
การเปลี่ยนแปลงหลักๆ มี 3 ประการดังนี้
- เปลี่ยนอินเทอร์เฟซ
implements
จากStatusListener
เป็นDriverStatusListener
- เพิ่มพารามิเตอร์
Nullable
cause
ลงในupdateStatus
- โทรหา
DriverContextBuilder.setDriverStatusListener
แทนsetStatusListener
DriverStatusListener
มีโครงสร้างเดียวกับ StatusListener
ความแตกต่างหลักระหว่าง 2 รายการนี้คือ DriverStatusListener.updateStatus()
ใช้พารามิเตอร์เพิ่มเติมชื่อ cause
ซึ่งจะช่วยให้ผู้ใช้ทราบสาเหตุของการอัปเดตที่มีระดับสถานะข้อผิดพลาด
โดยทั่วไป คุณจะใช้ cause
เพื่อเรียกดูรหัสข้อผิดพลาดที่ Fleet Engine แสดงเมื่ออัปเดตตำแหน่งไม่สำเร็จ
ตัวอย่างต่อไปนี้แสดงวิธีติดตั้งใช้งาน StatusListener
class MyStatusListener implements StatusListener {
/** Called when background status is updated during actions such as location reporting. */
@Override
public void updateStatus(
StatusLevel statusLevel, StatusCode statusCode, String statusMsg) {
// Implementation
}
}
// Inject StatusListener into DriverContext.
DriverContextBuilder.setStatusListener(new MyStatusListener());
ตัวอย่างต่อไปนี้แสดงตัวอย่างการใช้งาน DriverStatusListener
class MyStatusListener implements DriverStatusListener {
/** Called when background status is updated during actions such as location reporting. */
@Override
public void updateStatus(
StatusLevel statusLevel, StatusCode statusCode, String statusMsg, @Nullable Throwable cause) {
// Existing implementation
if (cause != null && cause instanceof StatusRuntimeException) {
if (Status.NOT_FOUND.getCode().equals(cause.getStatus().getCode())) {
// NOT_FOUND gRPC exception thrown by Fleet Engine.
}
}
}
}
DriverContextBuilder.setStatusListener(new MyStatusListener());
ใช้ DriverStatusListener
เป็นอินเทอร์เฟซการทำงาน
DriverStatusListener
รองรับอินเทอร์เฟซฟังก์ชันของ Java เช่นเดียวกับรุ่นก่อน โดยมีตัวอย่างดังต่อไปนี้
DriverContextBuilder.setDriverStatusListener((statusLevel, statusCode, statusMsg, cause) -> {
if (cause != null && cause instanceof StatusRuntimeException) {
if (Status.NOT_FOUND.getCode().equals(cause.getStatus().getCode())) {
// NOT_FOUND gRPC exception thrown by Fleet Engine.
}
}
});