نقل البيانات إلى Android 8.0

يقدّم الإصدار 8.0 من Android (المستوى 26 من واجهة برمجة التطبيقات) تغييرات في السلوك بالإضافة إلى ميزات لواجهات برمجة التطبيقات (API) يمكنك الاستفادة منها في تطبيقاتك. يقدّم لك هذا المستند نظرة عامة على خطوات نقل تطبيقاتك إلى Android 8.0 على مرحلتَين رئيسيتَين:

  1. ضمان التوافق مع Android 8.0

    تأكَّد من أنّ تطبيقك يعمل بشكل كامل على الإصدار الجديد من المنصة. في هذه المرحلة، لا تستخدم واجهات برمجة تطبيقات جديدة أو تغيّر targetSdkVersion لتطبيقك، ولكن قد يكون من الضروري إجراء تغييرات طفيفة.

  2. تحديث الإصدار المستهدَف واستخدام ميزات Android 8.0

    عندما تكون مستعدًا للاستفادة من الميزات الجديدة التي توفّرها المنصة، عليك تحديث targetSdkVersion إلى 26 والتأكّد من أنّ التطبيق لا يزال يعمل على النحو المتوقّع، ثم البدء في استخدام واجهات برمجة التطبيقات الجديدة.

التأكّد من التوافق مع Android 8.0

والهدف من ذلك هو التأكّد من أنّ تطبيقك الحالي يعمل على النحو المعتاد على الإصدار 8.0 من نظام التشغيل Android (المستوى 26 لواجهة برمجة التطبيقات). قد تؤثر بعض التغييرات في النظام الأساسي في طريقة سلوك تطبيقك، لذلك قد يكون من الضروري إجراء بعض التعديلات، ولكن ليس عليك استخدام واجهات برمجة تطبيقات جديدة أو تغيير targetSdkVersion.

ضمان التوافق مع Android 8.0 خطوة بخطوة

تجهيز جهاز يعمل بالإصدار 8.0 من نظام التشغيل Android

إجراء اختبار التوافق

في معظم الأحيان، يتطلّب اختبار التوافق مع Android 8.0 (المستوى 26 لواجهة برمجة التطبيقات) النوع نفسه من الاختبارات التي تجريها عند التحضير لإصدار تطبيقك. وهذا الوقت مناسب لمراجعة إرشادات جودة التطبيقات الأساسية وأفضل الممارسات للاختبار.

ومع ذلك، هناك جانب آخر من الاختبار: يُجري نظام التشغيل Android 8.0 تغييرات على منصّة Android التي يمكن أن تؤثّر في سلوك تطبيقك أو تؤدي إلى إيقافه تمامًا، حتى إذا لم تغيّر targetSdkVersion. لهذا السبب، من المهم مراجعة التغييرات الرئيسية في الجدول 1، واختبار أي إصلاحات تقوم بتنفيذها لاستيعاب التغييرات.

الجدول 1: التغييرات الرئيسية التي تؤثر في جميع التطبيقات التي تعمل على أجهزة Android 8.0

تغيير ملخّص مرجع إضافي
إشعارات رصد الموقع الجغرافي في الخلفية بمعدل أقل إذا كان تطبيقك يتلقّى تحديثات الموقع الجغرافي من خدمة تُشغَّل في الخلفية، سيقل معدّل التحديثات على Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) مقارنةً بالإصدارات القديمة من Android. وعلى وجه التحديد، لا يمكن لخدمة تعمل في الخلفية تلقّي إشعارات بشأن الموقع الجغرافي أكثر من بضع مرات في الساعة. ومع ذلك، عندما يكون تطبيقك في المقدّمة، لا يتغيّر معدّل تعديلات الموقع الجغرافي. حدود استخدام الموقع الجغرافي في الخلفية
net.hostname جهاز لم يعُد متوافقًا يؤدي طلب البحث عن سمة النظام net.hostname إلى ظهور نتيجة فارغة. بدون تحديد نمط
استثناء جديد من send(DatagramPacket) تعرض الطريقة send(DatagramPacket) العلامة SocketException في حال تعذّر تنفيذ طريقة connect(InetAddress, int) التي تم تنفيذها سابقًا. التغييرات في السلوك: الاتصال بالشبكة وHTTP(S)
قيمة NullPointerException المناسبة من AbstractCollection طريقة AbstractCollection.removeAll(null) و AbstractCollection.retainAll(null) يُعرِضان الآن دائمًا سوى NullPointerException ، ولم يكن يتم عرض NullPointerException في السابق عندما تكون المجموعة فارغة. يجعل هذا التغيير السلوك متوافقًا مع المستندات. التغييرات في السلوك: معالجة المجموعة
NullPointerException المناسب من Currency.getDisplayName(null) يؤدي الاتصال بالرقم Currency.getDisplayName(null) إلى ظهور NullPointerException. التغييرات في السلوك: اللغات والنشر على مستوى العالم

