מדריך להעברה של Android Driver SDK 5.0

במדריך הזה מתוארים השינויים הנדרשים למעבר לגרסה 5.0.

עדכונים לפלאגין של Gradle ו-Android Gradle

שדרוג גרסאות של Gradle ופלאגין של Android Gradle

קודם כול, צריך לשדרג את הגרסאות של Gradle ופלאגין של Android Gradle. השדרוג הזה כולל תאימות טובה יותר ליחסי תלות מסוימים של SDK (כולל Kotlin 1.9), וגם כמה תיקוני באגים קריטיים.

לגרסה הראשית של ה-SDK הזו נדרשות יחסי התלות הבאים של הגרסה פרויקט אפליקציה ל-Android:

  • גרסה של Gradle מגרסה 7.5.0 ואילך, אבל לא גבוהה יותר מ-v7.6.0.
  • גרסת Android Gradle Plugin (AGP) בטווח של גרסה 7.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 בגרסה 7.4 ואילך משתמשים ב-R8 בתור כלי ברירת המחדל לכיווץ, לערפול ולאופטימיזציה הקובץ הבינארי, כך שלא נדרשת פעולה מיוחדת בשלב זה.

אם הפרויקט הועבר מ-AGP 4.0+, AGP עשויה להציג את האזהרות הבאות על הסרת קבצים:

  • שימוש ב-useProguard true בקובץ אחד (build.gradle)
  • שימוש ב-android.enableR8=false בקובץ אחד (gradle.properties)

הסרת השורות האלה בדרך כלל פותרת את הבעיות.

העברת Kotlin מגרסה 1.6 ל-1.9

שלב 1 – מעבר ל-Kotlin Gradle Plugin 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. שני יחסי התלות אוחדו kotlin-stdlib החל בקוטלין 1.8.0.

הוצאה משימוש של StatusListener

הממשק של StatusListener הוצא משימוש (כלומר יוסר בגרסה 6), לטובת מתוך 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.
    }
  }
});