ميزات Android 9 وواجهات برمجة التطبيقات

يقدّم Android 9 (المستوى 28 من واجهة برمجة التطبيقات) ميزات وإمكانات جديدة ورائعة للمستخدمين والمطوّرين. يوضّح هذا المستند الميزات الجديدة للمطوّرين.

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

تحديد الموضع الداخلي باستخدام ميزة "المراسلة النصية في الوقت الفعلي" بشبكة Wi-Fi

تتيح واجهات برمجة التطبيقات الجديدة لميزة "المراسلة النصية في الوقت الفعلي" (RTT) تحديد الموضع الداخلي في تطبيقاتك.

يضيف Android 9 توافقًا مع النظام الأساسي لبروتوكول IEEE 802.11-2016 لشبكة Wi-Fi، والمعروف أيضًا باسم وقت مستديرة لاستقبال إشارة Wi-Fi (RTT) للسماح لك بالاستفادة من الموضع الداخلي في تطبيقاتك.

على الأجهزة التي تعمل بنظام التشغيل Android 9 ومتوافقة مع الأجهزة، يمكن للتطبيقات استخدام واجهات برمجة تطبيقات ميزة "المراسلة النصية في الوقت الفعلي" لقياس المسافة إلى نقاط وصول شبكة Wi-Fi القريبة المتوافقة مع ميزة "المراسلة النصية في الوقت الفعلي". يجب تفعيل خدمات الموقع الجغرافي على الجهاز وتفعيل ميزة "البحث عن شبكات Wi-Fi" (ضمن الإعدادات > الموقع الجغرافي)، كما يجب أن يحصل تطبيقك على إذن ACCESS_FINE_LOCATION. ولا يحتاج الجهاز إلى الاتصال بنقاط الوصول لاستخدام ميزة "المراسلة النصية في الوقت الفعلي". وللحفاظ على الخصوصية، لا يتمكن سوى الهاتف فقط من تحديد المسافة إلى نقطة الوصول، بينما لا تحتوي نقاط الوصول على هذه المعلومات.

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

وبهذه الدقة، يمكنك إنشاء تجارب جديدة، مثل التنقل داخل المبنى والخدمات الدقيقة المستندة إلى الموقع الجغرافي، مثل التحكّم الصوتي بوضوح (على سبيل المثال، "تشغيل هذا الضوء") والمعلومات المستندة إلى الموقع الجغرافي (مثل "هل تتوفّر عروض خاصة لهذا المنتج؟").

يمكنك الاطّلاع على واجهة برمجة تطبيقات WiFi RTT قيد الاستخدام في تطبيق Android WifiRttScan التجريبي.

لمزيد من المعلومات، يُرجى الاطّلاع على الموقع الجغرافي لشبكة Wi-Fi: يتراوح بين ميزة "المراسلة النصية في الوقت الفعلي".

دعم صورة مقطوعة للشاشة

شاشة خيارات المطوّرين تعرض أحجام مقطوعات مختلفة

اختبار صورة مقطوعة للشاشة باستخدام المحاكي

يوفّر Android 9 دعمًا لأحدث الشاشات الشاملة التي تحتوي على قطع عرض للكاميرات ومكبرات الصوت. تتيح لك فئة DisplayCutout معرفة شكل وموضع الأقسام غير الوظيفية التي يجب عدم عرض المحتوى فيها. لتحديد وجود هذه المناطق المقطّعة وموضعها، استخدِم طريقة getDisplayCutout().

تسمح السمة الجديدة لتنسيق النوافذ، layoutInDisplayCutoutMode، لتطبيقك بوضع محتواه حول القواطع القطعية في الجهاز. يمكنك تعيين هذه السمة إلى إحدى القيم التالية:

يمكنك محاكاة قطع شاشة على أي جهاز أو محاكي يعمل بنظام التشغيل Android 9 على النحو التالي:

  1. فعِّل خيارات المطوّرين.
  2. في شاشة خيارات المطوّرين، انتقِل إلى القسم رسم واختَر محاكاة شاشة بها صورة مقطوعة.
  3. اختَر حجم القطع.

الإشعارات

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

إشعارات المراسلة

نمط مراسلة مع إرفاق صورة

إشعار المراسلة

نمط مراسلة يضم ردودًا ومحادثات

