يقدّم الإصدار 9 من نظام التشغيل Android (المستوى 28 من واجهة برمجة التطبيقات) عددًا من التغييرات على نظام Android.
تنطبق التغييرات التالية في السلوك حصريًا على التطبيقات التي تستهدف المستخدمين
المستوى 28 من واجهة برمجة التطبيقات أو المستويات الأعلى التطبيقات التي تضبط targetSdkVersion
على المستوى 28 من واجهة برمجة التطبيقات أو
الأعلى تعديلاً
تطبيقاتها لدعم هذه السلوكيات بشكل صحيح، حيثما ينطبق ذلك على التطبيق.
لإجراء تغييرات على جميع التطبيقات التي تعمل بنظام التشغيل Android 9، بغض النظر عن واجهة برمجة التطبيقات والمستوى الذي يستهدفه، ورؤية التغييرات في السلوك: جميع التطبيقات
الخدمات التي تعمل في المقدّمة
يجب أن تطلب التطبيقات التي تستهدف الإصدار 9 من نظام التشغيل Android أو الإصدارات الأحدث وتستخدم خدمات تعمل في المقدّمة
FOREGROUND_SERVICE
إذن. هذا إذن عادي،
يمنحها النظام تلقائيًا للتطبيق الذي قدّم الطلب.
إذا حاول أحد التطبيقات التي تستهدف الإصدار 9 من نظام التشغيل Android أو الإصدارات الأحدث إنشاء خدمة تعمل في المقدّمة بدون
يطلب منك FOREGROUND_SERVICE
،
يطرح النظام الرمز SecurityException
.
التغييرات على الخصوصية
إذا كان تطبيقك يستهدف Android 9، عليك الالتزام بما يلي: وضع التغييرات السلوكية في الاعتبار. هذه التعديلات التي تم إجراؤها على المعلومات التسلسلية للجهاز ونظام أسماء النطاقات تحسين خصوصية المستخدم.
إيقاف الرقم التسلسلي للإصدار نهائيًا
في نظام Android 9، Build.SERIAL
هو
يتم ضبطها دائمًا على "UNKNOWN"
لحماية المستخدمين الخصوصية.
إذا كان تطبيقك يحتاج إلى الوصول إلى الرقم التسلسلي للجهاز، يجب:
يمكنك طلب
READ_PHONE_STATE
إذن، ثم تتصل
getSerial()
خصوصية نظام أسماء النطاقات
يجب أن تلتزم التطبيقات التي تستهدف الإصدار 9 من نظام التشغيل Android بواجهات برمجة التطبيقات الخاصة لنظام أسماء النطاقات. وعلى وجه الخصوص، أن يضمن برنامج تعيين النظام تشغيل نظام DNS-over-TLS يستخدم عميل نظام أسماء النطاقات (DNS) المُدمج نظام أسماء النطاقات (DNS) المشفر لاسم المضيف ذاته مثل من النظام، أو يتم إيقافه لصالح برنامج تعيين النظام.
تغييرات أمان إطار العمل
يتضمّن Android 9 العديد من التغييرات في السلوك التي من شأنها تحسين لأمان تطبيقك، ولكن لا تسري هذه التغييرات إلا إذا كان تطبيقك يستهدف مستوى واجهة برمجة التطبيقات. 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
الصف الآن معلومات حول الشبكات الافتراضية الخاصة إلى التطبيقات. يسهّل هذا التغيير كثيرًا
لتمكين التطبيقات من الاستماع إلى أحداث الاتصال دون الحاجة إلى المزج بين
طلبات غير متزامنة واستخدام واجهات برمجة تطبيقات محدودة. بالإضافة إلى ذلك، يعني ذلك أن
يعمل نقل المعلومات على النحو المتوقع عند توصيل جهاز بأجهزة متعددة
شبكات Wi-Fi أو شبكات جوّال متعددة في آنٍ واحد
إيقاف عميل Apache HTTP
مع الإصدار Android 6.0، أزلنا الدعم لعميل Apache HTTP. بدءًا من نظام التشغيل 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 للملف: معرّفات الموارد المنتظمة (URI)
قد تستنتج إصدارات Android الأقدم من إصدار Android 9 أنواع MIME من الملف.
المحتوى. بالنسبة إلى التطبيقات التي تعمل بالإصدار 9 من نظام التشغيل Android (المستوى 28 من واجهة برمجة التطبيقات)، يجب أن تستخدم التطبيقات
بامتداد الملف الصحيح عند تحميل file:
من معرفات الموارد المنتظمة (URI) في
WebView:
يمكن أن يكون استخدام محتوى الملف لاستنتاج أنواع MIME مصدرًا لأخطاء الأمان، ولا تسمح المتصفحات الحديثة بذلك بشكل عام.
إذا كان الملف يحتوي على امتداد ملف معروف مثل .html
،
.txt
أو .js
أو .css
ستحدِّد الإضافة نوع MIME.
إذا لم يكن هناك امتداد في الملف أو كان له اسم غير معروف، سيكون نوع MIME عاديًا
النص.
على سبيل المثال، سيتم عرض معرّف الموارد المنتظم (URI) مثل file:///sdcard/test.html
على أنّه
HTML، ولكن سيتم عرض معرف الموارد المنتظم (URI) مثل 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، يتم إخفاء الإشعارات الواردة من التطبيقات المعلَّقة حتى يتم استئناف التطبيق.