במדריך הזה מתוארים השינויים הנדרשים למעבר לגרסה 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 Plugin, משנים את הקובץ 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
ב-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 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 Gradle Plugin 1.6.X או 1.7.X, עליכם להעביר את האפליקציה מ-Kotlin-synthetics. מידע נוסף זמין במדריך הרשמי להעברת נתונים.
שלב 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
החל מגרסה Kotlin 1.8.0.
הוצאה משימוש של StatusListener
ממשק StatusListener
הוצא משימוש (והוא יוסר בגרסה 6) לטובת DriverStatusListener
.
יש 3 שינויים עיקריים:
- משנים את ממשק
implements
מ-StatusListener
ל-DriverStatusListener
. - צריך להוסיף פרמטר
Nullable
cause
לפרמטרupdateStatus
. - קוראים אל
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.
}
}
});