يُدخل الإصدار Android 9 (المستوى 28 من واجهة برمجة التطبيقات) عددًا من التغييرات على نظام Android.
تنطبق تغييرات السلوك التالية حصريًا على التطبيقات التي تستهدف
المستوى 28 من واجهة برمجة التطبيقات أو المستويات الأحدث. بالنسبة إلى التطبيقات التي تضبط targetSdkVersion
على المستوى 28 لواجهة برمجة التطبيقات أو
أعلى، يجب تعديل
تطبيقاتها لتتوافق مع هذه السلوكيات بشكلٍ سليم، حيثما ينطبق ذلك على التطبيق.
لإجراء تغييرات على جميع التطبيقات التي تعمل بنظام التشغيل Android 9، بغض النظر عن واجهة برمجة التطبيقات والمستوى الذي يستهدفه، ورؤية التغييرات في السلوك: جميع التطبيقات
الخدمات التي تعمل في المقدّمة
يجب أن تطلب التطبيقات التي تستهدف الإصدار 9 من نظام التشغيل Android أو الإصدارات الأحدث وتستخدم خدمات تعمل في المقدّمة
FOREGROUND_SERVICE
إذن. هذا إذن عادي،
يمنحها النظام تلقائيًا للتطبيق الذي قدّم الطلب.
إذا حاول تطبيق يستهدف الإصدار 9 من نظام التشغيل Android أو الإصدارات الأحدث إنشاء خدمة تعمل في المقدّمة بدون
طلب FOREGROUND_SERVICE
،
يُرسِل النظام خطأ SecurityException
.
تغييرات الخصوصية
إذا كان تطبيقك يستهدف الإصدار 9 من نظام التشغيل Android، يجب مراعاة التغييرات التالية في السلوك. هذه التعديلات التي تم إجراؤها على المعلومات التسلسلية للجهاز ونظام أسماء النطاقات تحسين خصوصية المستخدم.
إيقاف الرقم التسلسلي نهائيًا في الإصدارات المستقبلية
في نظام Android 9، Build.SERIAL
هو
يتم ضبطها دائمًا على "UNKNOWN"
لحماية المستخدمين الخصوصية.
إذا كان تطبيقك يحتاج إلى الوصول إلى الرقم التسلسلي لجهاز الجهاز، عليك بدلاً من ذلك طلب الإذن
READ_PHONE_STATE
، ثم الاتصال بالرقم
getSerial()
.
خصوصية نظام أسماء النطاقات
يجب أن تلتزم التطبيقات التي تستهدف الإصدار 9 من Android بوجوه برمجة تطبيقات نظام أسماء النطاقات الخاص. وعلى وجه الخصوص، ينبغي أن تضمن التطبيقات أنّ أي برنامج نظام أسماء نطاقات مُدمج يستخدم إما نظام أسماء نطاقات مشفَّرًا مع اسم المضيف نفسه في النظام، أو يتم إيقافه لصالح برنامج تعيين النظام في حال كان برنامج تعيين النظام يستخدم بروتوكول "معالجة نظام أسماء النطاقات عبر بروتوكول TLS".
التغييرات في أمان إطار العمل
يتضمّن الإصدار 9 من نظام التشغيل Android العديد من التغييرات في السلوك التي تحسِّن أمان تطبيقك، ولكن لا يتم تطبيق هذه التغييرات إلا إذا كان تطبيقك يستهدف المستوى 28 من واجهة برمجة التطبيقات أو مستوى أعلى.
بروتوكول TLS للشبكة مفعَّل تلقائيًا
إذا كان تطبيقك يستهدف الإصدار 9 من نظام التشغيل Android أو الإصدارات الأحدث، تعرض الطريقة
isCleartextTrafficPermitted()
false
تلقائيًا. إذا كان تطبيقك بحاجة إلى تفعيل النص الواضح
على نطاقات محددة، يجب إعداد cleartextTrafficPermitted
بشكل صريح على true
لتلك النطاقات في بنية Network Security لتطبيقك
الإعدادات:
أدراج البيانات المستندة إلى الويب مفصولة حسب العملية
لتحسين ثبات التطبيقات وسلامة البيانات في نظام Android 9، لا يمكن للتطبيقات
مشاركة بيانات WebView
واحدة
دليل بين
عمليات متعددة. عادةً ما تخزِّن أدلة البيانات هذه ملفات تعريف الارتباط وذاكرات التخزين المؤقت لبروتوكول HTTP وغيرها من ذاكرات التخزين الدائمة
والمؤقتة المرتبطة بتصفّح الويب.
في معظم الحالات، يجب أن يستخدم تطبيقك فئات من حزمة
android.webkit
، مثل
WebView
و
CookieManager
، في عملية واحدة فقط
. على سبيل المثال، يجب عليك نقل جميع
كائنات Activity
التي تستخدم WebView
في نفس العملية. يمكنك فرض قاعدة "عملية واحدة فقط" بشكل أكثر صرامة
من خلال استدعاء
disableWebView()
في
عمليات تطبيقك الأخرى. تمنع هذه المكالمة إعداد WebView
في تلك العمليات الأخرى عن طريق الخطأ، حتى لو تم استدعاؤها من جدول بيانات
المكتبة.
إذا كان تطبيقك يستخدم نُسخًا من
WebView
في أكثر من عملية واحدة،
يجب تخصيص إضافة فريدة لدليل البيانات لكل عملية باستخدام الأسلوب
WebView.setDataDirectorySuffix()
قبل استخدام نسخة معيّنة من WebView
في تلك العملية. هذه الطريقة
تضع بيانات الويب من كل عملية في الدليل الخاص بها ضمن بيانات تطبيقك.
الدليل.
نطاقات SELinux المخصّصة لكل تطبيق
لا يمكن للتطبيقات التي تستهدف الإصدار 9 من نظام التشغيل Android أو الإصدارات الأحدث مشاركة البيانات مع تطبيقات أخرى باستخدام أذونات Unix المتاحة للجميع. يحسن هذا التغيير سلامة وضع الحماية لتطبيقات Android، وخاصةً شرط أن يكون التطبيق يمكن الوصول إلى البيانات الخاصة بواسطة هذا التطبيق فقط.
لمشاركة الملفات مع تطبيقات أخرى، استخدِم محتوى Google Cloud Platform.
تغييرات في إمكانية الاتصال
احتساب بيانات الاتصال والمسارات المتعددة
في التطبيقات التي تستهدف الإصدار 9 من Android أو الإصدارات الأحدث، يحتسب النظام
حركة بيانات الشبكة على الشبكات
التي ليست هي القيمة التلقائية الحالية، مثل حركة بيانات الخلية أثناء تشغيل الجهاز
Wi-Fi - وتوفر الطرق في
NetworkStatsManager
الفئة لطلب البحث عن حركة البيانات تلك.
وعلى وجه الخصوص،
getMultipathPreference()
الآن قيمة بناءً على حركة مرور الشبكة المذكورة أعلاه. تبدأ بـ
في Android 9، تعرض الطريقة true
لبيانات الخلية، ولكن عندما تتجاوز مقدارًا معينًا من
تراكم عدد الزيارات خلال يوم، فإنه يبدأ في عرض false
. التطبيقات التي تعمل على
على Android 9 استدعاء الطريقة وتنفيذ هذا التلميح.
تُرسِل فئة ConnectivityManager.NetworkCallback
الآن معلومات عن شبكات VPN إلى التطبيقات. يسهّل هذا التغيير على التطبيقات رصد أحداث الاتصال بدون الحاجة إلى الجمع بين طلبات البيانات المتزامنة وغير المتزامنة واستخدام واجهات برمجة تطبيقات محدودة. بالإضافة إلى ذلك، يعني ذلك أنّ نقل العميل يعمل على النحو المتوقّع عندما يكون الجهاز متصلاً بالعديد من
شبكات Wi-Fi أو شبكات الجوّال المتعددة في الوقت نفسه.
إيقاف عميل Apache HTTP
في الإصدار 6.0 من نظام التشغيل Android، تمت إزالة إمكانية استخدام برنامج Apache HTTP Client. بدءًا من Android 9، تتم إزالة هذه المكتبة من bootclasspath ولا تتوفّر للتطبيقات تلقائيًا.
لمواصلة استخدام برنامج Apache HTTP، فإنّ التطبيقات التي تستهدف الإصدار 9 من Android والإصدارات الأحدث
يمكنهم إضافة ما يلي إلى AndroidManifest.xml
:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
كبديل لاستخدام مكتبة Apache لوقت التشغيل، يمكن للتطبيقات تجميع
إصدارها الخاص من مكتبة org.apache.http
في حِزم APK. في حال إجراء ذلك،
يجب إعادة تجميع المكتبة (باستخدام أداة مثل
Jar Jar) لتجنُّب مشاكل التوافق بين الفئات
والفئات المقدَّمة في وقت التشغيل.
تغييرات واجهة المستخدم
عرض التركيز
لم يعُد من الممكن التركيز على طرق العرض التي لا تحتوي على مساحة (سواء كان عرض أو ارتفاع 0).
بالإضافة إلى ذلك، لم تعد الأنشطة تحدد ضمنيًا التركيز الأولي في وضع اللمس. بدلاً من ذلك، يعود الأمر إليك لطلب التركيز الأولي صراحةً، إذا كان ذلك مطلوبًا.
معالجة القيمة السداسية العشرية لألوان RGBA في CSS
على التطبيقات التي تستهدف الإصدار 9 من نظام Android أو الإصدارات الأحدث تفعيل المسودة. المستوى 4 من وحدة ألوان CSS سلوك التعامل مع ألوان CSS المكونة من 4 و8 أرقام.
المستوى 4 من وحدة ألوان CSS تم دعمها في Chrome منذ الإصدار 52، ولكن توقِف WebView هذه الميزة حاليًا. لأنه تبيّن أن تطبيقات Android الحالية تحتوي على ألوان سداسية عشرية 32 بت في ترتيب Android (ARGB)، ما قد يؤدي إلى أخطاء في العرض.
على سبيل المثال، اللون #80ff8080
المعروض حاليًا باللون
محتوى WebView معتم
أحمر فاتح (#ff8080
) للتطبيقات التي تستهدف المستوى 27 من واجهة برمجة التطبيقات أو المستويات الأدنى المتصدر
المكون (الذي سيتم تفسيره بواسطة Android على أنه مكون ألفا)
تم تجاهلها حاليًا. إذا كان التطبيق يستهدف المستوى 28 من واجهة برمجة التطبيقات أو أعلى، يتم فسْر #80ff8080
على أنّه أخضر فاتح شفاف بنسبة %50 (#80ff80
).
رصد نوع MIME للملف: عناوين URL
قد تستنتج إصدارات Android الأقدم من إصدار Android 9 أنواع MIME من الملف.
المحتوى. بالنسبة إلى التطبيقات التي تعمل بالإصدار 9 من نظام التشغيل Android (المستوى 28 من واجهة برمجة التطبيقات)، يجب أن تستخدم التطبيقات
بامتداد الملف الصحيح عند تحميل file:
من معرفات الموارد المنتظمة (URI) في
WebView:
يمكن أن يكون استخدام محتوى الملف لاستنتاج أنواع MIME مصدرًا لأخطاء الأمان، ولا تسمح المتصفحات الحديثة بذلك بشكل عام.
إذا كان الملف يحتوي على امتداد ملف معروف، مثل .html
أو
.txt
أو .js
أو .css
، سيتم تحديد نوع MIME حسب هذا الامتداد.
إذا لم يكن هناك امتداد في الملف أو كان له اسم غير معروف، سيكون نوع MIME عاديًا
النص.
على سبيل المثال، سيتم عرض معرّف الموارد المنتظم file:///sdcard/test.html
بتنسيق HTML، ولكن سيتم عرض معرّف الموارد المنتظم file:///sdcard/test
كنص عادي، حتى إذا كان الملف يحتوي على بيانات HTML.
عنصر تمرير المستند
يعالج نظام التشغيل Android 9 بشكلٍ صحيح الحالة التي يكون فيها عنصر الجذر للمستند هو عنصر التمرير. في الإصدارات الأقدم، كان يتم ضبط موضع الانتقال للأعلى أو للأسفل في عنصر الجسم، وكان عنصر الجذر لا يحتوي على أي قيم انتقال للأعلى أو للأسفل. يتيح Android 9 سلوكًا متوافقًا مع المعايير، حيث يكون عنصر التمرير هو الجذر العنصر.
بالإضافة إلى ذلك، سيختلف سلوك الوصول مباشرةً إلى document.body.scrollTop
أو document.body.scrollLeft
أو
document.documentElement.scrollTop
أو document.documentElement.scrollLeft
حسب حزمة SDK المستهدَفة. للوصول إلى شريط التمرير، يمكنك الانتقال إلى إطار العرض.
، استخدم document.scrollingElement
، إذا كان ذلك متاحًا.
الإشعارات من التطبيقات المعلَّقة
قبل الإصدار 9 من نظام Android، تم إلغاء الإشعارات الواردة من التطبيقات المعلَّقة. بدءًا من نظام التشغيل Android 9، يتم إخفاء الإشعارات الواردة من التطبيقات المعلَّقة حتى يتم استئناف التطبيق.