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

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

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

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

ก่อนอื่น ให้อัปเกรดเวอร์ชัน Gradle และปลั๊กอิน Android Gradle การอัปเกรดนี้ช่วยเพิ่มความเข้ากันได้กับ 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 ในไฟล์ .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.
    }
  }
});