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

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

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

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

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

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

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

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

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

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

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

عرض دعم القطع

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

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

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

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

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

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

أداة فك ترميز الصور القابلة للرسم والصور النقطية

يقدّم نظام التشغيل 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" ومصادر أخرى على الأجهزة المتوافقة مع تقنية HDR.

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

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

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

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

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

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

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

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

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

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

تم إطلاق واجهة برمجة تطبيقات الشبكات العصبية في نظام التشغيل 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

في الإصدار Android 8.1 والإصدارات الأقدم، يجب وضع علامة على كل عنصر 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 المسبقة

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

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

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

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

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

لمزيد من المعلومات حول هذه الأداة، يمكنك الاطّلاع على تنفيذ تتبُّع النظام على الجهاز.