คู่มือการย้ายข้อมูล 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 ในการอ้างอิงจากบล็อก 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 ส่วนต่อไปนี้

  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.
    }
  }
});