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

يضيف نظام التشغيل 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
،
يسمح لتطبيقك بتخطيط المحتوى حول القواطع في الجهاز. يمكنك تحديد
هذه السمة إلى إحدى القيم التالية:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
يمكنك محاكاة صورة مقطوعة للشاشة على أي جهاز أو محاكي يعمل بنظام Android 9. على النحو التالي:
- فعِّل خيارات المطوّرين.
- في شاشة خيارات المطوِّر، انتقِل للأسفل إلى قسم الرسم. اختَر محاكاة شاشة بها صورة مقطوعة.
- اختَر حجم الصورة المقتطعة.
الإشعارات
يقدّم نظام 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
تتوفّر ثلاث فئات جديدة لإعدادات "عدم الإزعاج" ذات الأولوية:PRIORITY_CATEGORY_ALARMS
ويعطي الأولوية للمنبّهات.PRIORITY_CATEGORY_MEDIA
تمنح الأولوية للأصوات من مصادر الوسائط، مثل الوسائط والتنقّل الصوتي.PRIORITY_CATEGORY_SYSTEM
تُعطى الأولوية لأصوات النظام.
يتضمّن
NotificationManager.Policy
أيضًا سبعة ثوابت جديدة لميزة "عدم الإزعاج" يمكنك استخدامها لإيقاف مصادر الإزعاج المرئية:SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
يمنع الإشعار من تشغيل نشاط بملء الشاشة.SUPPRESSED_EFFECT_LIGHTS
يحظر ضوء الإشعارات.SUPPRESSED_EFFECT_PEEK
يمنع هذا الرمز الإشعارات من الظهور بشكل خاطف على الشاشة ("الاطّلاع").SUPPRESSED_EFFECT_STATUS_BAR
تمنع الإشعارات من الظهور في شريط الحالة على الأجهزة التي تدعم أشرطة الحالة.SUPPRESSED_EFFECT_BADGE
لحظر الشارات على الأجهزة المتوافقة. لمزيد من المعلومات، راجع تعديل شارة الإشعار:SUPPRESSED_EFFECT_AMBIENT
يحظر الإشعارات على الأجهزة التي تتيح ميزة "الشاشة السينمائية".SUPPRESSED_EFFECT_NOTIFICATION_LIST
لمنع الإشعارات من الظهور في عرض القائمة على الأجهزة التي تتيح العرض على شكل قائمة، مثل مركز الإشعارات أو شاشة القفل.
التوافق مع كاميرات متعدّدة وتحديثات الكاميرا
على الأجهزة التي تعمل بنظام التشغيل 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 باستخدام سر العميل. يتم تفعيل هذا الدعم تلقائيًا في الحالات التالية: استيفاء الشروط التالية:
- يجب أن يكون المستخدم قد فعّل الاحتفاظ بنسخة احتياطية باستخدام Android 9 أو أعلى.
- قام المستخدم بتعيين شاشة قفل الجهاز يتطلب فتح القفل باستخدام رقم تعريف شخصي أو نقش أو كلمة مرور.
عند تفعيل إجراء الخصوصية هذا، سيتم ضبط رقم التعريف الشخصي أو النقش أو كلمة المرور للجهاز المطلوبة لاستعادة البيانات من النسخ الاحتياطية التي أنشأها جهاز المستخدم. للتعلّم لمزيد من المعلومات حول التكنولوجيا التي تكمن وراء هذه الميزة، يمكنك الاطّلاع على 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.
من خلال جمع بيانات التتبّع هذه، يمكنك تسجيل بيانات التوقيت ذات الصلة بمحتوى تطبيقك. العمليات وسلاسل المحادثات والاطّلاع على الأنواع الأخرى من الأجهزة ذات الأهمية العالمية الولايات.
لمزيد من المعلومات عن هذه الأداة، يُرجى الاطّلاع على مقالة تنفيذ عملية تتبع النظام على الجهاز.