للحصول على قائمة أكثر شمولاً بالتغييرات في السلوك في Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات)، يمكنك أيضًا الاطّلاع على التغييرات في السلوك في Android 8.0.

تحديث الإصدار المستهدَف واستخدام ميزات Android 8.0

يوضّح هذا القسم كيفية تفعيل التوافق الكامل مع Android 8.0 (مستوى واجهة برمجة التطبيقات 26) من خلال تحديث targetSdkVersion إلى 26 وإضافة ميزات جديدة متوفّرة في Android 8.0.

بالإضافة إلى تقديم واجهات برمجة تطبيقات جديدة، يقدّم Android 8.0 بعض التغيُّرات في السلوك عند تعديل targetSdkVersion إلى 26. بما أنّ بعض التغييرات في السلوك قد تتطلّب تغييرات في الرموز البرمجية لتجنُّب حدوث أعطال، عليك أولاً معرفة كيفية تأثير تطبيقك عند تغيير targetSdkVersion من خلال مراجعة جميع التغييرات في السلوك للتطبيقات التي تستهدف الإصدار 8.0 من نظام التشغيل Android.

ملاحظة: إنّ الخطوات الموضّحة أعلاه لضمان التوافق مع النظام الأساسي هي شرط أساسي لاستهداف تطبيقك بالإصدار 8.0 من نظام التشغيل Android، لذا احرص على إكمال هذه الخطوات أولاً.

تحديث الإصدار المستهدَف واستخدام ميزات Android 8.0 خطوة بخطوة

الحصول على حزمة تطوير البرامج (SDK) لنظام التشغيل Android 8.0

يمكنك الحصول على حِزم SDK لإنشاء تطبيقك باستخدام الإصدار 8.0 من Android (المستوى 26 لواجهة برمجة التطبيقات) باستخدام أحدث إصدار من Android Studio (ننصح باستخدام الإصدار 3.0 من Android Studio أو الإصدارات الأحدث). يتضمّن الإصدار 3.0 من "استوديو Android" والإصدارات الأحدث أدوات لمساعدتك في استخدام ميزات Android 8.0، مثل الرموز المتكيّفة و الخطوط القابلة للتنزيل. إذا لم تكن بحاجة إلى هذه الميزات بعد، يمكنك استخدام الإصدار الثابت من Android Studio 2.3.3 لإنشاء تطبيقك باستخدام Android 8.0 واستخدام واجهات برمجة التطبيقات الجديدة.

لإعداد أي إصدار من Android Studio، اتّبِع الخطوات التالية:

  1. افتح "استوديو Android" وافتَح "مدير حِزم تطوير البرامج (SDK)" بالنقر على الأدوات > مدير حِزم تطوير البرامج (SDK).
  2. في علامة التبويب منصّات حزمة تطوير البرامج (SDK)، ضَع علامة في المربّع بجانب عرض تفاصيل الحزمة. في ما يلي معاينة Android 8.0، يُرجى التحقّق مما يلي:
    • نظام Android SDK ‏26
    • صورة نظام Google APIs Intel x86 Atom (مطلوب فقط للمحاكي)
  3. انتقِل إلى علامة التبويب أدوات حزمة تطوير البرامج (SDK) وتحقّق من كل العناصر التي تتوفّر لها تحديثات (انقر على مربع الاختيار الذي يعرض شرطة ). من المفترض أن يتضمّن ذلك أحدث إصدارات العناصر التالية المطلوبة:
    • الإصدار 26.0.0 من أدوات إنشاء حزمة تطوير البرامج (SDK) لنظام التشغيل Android
    • مجموعة أدوات نظام التشغيل لـ Android SDK 26.0.0
    • إصدار 26.0.0 من Android Emulator
  4. انقر على حسنًا لتثبيت جميع حِزم SDK المحدّدة.

أصبحت الآن جاهزًا لبدء الإنشاء باستخدام Android 8.0.

تعديل إعدادات الإصدار

حدِّث compileSdkVersion وtargetSdkVersion وإصدار مكتبة الدعم إلى أحدث النُسخ السابقة المتاحة، على سبيل المثال:

android {
  compileSdkVersion 26

  defaultConfig {
    targetSdkVersion 26
  }
  ...
}

dependencies {
  compile 'com.android.support:appcompat-v7:26.0.0'
}

// REQUIRED: Google's new Maven repo is required for the latest
// support library that is compatible with Android 8.0
repositories {
    google()

    // If you're using a version of Gradle lower than 4.1, you must instead use:
    // maven {
    //     url 'https://maven.google.com'
    // }
}

