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

คู่มือนี้จะอธิบายการเปลี่ยนแปลงที่จำเป็นในการย้ายข้อมูลไปยังเวอร์ชัน 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

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 ในโมดูลระดับบนสุดของแอปพลิเคชัน ไฟล์ create.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 ในไฟล์ 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 เลิกใช้งานแล้ว (จะนำออกใน v6) เพื่อประโยชน์ ของ DriverStatusListener

การเปลี่ยนแปลงหลักๆ มีอยู่ 3 อย่างดังนี้

  1. เปลี่ยนอินเทอร์เฟซ implements จาก StatusListener เป็น DriverStatusListener
  2. เพิ่มพารามิเตอร์ Nullable cause ไปยัง updateStatus
  3. โทรหา DriverContextBuilder.setDriverStatusListener แทน setStatusListener

DriverStatusListener ใช้โครงสร้างเดียวกันกับ StatusListener องค์ประกอบหลัก ความแตกต่างระหว่าง DriverStatusListener.updateStatus() คือ พารามิเตอร์เพิ่มเติมชื่อ cause ซึ่งทำให้ผู้ใช้มีข้อมูลเชิงลึกเกี่ยวกับสาเหตุของ อัปเดตด้วยระดับสถานะข้อผิดพลาด

โดยทั่วไปแล้ว คุณจะใช้ cause เพื่อเรียกดูรหัสข้อผิดพลาดที่ Fleet แสดง เครื่องมืออัปเดตตำแหน่งที่ล้มเหลว

ตัวอย่างต่อไปนี้จะแสดงวิธีใช้ 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.
    }
  }
});