النقل إلى Android 8.0

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

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

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

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

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

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

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

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

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

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

وفي الغالب، يتطلّب اختبار التوافق مع نظام التشغيل 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 من واجهة برمجة التطبيقات)، يمكنك أيضًا الاطّلاع على التغييرات في سلوك الإصدار 8.0 من نظام التشغيل Android.

تحديث الإصدار المستهدف واستخدام ميزات 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 لإنشاء تطبيقك باستخدام Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) باستخدام أحدث إصدار من Android Studio (يُنصح باستخدام Android Studio 3.0 أو الإصدارات الأحدث). يتضمن الإصدار 3.0 من استوديو Android والإصدارات الأحدث أدوات لمساعدتك في استخدام ميزات Android 8.0، مثل الرموز التكيُّفية والخطوط القابلة للتنزيل. إذا لم تكن بحاجة إلى هذه الميزات حتى الآن، يمكنك استخدام الإصدار الثابت من Android Studio 2.3.3 لإنشاء تطبيقك باستخدام الإصدار Android 8.0 واستخدام واجهات برمجة التطبيقات الجديدة.

لإعداد أيّ من إصدارَي "استوديو Android"، يُرجى اتّباع الخطوات التالية:

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

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

تعديل إعدادات تصميمك

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

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'
    // }
}

إزالة مستلِمي البث من ملف البيان

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

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

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

اختبار تطبيق Android 8.0

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

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

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

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

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

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

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