คู่มือการย้ายข้อมูล Android Driver SDK 5.0

คู่มือนี้อธิบายการเปลี่ยนแปลงที่จำเป็นสำหรับการย้ายข้อมูลเป็นเวอร์ชัน 5.0

การอัปเดต Gradle และปลั๊กอิน Android Gradle

อัปเกรด Gradle และปลั๊กอิน Android Gradle

ขั้นแรก ให้อัปเกรด Gradle และปลั๊กอิน Android Gradle การอัปเกรดนี้รวมถึงการทำงานร่วมกันได้ดียิ่งขึ้นกับทรัพยากร Dependency ของ SDK บางรายการ (รวมถึง Kotlin 1.9) ตลอดจนการแก้ไขข้อบกพร่องที่สำคัญบางอย่าง

การเผยแพร่ SDK เวอร์ชันหลักนี้กำหนดให้โปรเจ็กต์แอปพลิเคชัน Android ต้องมีทรัพยากร Dependency เวอร์ชันต่อไปนี้

  • 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

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 ในไฟล์ 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 อย่างดังนี้

  1. เปลี่ยนอินเทอร์เฟซ implements จาก StatusListener เป็น DriverStatusListener
  2. เพิ่มพารามิเตอร์ Nullable cause ลงใน updateStatus
  3. เรียก 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.
    }
  }
});