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

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

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

تحديد الموقع الجغرافي في الأماكن المغلقة باستخدام تقنية RTT في شبكة Wi-Fi

توفّر واجهات برمجة التطبيقات الجديدة لميزة RTT إمكانية تحديد الموقع الجغرافي في الأماكن المغلقة من خلال تطبيقاتك.

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

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

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

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

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

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

توافق مع الصور المقتطعة للشاشة

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

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

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

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

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

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

الإشعارات

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

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

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

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

‫MessagingStyle مع الردود والمحادثة

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

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

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

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

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

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

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

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

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

حساسية تكلفة البيانات في Job Scheduler

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

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

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

Neural Networks API 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 من خلال نطاق ودقة منخفضَين مثل النقطة العائمة بتنسيق IEEE 754 16 بت .

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

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

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

يقدّم الإصدار 9 من Android عددًا من ميزات الأمان التي تلخّصها القسمان التاليان:

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

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

لمزيد من المعلومات حول كيفية تعزيز أمان تطبيقك، يُرجى الاطّلاع على مقالة الأمان في نظام التشغيل Android. المطوِّرون:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

عناوين الأجزاء المخصّصة لتسهيل الاستخدام

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

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

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

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

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

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

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

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

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

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

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

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

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

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