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

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

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

تحديد الموقع الداخلي باستخدام تقنية Wi-Fi RTT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

الإشعارات

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

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

MessagingStyle مع إرفاق صورة

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

يتيح الإصدار 9 من نظام التشغيل Android أيضًا إمكانية استخدام كاميرات 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 لتنفيذ أي أوامر رسم تريدها.

صورة متحركة

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

يمكن فك ترميز 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 بنطاق عالي الديناميكية وضغط صور HEIF وواجهات برمجة تطبيقات الوسائط

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

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

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

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

في Android 9، تضيف واجهة برمجة التطبيقات AAudio إمكانية استخدام عدة سمات إضافية في AAudioStream، بما في ذلك الاستخدام ونوع المحتوى والإعداد المُسبَق للإدخال. باستخدام هذه السمات، يمكنك إنشاء بث مباشر مخصّص لتطبيقات بروتوكول نقل الصوت عبر الإنترنت (VoIP) أو تطبيقات كاميرات الفيديو. يمكنك أيضًا ضبط رقم تعريف الجلسة لربط مصدر بيانات AAudio بمزيج فرعي يمكن أن يتضمّن مؤثرات. استخدِم واجهة برمجة التطبيقات AudioEffect للتحكّم في التأثيرات.

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

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

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

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

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

Neural Networks API 1.1

تم طرح Neural Networks API في نظام Android 8.1 (مستوى واجهة برمجة التطبيقات 27) لتسريع عملية تعلُّم الآلة على الجهاز فقط على أجهزة Android. يوسّع الإصدار 9 من نظام التشغيل Android واجهة برمجة التطبيقات ويحسّنها، كما يضيف إمكانية استخدام تسع عمليات جديدة:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

مخطّط توقيع حِزم APK مع تدوير المفاتيح

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

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

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

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

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

إتاحة التشفير القديم

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

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

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

تم إيقاف ميزة "إعداد واي فاي المحمي" (WPS) نهائيًا لأسباب أمنية.

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

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

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

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

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

تدوير

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

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

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

جهاز جوّال في وضع أفقي يعرض وضع التدوير الجديد الذي يتيح للمستخدمين تدوير الشاشة يدويًا

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

نص

يوفّر الإصدار 9 من نظام التشغيل Android الميزات التالية ذات الصلة بالنصوص على النظام الأساسي:

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

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

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

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

تحويل ملفات DEX مسبقًا في "وقت تشغيل Android"

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

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

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

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

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

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