للحصول على رمز نموذجي يستخدم الإشعارات، بما في ذلك ميزات نظام التشغيل Android 9، يُرجى الاطّلاع على نموذج الأشخاص.

تجربة مراسلة محسَّنة

بدءًا من نظام التشغيل Android 7.0 (المستوى 24 من واجهة برمجة التطبيقات)، يمكنك إضافة إجراء للرد على الرسائل أو إدخال نص آخر مباشرةً من الإشعار. يحسّن Android 9 هذه الميزة من خلال التحسينات التالية:

  • دعم مبسّط للمشاركين في المحادثة: يتم استخدام فئة Person لتحديد الأشخاص المشاركين في المحادثة، بما في ذلك الصور الرمزية ومعرّفات الموارد المنتظمة (URI). تستفيد الآن العديد من واجهات برمجة التطبيقات الأخرى، مثل addMessage()، من الفئة Person بدلاً من CharSequence. تتوافق فئة Person أيضًا مع نمط تصميم "أداة الإنشاء".

  • إتاحة الصور: يعرض Android 9 الآن الصور في "إشعارات المراسلة" على الهواتف. يمكنك استخدام الرمز setData() في الرسالة لعرض صورة. يوضّح مقتطف الرمز التالي طريقة إنشاء Person ورسالة تحتوي على صورة.

Kotlin

// Create new Person.
val sender = Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build()
// Create image message.
val message = Message("Picture", time, sender)
        .setData("image/", imageUri)
val style = Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message)

Java

// Create new Person.
Person sender = new Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build();
// Create image message.
Message message = new Message("Picture", time, sender)
        .setData("image/", imageUri);
Notification.MessagingStyle style = new Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message);
  • حفظ الردود كمسوَّدات: يمكن لتطبيقك استرداد EXTRA_REMOTE_INPUT_DRAFT التي أرسلها النظام عندما يغلق مستخدم إشعار المراسلة بدون قصد. يمكنك استخدام هذا الإجراء الإضافي لتعبئة الحقول النصية مسبقًا في التطبيق حتى يتمكّن المستخدمون من إنهاء ردّهم.

  • تحديد ما إذا كانت المحادثة محادثة جماعية: يمكنك استخدام علامة setGroupConversation() لتحديد المحادثة عن قصد كمحادثة جماعية أو غير جماعية.

  • اضبط الإجراء الدلالي لهدف معيّن: تتيح لك الطريقة setSemanticAction() إعطاء معنى دلالي للإجراء، مثل "وضع علامة مقروءة" و"حذف" و"ردّ" وما إلى ذلك.

  • الرد الذكي: يتوافق Android 9 مع الردود المقترَحة نفسها المتوفرة في تطبيق المراسلة. يمكنك استخدام RemoteInput.setChoices() لتقديم مجموعة من الردود العادية للمستخدم.

إعدادات القناة وأحداث البث المباشر وميزة "عدم الإزعاج"

قدّم الإصدار Android 8.0 ميزة قنوات الإشعارات التي تتيح لك إنشاء قناة مخصّصة للمستخدم لكل نوع من أنواع الإشعارات التي تريد عرضها. يبسّط Android 9 إعدادات قناة الإشعارات من خلال التغييرات التالية:

  • حظر مجموعات القنوات: يمكن للمستخدمين الآن حظر مجموعات كاملة من القنوات ضمن إعدادات الإشعارات في أحد التطبيقات. يمكنك استخدام طريقة isBlocked() لتحديد الحالات التي يتم فيها حظر مجموعة، وبالتالي عدم إرسال أي إشعارات للقنوات في تلك المجموعة.

    بالإضافة إلى ذلك، يمكن لتطبيقك طلب البحث عن إعدادات مجموعة القنوات الحالية باستخدام طريقة getNotificationChannelGroup() الجديدة.

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

  • تتضمّن NotificationManager.Policy ثلاث فئات جديدة من فئات "عدم الإزعاج":

  • لدى NotificationManager.Policy أيضًا سبعة ثوابت جديدة لميزة "عدم الإزعاج" يمكنك استخدامها لمنع المقاطعة البصرية:

دعم كاميرات متعدّدة وتحديثات الكاميرا

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

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

