คู่มือนี้อธิบายการเปลี่ยนแปลงที่จำเป็นในการย้ายข้อมูลไปยังเวอร์ชัน 5.0
การอัปเดต Gradle และปลั๊กอิน Android Gradle
อัปเกรดเวอร์ชัน Gradle และปลั๊กอิน Android Gradle
ก่อนอื่น ให้อัปเกรดเวอร์ชัน Gradle และปลั๊กอิน Android Gradle การอัปเกรดนี้ รวมถึงการทำงานร่วมกับทรัพยากร Dependency ของ SDK บางรายการได้ดีขึ้น (รวมถึง Kotlin 1.9) ตลอดจนการแก้ไขข้อบกพร่องร้ายแรงบางอย่าง
การเปิดตัว SDK เวอร์ชันหลักนี้ต้องมีทรัพยากร Dependency เวอร์ชันต่อไปนี้สำหรับโปรเจ็กต์แอปพลิเคชัน Android
- Gradle เวอร์ชันอย่างน้อย v7.5.0 แต่ไม่สูงกว่า v7.6.0
- ปลั๊กอิน Android Gradle (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
ในการอ้างอิงจากบล็อก buildscript ในกรณีที่ไม่มี
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
คุณต้องย้ายข้อมูลแอปพลิเคชันจาก Kotlin-synthetics ในกรณีที่ใช้ Kotlin Gradle Plugin 1.6.X หรือ 1.7.X ดูข้อมูลเพิ่มเติมได้ที่คำแนะนำในการย้ายข้อมูลอย่างเป็นทางการ
ขั้นตอนที่ 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 - เพิ่มพารามิเตอร์
Nullablecauseลงใน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.
}
}
});