يوضِّح هذا الدليل التغييرات اللازمة لنقل البيانات إلى الإصدار 5.0.
آخر الأخبار عن Gradle و"المكوّن الإضافي لنظام Gradle المتوافق مع Android"
ترقية إصدارات Gradle و"المكوّن الإضافي لنظام Gradle المتوافق مع Android"
عليك أولاً ترقية إصدارَي Gradle وAndroid Gradle Plugin. وتتضمّن هذه الترقية توافقًا أفضل مع بعض تبعيات SDK (بما في ذلك Kotlin 1.9)، بالإضافة إلى بعض إصلاحات الأخطاء المُهمّة.
يتطلب هذا الإصدار الرئيسي لحزمة SDK هذا تبعيات الإصدار التالية لمشروع تطبيق Android الخاص بك:
- أن يكون إصدار Gradle متوافقًا مع الإصدار 7.5.0 على الأقل ولكن يجب ألا يزيد عن الإصدار 7.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
لتعديل إصدار المكوّن الإضافي لنظام 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 الاصطناعية إذا كنت قادمًا من Kotlin Gradle Plugin 1.6.X أو 1.7.X. يُرجى الرجوع إلى دليل نقل البيانات الرسمي للاطّلاع على مزيد من المعلومات.
الخطوة 2: ترقية kotlin-stdlib إلى الإصدار 1.9.0
عليك الترقية من الإصدار kotlin-stblib
إلى الإصدار 1.9.0 في ملف version.gradle لتطبيقك.
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.0"
}
احرص على إزالة أي إشارات إلى kotlin-stdlib-jdk7
أو kotlin-stdlib-jdk8
. تم دمج كلتا التبعيتين في
kotlin-stdlib
بدءًا من Kotlin
1.8.0.
إيقاف ميزة StateListener نهائيًا
تم إيقاف واجهة StatusListener
نهائيًا (ستتم إزالتها في الإصدار 6) لصالح DriverStatusListener
.
هناك 3 تغييرات بشكل أساسي:
- تغيير واجهة
implements
منStatusListener
إلىDriverStatusListener
- أضِف معلَمة
cause
Nullable
إلىupdateStatus
. - عليك الاتصال بـ "
DriverContextBuilder.setDriverStatusListener
" بدلاً من "setStatusListener
".
يشترك DriverStatusListener
في البنية نفسها مثل StatusListener
. الفرق الرئيسي بينهما هو أن DriverStatusListener.updateStatus()
يأخذ معلَمة إضافية باسم cause
. يوفر ذلك إحصاءات للمستخدمين حول سبب
التحديث بمستوى حالة الخطأ.
يمكنك عادةً استخدام cause
لاسترداد رمز الخطأ الذي يعرضه FleetEngine
لتحديثات الموقع الجغرافي غير الناجحة.
يوضِّح النموذج التالي كيفية تنفيذ 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.
}
}
});