تغييرات السلوك: التطبيقات التي تستهدف المستوى 28 من واجهة برمجة التطبيقات وما فوق

يقدّم الإصدار 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، يتم إخفاء الإشعارات الواردة من التطبيقات المعلَّقة حتى يتم استئناف التطبيق.