يوضّح هذا الدليل التغييرات اللازمة لنقل البيانات إلى الإصدار 5.0.
تحديثات Gradle و"المكوّن الإضافي لنظام Gradle المتوافق مع Android"
ترقية إصدارَي Gradle والمكوّن الإضافي لنظام Gradle المتوافق مع Android
أولاً، عليك ترقية إصدارَي Gradle و"المكوّن الإضافي لنظام Gradle المتوافق مع Android". تتضمّن هذه الترقية توافقًا أفضل مع بعض التبعيات لحزمة تطوير البرامج (SDK) (بما في ذلك Kotlin 1.9)، بالإضافة إلى بعض إصلاحات الأخطاء الحرجة.
يتطلّب الإصدار الرئيسي من حزمة تطوير البرامج (SDK) هذه الإصدارات التالية من حِزم SDK كملحقات لمشروع تطبيق Android:
- إصدار Gradle 7.5.0 على الأقل ولكن ليس أعلى من 7.6.0
- إصدار المكوّن الإضافي لنظام Gradle المتوافق مع Android (AGP) في النطاق من v7.4.x
يمكنك استهداف إصدار أحدث من المكوّنات الإضافية، ولكن قد تتلقّى تحذيرات بشأن إيقافها نهائيًا، أو قد لا تعمل بعض الميزات الجديدة.
لتعديل إصدار Gradle، عليك تعديل السطر في ملف
/gradle/wrapper/gradle-wrapper.properties
الخاص بمشروعك.
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
لتعديل إصدار "المكوّن الإضافي لنظام Gradle المتوافق مع Android"، عدِّل ملف 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
بما أنّ الحد الأدنى لمستوى واجهة برمجة التطبيقات في حزمة 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
يستخدم الإصدار 7.4 من AGP والإصدارات الأحدث أداة R8 كأداة التصغير والتشويه والتحسين التلقائية للملف الثنائي، لذلك ليس عليك اتّخاذ أي إجراء خاص في هذه المرحلة.
في حال نقل المشروع من الإصدار 4.0 من AGP أو الإصدارات الأحدث، قد يُصدر AGP التحذيرات التالية بشأن عمليات إزالة الملفات:
- استخدام
useProguard true
في ملفbuild.gradle
- استخدام
android.enableR8=false
في ملفgradle.properties
وتؤدي إزالة هذه الأسطر عادةً إلى حلّ هذه المشاكل.
نقل البيانات من Kotlin 1.6 إلى 1.9
الخطوة 1: نقل البيانات إلى الإصدار 1.9.0 من مكوّن Kotlin Gradle الإضافي
عدِّل إصدار مكوّن Kotlin Gradle الإضافي في ملف
build.gradle الخاص بالوحدة ذات المستوى الأعلى في تطبيقك. تأكَّد من إضافة org.jetbrains.kotlin:kotlin-gradle-plugin
في التبعيات من كتلة buildscript في حال عدم توفّرها.
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
يجب نقل بيانات تطبيقك من أدوات Kotlin الاصطناعيّة في حال كنت تستخدم الإصدار 1.6.X أو 1.7.X من Kotlin Gradle Plugin. يُرجى الرجوع إلى دليل نقل البيانات الرسمي للحصول على مزيد من المعلومات.
الخطوة 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
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.
}
}
});