إزالة تطبيقات البث من ملف البيان

بما أنّ الإصدار 8.0 من Android (المستوى 26 لواجهة برمجة التطبيقات) يفرض قيودًا جديدة على تطبيقات تلقّي البث، عليك إزالة أي تطبيقات تلقّي بث تم تسجيلها لطلبات بث ضمنية. وتجدر الإشارة إلى أنّ ترك هذه الإعدادات في مكانها لن يؤدي إلى إيقاف تطبيقك في وقت الإنشاء أو وقت التشغيل، ولكن ليس لها أي تأثير في حال تشغيل التطبيق على نظام التشغيل Android 8.0.

إنّ عمليات البث التي يمكن لتطبيقك فقط الردّ عليها، مثل البث الصريح و عمليات البث المُرسَلة إلى اسم حزمة تطبيقك على وجه التحديد، ستظل تعمل بالطريقة نفسها على الإصدار 8.0 من نظام التشغيل Android.

هناك استثناءات لهذا القيد الجديد. للحصول على قائمة بالبث التلقائي الذي لا يزال يعمل في التطبيقات التي تستهدف الإصدار 8.0 من Android، يُرجى الاطّلاع على استثناءات البث التلقائي.

اختبار تطبيقك المتوافق مع Android 8.0

بعد إكمال الاستعدادات أعلاه، يمكنك إنشاء تطبيقك ثم اختباره بشكل إضافي للتأكّد من أنّه يعمل بشكل صحيح عند استهداف الإصدار 8.0 من نظام التشغيل Android (المستوى 26 من واجهة برمجة التطبيقات). حان الوقت لمراجعة إرشادات جودة التطبيقات الأساسية وأفضل الممارسات المتعلقة بالاختبار.

عند إنشاء تطبيقك مع ضبط targetSdkVersion على 26، هناك تغييرات معيّنة على المنصة يجب أن تكون على دراية بها. يمكن أن تؤثّر بعض هذه التغييرات بشكل كبير في سلوك تطبيقك أو قد تؤدي إلى إيقافه تمامًا، حتى إذا لم يتم استخدام ميزات جديدة في الإصدار 8.0 من Android.

يقدّم الجدول 2 قائمة بهذه التغييرات مع روابط لمزيد من المعلومات.

الجدول 2: التغييرات الرئيسية التي تؤثّر في التطبيقات عند ضبط targetSdkVersion على 26

تغيير ملخّص مزيد من المراجع
الخصوصية لا يتيح نظام التشغيل Android 8.0 (المستوى 26 لواجهة برمجة التطبيقات) استخدام خصائص النظام net.dns1 أو net.dns2 أو net.dns3 أو net.dns4. تغييرات السلوك: الخصوصية
فرض الشرائح القابلة للكتابة والتنفيذ بالنسبة إلى المكتبات المجمّعة من رموز برمجية أصلية، يفرض نظام التشغيل Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) القاعدة التالية: يجب ألا تكون البيانات قابلة للتنفيذ، ويجب ألا تكون الرموز البرمجية قابلة للكتابة. التغييرات في السلوك: المكتبات الأصلية
التحقّق من صحة عنوان ELF والقسم يتحقق الرابط الديناميكي من المزيد من القيم في عنوان ELF وعناوين الأقسام، ويخفق إذا كانت غير صالحة. التغييرات في السلوك: المكتبات الأصلية
الإشعارات على التطبيقات التي تستهدف الإصدار 8.0 من حزمة تطوير البرامج (SDK) لنظام التشغيل Android (المستوى 26 لواجهة برمجة التطبيقات) استخدام قناة إشعارات واحدة أو أكثر لنشر الإشعارات للمستخدمين. نظرة عامة على واجهة برمجة التطبيقات: الإشعارات
طريقة List.sort() قد لا تعود عمليات تنفيذ هذه الطريقة تستدعي Collections.sort()، أو سيُلقي تطبيقك استثناءً بسبب حصول ذاكرة التخزين المؤقت على عدد كبير جدًا من الطلبات. التغييرات في السلوك: التعامل مع المجموعة
طريقة Collections.sort() في عمليات تنفيذ القوائم، يُعرِض Collections.sort() الآن خطأ ConcurrentModificationException. السلوك التغييرات: معالجة المجموعة

للحصول على قائمة أكثر شمولاً بالتغييرات في السلوك في Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات)، اطّلِع على التغييرات في السلوك في Android 8.0.

لاستكشاف الميزات الجديدة وواجهات برمجة التطبيقات المتاحة مع Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات)، اطّلِع على ميزات Android 8.0 وواجهات برمجة التطبيقات.