في نظام التشغيل Android 9، تتوافق واجهة برمجة التطبيقات للكاميرات المتعددة مع الكاميرات أحادية اللون للأجهزة التي تتوفر فيها إمكانية FULL أو LIMITED. يتم الحصول على إخراج أحادي اللون باستخدام التنسيق YUV_420_888 بالتنسيق Y الذي يمثّل تدرّج الرمادي، وU (Cb) بالقيمة 128 وV (Cr) مثل 128.

ويتيح نظام التشغيل Android 9 أيضًا إمكانية استخدام كاميرات USB/UVC الخارجية على الأجهزة المتوافقة.

برنامج ImageDecoder للعناصر القابلة للرسم والصور النقطية

يقدّم نظام التشغيل Android 9 فئة ImageDecoder التي توفّر أسلوبًا حديثًا لفك ترميز الصور. استخدِم هذه الفئة بدلاً من واجهات برمجة التطبيقات BitmapFactory وBitmapFactory.Options.

يتيح لك ImageDecoder إنشاء Drawable أو Bitmap من مخزن بايت مؤقت أو ملف أو معرّف موارد منتظم (URI). لفك ترميز صورة، يجب أولاً استدعاء الإجراء createSource() مع مصدر الصورة المشفّرة. بعد ذلك، يمكنك الاتصال بالرقم decodeDrawable() أو decodeBitmap() من خلال تمرير الكائن ImageDecoder.Source لإنشاء Drawable أو Bitmap. لتغيير الإعدادات التلقائية، مرِّر OnHeaderDecodedListener إلى decodeDrawable() أو decodeBitmap(). يستدعي ImageDecoder onHeaderDecoded() بعرض الصورة وارتفاعها التلقائيين، فور معرفتها. إذا كانت الصورة المشفرة عبارة عن ملف GIF متحرك أو WebP، يعرض decodeDrawable() الرمز Drawable الذي يمثّل مثيلاً للفئة AnimatedImageDrawable.

تتوفر طرق مختلفة يمكنك استخدامها لضبط خصائص الصور:

  • لتغيير حجم الصورة التي تم فك ترميزها إلى حجم محدَّد، مرِّر الأبعاد المستهدَفة إلى setTargetSize(). يمكنك أيضًا تغيير حجم الصور باستخدام حجم عينة. مرِّر حجم العيّنة مباشرةً إلى setTargetSampleSize().
  • لاقتصاص صورة ضمن نطاق الصورة التي تم تغيير حجمها، اطلب الرمز setCrop().
  • لإنشاء صورة نقطية قابلة للتغيير، أدخِل true في setMutableRequired().

تتيح لك ImageDecoder أيضًا إضافة تأثيرات مخصصة ومعقدة إلى صورة مثل الزوايا المستديرة أو أقنعة الدوائر. استخدِم الترميز setPostProcessor() مع مثيل من الفئة PostProcessor لتنفيذ أيّ أوامر رسم تريدها.

Animation

يقدّم نظام التشغيل Android 9 فئة AnimatedImageDrawable لرسم وعرض الصور المتحركة بتنسيقَي GIF وWebP. تعمل AnimatedImageDrawable بشكل مشابه لآلية AnimatedVectorDrawable لأنّ سلسلة العرض تؤدّي إلى نقل الرسوم المتحركة في AnimatedImageDrawable. وتستخدم سلسلة العرض أيضًا سلسلة تعليمات التنفيذ لفك ترميزها، بحيث لا يتداخل فك الترميز مع العمليات الأخرى في سلسلة العرض. تتيح طريقة التنفيذ هذه لتطبيقك عرض صورة متحركة بدون إدارة تحديثاته أو التداخل مع أحداث أخرى في سلسلة محادثات واجهة المستخدم الخاصة بالتطبيق.

يمكن فك ترميز AnimatedImageDrawable باستخدام مثيل ImageDecoder. يعرض مقتطف الرمز التالي كيفية استخدام ImageDecoder لفك ترميز AnimatedImageDrawable:

Kotlin

@Throws(IOException::class)
private fun decodeImage() {
    val decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(resources, R.drawable.my_drawable))

    // Prior to start(), the first frame is displayed.
    (decodedAnimation as? AnimatedImageDrawable)?.start()
}

Java

