คู่มือนี้อธิบายการเปลี่ยนแปลงที่จำเป็นในการย้ายข้อมูลไปยังเวอร์ชัน 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
ลงในทรัพยากร Dependency จากบล็อก Buildscript แล้วเผื่อไว้ในกรณีที่ขาดหายไป
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
คุณต้องย้ายข้อมูลแอปพลิเคชันจาก Kotlin-synthetics ในกรณีที่คุณมาจากปลั๊กอิน Kotlin Gradle 1.6.X หรือ 1.7.X ดูข้อมูลเพิ่มเติมได้ในคู่มือการย้ายข้อมูลอย่างเป็นทางการ
ขั้นตอนที่ 2 - อัปเกรด kotlin-stdlib เป็น 1.9.0
อัปเกรด kotlin-stblib
เป็น 1.9.0 ในไฟล์ application create.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
แล้ว (จะนำออกในเวอร์ชัน 6) เพื่อใช้ 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.
}
}
});