private void decodeImage() throws IOException {
    Drawable decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(getResources(), R.drawable.my_drawable));

    if (decodedAnimation instanceof AnimatedImageDrawable) {
        // Prior to start(), the first frame is displayed.
        ((AnimatedImageDrawable) decodedAnimation).start();
    }
}

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

فيديو HDR VP9 وضغط صور HEIF وواجهات برمجة تطبيقات الوسائط

يوفّر Android 9 توافقًا مضمَّنًا مع الملف VP9 Profile 2 للنطاق الديناميكي العالي (HDR)، ما يتيح لك عرض أفلام بتقنية النطاق العالي الديناميكية (HDR) للمستخدمين من YouTube و"أفلام Play" وغيرها من المصادر على الأجهزة التي تعمل بتقنية النطاق العالي الديناميكية.

ويتيح نظام التشغيل Android 9 أيضًا إمكانية ترميز الصور باستخدام تنسيق ملف الصور عالي الكفاءة (HEIF أو HEIC)، ما يساعد في تحسين الضغط وتقليل مساحة التخزين واستخدام بيانات الشبكة. ويمكن استخدام عيّنات الصور الثابتة HEIF في فئتي MediaMuxer وMediaExtractor. من خلال دعم النظام الأساسي على أجهزة Android 9، أصبح من السهل إرسال صور HEIF واستخدامها من خادم الخلفية. بعد التأكد من توافق تطبيقك مع تنسيق البيانات هذا للمشاركة والعرض، جرِّب HEIF كتنسيق تخزين صور في تطبيقك. يمكنك تحويل JPEG إلى تنسيق JPEG باستخدام الرمز ImageDecoder أوBitmapFactory (الذي يحصل على صورة نقطية من ملف JPEG). يمكنك بعد ذلك استخدام العلامة HeifWriter لكتابة صور ثابتة بتنسيق HEIF من مخازن بايت YUV أو مثيلات Surface أو Bitmap.

تتوفّر مقاييس الوسائط أيضًا في الفئات AudioTrack وAudioRecord وMediaDrm.

يقدّم نظام التشغيل Android 9 طرقًا لفئة MediaDRM للحصول على المقاييس ومستويات HDCP ومستويات الأمان وعدد الجلسات، وإضافة المزيد من التحكّم في مستويات الأمان ومحطات التوقف الآمنة. راجِع تقرير اختلاف واجهة برمجة التطبيقات للحصول على التفاصيل.

في نظام التشغيل Android 9، تتيح واجهة برمجة تطبيقات Aaudio إمكانية إضافة العديد من سمات AAudioStream الإضافية، بما في ذلك الاستخدام ونوع المحتوى والإعداد المسبق للإدخال. باستخدام هذه السمات، يمكنك إنشاء مجموعات بث تم ضبطها لتطبيقات VoIP أو كاميرا الفيديو. يمكنك أيضًا ضبط معرّف الجلسة لربط بث صوتي صوتي بتشكيلة فرعية يمكن أن تتضمّن تأثيرات. يمكنك استخدام واجهة برمجة التطبيقات AudioEffect للتحكّم في التأثيرات.

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

حساسية تكلفة البيانات في JobScheduler

بدءًا من نظام التشغيل Android 9، يمكن أن يستخدم JobScheduler إشارات حالة الشبكة التي يوفّرها مشغّلو شبكات الجوّال لتحسين معالجة المهام المتعلّقة بالشبكة.

ويمكن للوظائف الإفصاح عن الحجم المقدّر للبيانات والإشارة إلى الجلب المسبق وتحديد متطلبات الشبكة التفصيلية. يدير JobScheduler العمل بعد ذلك وفقًا لحالة الشبكة. على سبيل المثال، عندما تشير الشبكة إلى ازدحام الشبكة، قد يؤجِّل JobScheduler طلبات الشبكة الكبيرة. عند الاتصال بشبكة لا تفرض تكلفة استخدام، يمكن لـ JobScheduler تنفيذ مهام الجلب المسبق لتحسين تجربة المستخدم، مثلاً من خلال الجلب المُسبق للعناوين الرئيسية.

عند إضافة وظائف، احرص على استخدام setEstimatedNetworkBytes() وsetPrefetch() وsetRequiredNetwork() عند الاقتضاء للمساعدة JobScheduler في التعامل مع العمل بشكل صحيح. عند تنفيذ مهمتك، احرص على استخدام الكائن Network الذي يعرضه JobParameters.getNetwork(). وإلا سيتم استخدام الشبكة الافتراضية للجهاز ضمنيًا والتي قد لا تفي بمتطلباتك، مما يتسبب في استخدام البيانات بشكل غير مقصود.

الإصدار 1.1 من واجهة برمجة تطبيقات الشبكات العصبونية

تم طرح Neular Networks API في Android 8.1 (المستوى 27 من واجهة برمجة التطبيقات) لتسريع تعلّم الآلة على الجهاز فقط على Android. يحسّن Android 9 واجهة برمجة التطبيقات ويحسّنها، إذ يدعم تسع عمليات جديدة:

مشكلة معروفة: عند تمرير وحدات شدة ANEURALNETWORKS_TENSOR_QUANT8_ASYMM إلى عملية ANEURALNETWORKS_PAD المتاحة في نظام التشغيل Android 9 والإصدارات الأحدث، قد لا تتطابق نتائج NNAPI مع مخرجات إطارات عمل تعلُّم الآلة ذات المستوى الأعلى، مثل TensorFlow Lite. وبدلاً من ذلك، يجب تمرير ANEURALNETWORKS_TENSOR_FLOAT32 فقط إلى أن يتم حلّ المشكلة.

بالإضافة إلى ذلك، تقدّم واجهة برمجة التطبيقات أيضًا وظيفة جديدة، ANeuralNetworksModel_relaxComputationFloat32toFloat16()، تتيح لك تحديد ما إذا كان يجب حساب ANEURALNETWORKS_TENSOR_FLOAT32 بنطاق ودقة منخفضَين مقارنةً بتنسيق النقطة العائمة 16 بت الخاص بمعيار IEEE 754 16 بت.

إطار عمل الملء التلقائي

يقدّم Android 9 تحسينات متعددة يمكن لخدمات الملء التلقائي تنفيذها لتحسين تجربة المستخدم عند ملء النماذج. لمزيد من المعلومات حول كيفية استخدام ميزات الملء التلقائي في تطبيقك، راجِع دليل إطار عمل الملء التلقائي.

تحسينات الأمان

يقدّم نظام التشغيل Android 9 عددًا من ميزات الأمان، وتلخّص الأقسام التالية ما يلي:

تأكيد آمن لعمليات المُستخدِم على Android

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

إذا وافق المستخدم على البيان، يتلقى ملف تخزين مفاتيح Android ويخزِّن توقيعًا مشفّرًا محميًا برمز مصادقة الرسالة المستند إلى التجزئة (HMAC). بعد تأكيد صلاحية الرسالة على Android Keystore، يمكن لتطبيقك استخدام المفتاح الذي تم إنشاؤه من خلال trustedConfirmationRequired في بيئة التنفيذ الموثوقة (TEE) لتوقيع الرسالة التي قبلها المستخدم. يشير التوقيع، بثقة كبيرة جدًا، إلى أن المستخدم قد رأى البيان ووافق عليه.

تنبيه: لا توفّر ميزة "تأكيد Android المحمي" قناة معلومات آمنة للمستخدم. ولا يمكن لتطبيقك افتراض أي ضمانات سرية بخلاف تلك التي يقدّمها نظام Android الأساسي. وعلى وجه الخصوص، تجنَّب استخدام سير العمل هذا لعرض المعلومات الحساسة التي لا يتم عرضها عادةً على جهاز المستخدم.

للحصول على إرشادات حول إضافة إمكانية استخدام ميزة "التأكيد المحمي" على Android، يُرجى الاطّلاع على دليل التأكيد المحمي على Android.

مربّع حوار للمصادقة بالمقاييس الحيوية الموحّدة

في Android 9، يوفّر النظام مربّعات حوار للمصادقة بالمقاييس الحيوية بالنيابة عن تطبيقك. توفّر هذه الوظيفة مظهرًا وطابعًا وموضعًا موحّدًا لمربّع الحوار، ما يمنح المستخدمين مزيدًا من الثقة بأنّه تتم مصادقتها على أداة موثوقة للتحقّق من بيانات الاعتماد الحيوية.

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

وحدة أمان الأجهزة

ويمكن أن تحتوي الأجهزة المتوافقة التي تعمل بنظام التشغيل Android 9 أو الإصدارات الأحدث على StrongBox Keymaster، وهو تنفيذ لـ Keymaster HAL الموجود في وحدة أمان الأجهزة. تحتوي الوحدة على ما يلي:

  • وحدة معالجة مركزية خاصة به.
  • مساحة تخزين آمنة:
  • منشئ الأرقام العشوائية الحقيقي.
  • آليات إضافية لمقاومة التلاعب بالحِزم والتثبيت من مصدر غير معروف للتطبيقات.

عند فحص المفاتيح المخزنة في StrongBox Keymaster، يتأكد النظام من سلامة المفتاح مع بيئة التنفيذ الموثوقة (TEE).

لمعرفة المزيد من المعلومات عن استخدام برنامج Strongbox Keymaster، يمكنك الاطلاع على وحدة أمان الأجهزة.

استيراد المفتاح الآمن إلى ملف تخزين المفاتيح

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

تعرّف على المزيد من المعلومات حول كيفية استيراد المفاتيح المشفرة بشكل أكثر أمانًا.

مخطط توقيع APK مع تغيير المفتاح

يتوافق نظام التشغيل Android 9 مع الإصدار 3 من مخطّط توقيع حزمة APK. يتوفر في هذا النظام خيار تضمين سجلّ إثبات التغيير في مربّع التوقيع لكل شهادة توقيع. وتتيح هذه الإمكانية توقيع تطبيقك باستخدام شهادة توقيع جديدة عن طريق ربط شهادات التوقيع السابقة لملف APK بالشهادة التي تم توقيعه بها الآن.

تعرَّف على مزيد من المعلومات حول طريقة تدوير المفاتيح باستخدام apksigner.

خيار السماح بفك تشفير المفتاح على الأجهزة غير المقفلة فقط

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

للحفاظ على أمان المفتاح من فك تشفيره أثناء قفل الجهاز، فعِّل العلامة من خلال تمرير true إلى طريقة setUnlockedDeviceRequired(). بعد الانتهاء من هذه الخطوة، عندما تكون شاشة المستخدم مقفلة، ستفشل أي محاولات لفك تشفير البيانات أو توقيعها باستخدام هذا المفتاح. يتطلّب الجهاز المُقفَل رقم تعريف شخصيًا أو كلمة مرور أو بصمة إصبع أو أي عامل آخر موثوق به قبل الوصول إليه.

دعم التشفير القديم

تتوافق أجهزة Android 9 التي يتم شحنها مع Keymaster 4 مع خوارزمية تشفير البيانات الثلاثية أو Triple DES. إذا كان تطبيقك يعمل مع الأنظمة القديمة التي تتطلّب تقنية Triple DES، يمكنك استخدام هذا النوع من الرموز عند تشفير بيانات الاعتماد الحساسة.

للتعرّف على مزيد من المعلومات حول كيفية تعزيز أمان تطبيقك، يمكنك الاطّلاع على الأمان لمطوّري تطبيقات Android.

إيقاف WPS نهائيًا

تم إيقاف إعداد Wi-Fi المحمي (WPS) نهائيًا لأسباب تتعلق بالأمان.

النُسخ الاحتياطية من البيانات في جهاز Android

يضيف Android 9 وظائف جديدة وخيارات للمطوّرين متعلقة بميزة "الاحتفاظ بنسخة احتياطية من البيانات واستعادتها". تظهر تفاصيل حول هذه التغييرات في الأقسام التالية.

النُسخ الاحتياطية للتشفير من جهة العميل

يتيح نظام التشغيل Android 9 إمكانية تشفير النُسخ الاحتياطية من البيانات في جهاز Android باستخدام ميزة سرية من جهة العميل. ويتم تفعيل هذا الدعم تلقائيًا عند استيفاء الشروط التالية:

عند تفعيل إجراء الخصوصية هذا، يجب إدخال رقم التعريف الشخصي أو النقش أو كلمة المرور لاستعادة البيانات من النُسخ الاحتياطية التي أجراها جهاز المستخدم. لمزيد من المعلومات حول التكنولوجيا التي تستند إليها هذه الميزة، يُرجى الاطّلاع على التقرير الموجز خدمة Google Cloud Key Vault.

تحديد حالات الجهاز المطلوبة للاحتفاظ بنسخة احتياطية

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

لمزيد من المعلومات حول الاحتفاظ بنسخة احتياطية من البيانات على أجهزة Android، يمكنك الاطلاع على نظرة عامة على الاحتفاظ بنسخة احتياطية من البيانات.

تسهيل الاستخدام

يقدّم نظام التشغيل Android 9 تحسينات لإطار عمل تسهيل الاستخدام يسهّل توفير تجارب أفضل لمستخدمي تطبيقك.

دلالات التنقل

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

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

عناوين لوحات تسهيل الاستخدام

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

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

لتحديد عنوان لوحة، استخدِم السمة android:accessibilityPaneTitle. يمكنك أيضًا تعديل عنوان لوحة واجهة المستخدم التي يتم استبدالها في وقت التشغيل باستخدام setAccessibilityPaneTitle(). على سبيل المثال، يمكنك توفير عنوان لمنطقة المحتوى في عنصر Fragment.

التنقّل المستند إلى العناوين

إذا كان تطبيقك يعرض محتوًى نصيًا يتضمّن عناوين منطقية، اضبط السمة android:accessibilityHeading على true في حالات استخدام View التي تمثّل تلك العناوين. من خلال إضافة هذه العناوين، تسمح لخدمات إمكانية الوصول لمساعدة المستخدمين على التنقل مباشرة من عنوان إلى آخر. يمكن لأي خدمة لإمكانية الوصول استخدام هذه القدرة لتحسين تجربة التنقل في واجهة المستخدم لدى المستخدمين.

التنقل في المجموعة والإخراج

استخدمت برامج قراءة الشاشة عادةً السمة android:focusable لتحديد الوقت الذي يجب فيه قراءة ViewGroup أو مجموعة من عناصر View كوحدة واحدة. بهذه الطريقة، يمكن للمستخدمين فهم أن وجهات النظر كانت مرتبطة بشكل منطقي ببعضها البعض.

في الإصدار 8.1 من نظام التشغيل Android والإصدارات الأقدم، يجب وضع علامة على كل عنصر View في ViewGroup للإشارة إلى أنّه لا يمكن التركيز عليه وعلى ViewGroup نفسه كعنصر قابل للتركيز. وقد تسبّب هذا الترتيب في وضع علامة "قابل للتركيز" على بعض مثيلات الجهاز View بطريقة جعلت التنقّل باستخدام لوحة المفاتيح أكثر صعوبة.

بدءًا من نظام التشغيل Android 9، يمكنك استخدام السمة android:screenReaderFocusable بدلاً من السمة android:focusable في الحالات التي يكون فيها جعل عنصر View قابلاً للتركيز عليه عواقب غير مرغوب فيها. تركّز برامج قراءة الشاشة على جميع العناصر التي تم فيها ضبط android:screenReaderFocusable أو android:focusable على true.

الإجراءات المناسبة

يتيح نظام التشغيل Android 9 إمكانية تنفيذ الإجراءات المناسبة نيابةً عن المستخدمين:

التفاعل مع التلميحات
تمنحك الميزات الإضافية في إطار عمل تسهيل الاستخدام إمكانية الوصول إلى التلميحات في واجهة مستخدم التطبيق. يمكنك استخدام getTooltipText() لقراءة نص التلميح، واستخدام ACTION_SHOW_TOOLTIP وACTION_HIDE_TOOLTIP لتوجيه أمثلة إلى View لعرض التلميحات الخاصة بها أو إخفائها.
تمت إضافة الإجراءات العامة
يتيح نظام التشغيل Android 9 إجراءَين إضافيَين على الجهاز في الفئة AccessibilityService. يمكن لخدمتك مساعدة المستخدمين في قفل أجهزتهم وأخذ لقطات شاشة باستخدام الإجراءين GLOBAL_ACTION_LOCK_SCREEN وGLOBAL_ACTION_TAKE_SCREENSHOT على التوالي.

تفاصيل تغيير النافذة

يسهّل Android 9 تتبّع تحديثات نوافذ أحد التطبيقات عندما يعيد أحد التطبيقات رسم نوافذ متعددة في الوقت نفسه. عند وقوع حدث TYPE_WINDOWS_CHANGED، استخدِم واجهة برمجة تطبيقات getWindowChanges() لتحديد كيفية تغيير النوافذ. أثناء تحديث نوافذ متعددة، تنتج كل نافذة مجموعتها الخاصة من الأحداث. تعرض الطريقة getSource() العرض الجذر للنافذة المرتبطة بكل حدث.

إذا حدد تطبيق عناوين لوحات تسهيل الاستخدام لعناصر View، ستتمكن الخدمة من التعرّف على تحديث واجهة المستخدم الخاصة بالتطبيق. عند وقوع حدث TYPE_WINDOW_STATE_CHANGED، استخدِم الأنواع التي عرضتها getContentChangeTypes() لتحديد كيفية تغيير الفترة. على سبيل المثال، يمكن لإطار العمل اكتشاف وقت وجود عنوان جديد لجزء ما، أو اختفاء جزء.

تدوير

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

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

للحصول على المزيد من التفاصيل، اطلع على التغييرات المرتبطة بالسلوك.

جهاز جوّال دوّار يعرض وضع التدوير الجديد، ما يسمح للمستخدمين بتشغيل الدوران يدويًا

يتيح وضع التدوير الجديد للمستخدمين تشغيل عملية الدوران يدويًا عند الحاجة باستخدام زر في شريط النظام.

نص

يوفّر Android 9 الميزات التالية المتعلّقة بالنصوص على النظام الأساسي:

  • النص المحسوب مسبقًا: تُحسّن فئة PrecomputedText أداء عرض النص من خلال تمكينك من حساب المعلومات المطلوبة وتخزينها مؤقتًا مسبقًا. كما أنه يمكّن تطبيقك من تنفيذ تخطيط النص خارج سلسلة التعليمات الرئيسية.

  • المكبِّر: الفئة Magnifier هي أداة للنظام الأساسي توفّر واجهة برمجة تطبيقات للمكبِّر، ما يتيح تجربة متسقة ميزة المكبِّر في جميع التطبيقات.

  • Smart Linkify: يحسّن Android 9 فئة TextClassifier التي تستفيد من تكنولوجيا تعلُّم الآلة لتحديد بعض الكيانات في النص المحدّد واقتراح إجراءات. على سبيل المثال، يمكن لـ TextClassifier تفعيل تطبيقك لاكتشاف أن المستخدم قد اختار رقم هاتف. يمكن أن يقترح تطبيقك بعد ذلك أن يقوم المستخدم بإجراء مكالمة هاتفية باستخدام هذا الرقم. تحلّ الميزات المتوفّرة في TextClassifier محلّ وظائف الفئة Linkify.

  • تنسيق النص: هناك العديد من الطرق والسمات الملائمة التي تسهّل تنفيذ تصميم واجهة المستخدم. للحصول على تفاصيل، يُرجى الاطّلاع على المستندات المرجعية حول TextView.

تحويل ملفات DEX إلى وقت مبكر باستخدام ART

على الأجهزة التي تعمل بالإصدار 9 من نظام التشغيل Android أو الإصدارات الأحدث، يحسّن برنامج التجميع المسبق "وقت تشغيل Android" (ART) ملفات تنسيق Dalvik القابلة للتنفيذ (DEX) المضغوطة عن طريق تحويل ملفات DEX في إحدى حزم التطبيقات إلى صورة أكثر انسيابية. يسمح هذا التغيير لتطبيقك بالبدء بشكل أسرع واستهلاك مساحة قرص وذاكرة وصول عشوائي أقل.

يعود هذا التحسين بالفائدة على الأجهزة ذات المواصفات المنخفضة بشكل خاص التي تكون فيها سرعات إدخال/إخراج المحتوى أبطأ.

تتبُّع النظام على الجهاز فقط

يسمح لك Android 9 بتسجيل آثار النظام من جهازك، ثم مشاركة تقرير عن هذه التسجيلات مع فريق التطوير. يتيح هذا التقرير استخدام تنسيقات متعددة، بما فيها HTML

من خلال جمع بيانات آثار الأنشطة هذه، يمكنك تسجيل بيانات التوقيت المتعلقة بعمليات التطبيق وسلاسل المحادثات فيه وعرض أنواع أخرى من حالات الأجهزة المهمة عالميًا.

لمزيد من المعلومات عن هذه الأداة، يُرجى الاطّلاع على إجراء تتبُّع النظام على الجهاز.