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

يضيف نظام التشغيل Android 9 إمكانية استخدام بروتوكول Wi-Fi IEEE 802.11-2016، المعروف أيضًا باسم Wi-Fi Round-Trip-Time (RTT)، ما يتيح لك الاستفادة من تحديد الموقع الجغرافي في الأماكن المغلقة ضمن تطبيقاتك.
على الأجهزة التي تعمل بالإصدار 9 من نظام التشغيل Android والمتوافقة مع الأجهزة، يمكن لتطبيقاتك استخدام واجهات برمجة التطبيقات الخاصة بتقنية RTT لقياس المسافة إلى نقاط الوصول المجاورة التي تتوافق مع تقنية 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
يمكنك محاكاة قطع الشاشة على أي جهاز أو محاكي يعمل بالإصدار 9 من نظام التشغيل Android باتّباع الخطوات التالية:
- فعِّل خيارات المطوّرين.
- في شاشة خيارات المطوّرين، انتقِل للأسفل إلى قسم الرسومات واختَر محاكاة شاشة تحتوي على صورة مقطوعة.
- اختَر حجم الصورة المقطوعة.
الإشعارات
يقدّم الإصدار 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()
لتوفير مجموعة من الردود العادية للمستخدم.
إعدادات القناة وعمليات البث وميزة "عدم الإزعاج"
قدّمت الإصدار 8.0 من نظام التشغيل Android قنوات الإشعارات التي تتيح لك إنشاء قناة قابلة للتخصيص من قِبل المستخدم لكل نوع من أنواع الإشعارات التي تريد عرضها. يبسّط نظام التشغيل 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
إلى منع ظهور الإشعارات في عرض القائمة على الأجهزة التي تتيح عرض القائمة، مثل ظل الإشعارات أو شاشة القفل.
- يؤدي ضبط
دعم الكاميرات المتعددة وتحديثات الكاميرا
على الأجهزة التي تعمل بالإصدار 9 من نظام التشغيل Android، يمكنك الوصول إلى الفيديوهات في الوقت نفسه من كاميرتَين أو أكثر من الكاميرات الفعلية. على الأجهزة التي تحتوي على كاميرتَين أماميتَين أو خلفيتَين، يمكنك إنشاء ميزات مبتكرة لا يمكن توفيرها باستخدام كاميرا واحدة فقط، مثل التكبير/التصغير السلس، وتأثير البوكيه، والرؤية المجسمة. تتيح واجهة برمجة التطبيقات أيضًا طلب بث من كاميرا منطقية أو مدمجة، ما يؤدي إلى التبديل تلقائيًا بين كاميرتَين أو أكثر.
تشمل التحسينات الأخرى في الكاميرا مَعلمات إضافية للجلسة تساعد في تقليل التأخيرات أثناء عملية الالتقاط الأولية، وميزة مشاركة العرض التي تتيح لبرامج الكاميرا التعامل مع حالات استخدام مختلفة بدون الحاجة إلى إيقاف بث الكاميرا وإعادة تشغيله. أضفنا أيضًا واجهات برمجة تطبيقات لإتاحة استخدام الفلاش المستند إلى الشاشة والوصول إلى الطوابع الزمنية لنظام التثبيت البصري من أجل تثبيت الصور على مستوى التطبيق والتأثيرات الخاصة.
في الإصدار 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
.
يستخدم مؤشر ترابط العرض أيضًا مؤشر ترابط عامل لفك الترميز، وذلك حتى لا تتداخل عملية فك الترميز مع العمليات الأخرى في مؤشر ترابط العرض. يتيح هذا التنفيذ لتطبيقك عرض صورة متحركة بدون إدارة تحديثاتها أو التداخل مع الأحداث الأخرى في سلسلة التعليمات الخاصة بواجهة المستخدم في تطبيقك.
يمكن فك ترميز 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 Profile 2 المدمجة بتقنية النطاق العالي الديناميكية (HDR)، ما يتيح لك عرض أفلام مزوّدة بتقنية 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
ومستويات الأمان وعدد الجلسات، ولإضافة المزيد من التحكّم في
مستويات الأمان وعمليات الإيقاف الآمن. لمزيد من التفاصيل، يمكنك الاطّلاع على تقرير API Diff.
في نظام التشغيل Android 9، تضيف واجهة برمجة التطبيقات AAudio إمكانية استخدام العديد من سمات AAudioStream الإضافية، بما في ذلك الاستخدام ونوع المحتوى والإعداد المُسبَق للإدخال. باستخدام هذه السمات، يمكنك إنشاء بث مباشر
مخصّص لتطبيقات بروتوكول نقل الصوت عبر الإنترنت (VoIP) أو تطبيقات كاميرات الفيديو. يمكنك أيضًا ضبط معرّف الجلسة لربط مصدر بيانات AAudio بمزيج فرعي يمكن أن يتضمّن مؤثرات. استخدِم واجهة برمجة التطبيقات
AudioEffect
للتحكّم في
التأثيرات.
يتضمّن الإصدار 9 من نظام التشغيل Android واجهة برمجة التطبيقات 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 العديد من التحسينات التي يمكن أن تنفّذها خدمات الملء التلقائي لتعزيز تجربة المستخدم عند ملء النماذج. لمزيد من المعلومات حول كيفية استخدام ميزات الملء التلقائي في تطبيقك، يُرجى الاطّلاع على دليل إطار عمل الملء التلقائي.
تحسينات الأمان
يتضمّن الإصدار 9 من نظام التشغيل Android عددًا من ميزات الأمان التي تلخّصها الأقسام التالية:
تأكيد آمن لعمليات المُستخدِم على Android
تتيح لك الأجهزة المتوافقة التي تعمل بالإصدار 9 أو الإصدارات الأحدث من نظام التشغيل Android استخدام ميزة "التأكيد المحمي على Android". عند استخدام سير العمل هذا، يعرض تطبيقك رسالة للمستخدم تطلب منه الموافقة على بيان موجز. يسمح هذا البيان للتطبيق بإعادة التأكيد على أنّ المستخدم يريد إكمال معاملة حساسة، مثل إجراء دفعة.
إذا وافق المستخدم على البيان، يتلقّى Android Keystore توقيعًا تشفيريًا ويخزّنه، ويكون هذا التوقيع محميًا برمز مصادقة الرسائل المستندة إلى التجزئة (HMAC) والمستند إلى مفتاح. بعد أن تؤكّد خدمة Android Keystore صحة الرسالة، يمكن لتطبيقك استخدام المفتاح الذي تم إنشاؤه من trustedConfirmationRequired
في بيئة التنفيذ الموثوقة (TEE) لتوقيع الرسالة التي وافق عليها المستخدم. تشير التوقيعات، بموثوقية عالية جدًا، إلى أنّ المستخدم قد اطّلع على البيان ووافق عليه.
تنبيه: لا توفّر ميزة "التأكيد المحمي على Android" قناة آمنة للمعلومات للمستخدم. لا يمكن أن يقدّم تطبيقك أي ضمانات بشأن الحفاظ على سرية البيانات تتجاوز تلك التي يوفّرها نظام Android الأساسي. على وجه الخصوص، لا تستخدِم سير العمل هذا لعرض معلومات حسّاسة لا تعرضها عادةً على جهاز المستخدم.
للحصول على إرشادات حول إضافة دعم لميزة "التأكيد المحمي" من Android، يُرجى الاطّلاع على دليل التأكيد المحمي من Android.
مربّع حوار موحّد للمصادقة بالمقاييس الحيوية
في نظام التشغيل Android 9، يوفّر النظام مربّعات حوار مصادقة باستخدام المقاييس الحيوية نيابةً عن تطبيقك. وتتيح هذه الوظيفة مظهرًا وإحساسًا وموضعًا موحّدًا لمربّع الحوار، ما يمنح المستخدمين المزيد من الثقة في أنّهم يصادقون على صحة بياناتهم باستخدام أداة موثوق بها للتحقّق من صحة بيانات المقاييس الحيوية.
إذا كان تطبيقك يستخدم
FingerprintManager
لعرض مربّع حوار مصادقة ببصمة الإصبع للمستخدمين، عليك التبديل إلى استخدام
BiometricPrompt
بدلاً من ذلك. تعتمد BiometricPrompt
على النظام لعرض مربّع حوار المصادقة. كما يغيّر سلوكه ليتكيّف مع نوع المصادقة باستخدام المقاييس الحيوية الذي اختاره المستخدم.
وحدة أمان الأجهزة
يمكن للأجهزة المتوافقة التي تعمل بالإصدار 9 من نظام التشغيل Android أو إصدار أحدث أن تتضمّن StrongBox KeyMint (المعروفة سابقًا باسم Keymaster)، وهي عملية تنفيذ لطبقة تجريد الأجهزة (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 نهائيًا
تم إيقاف نظام Wi-Fi Protected Setup (WPS) نهائيًا لأسباب تتعلق بالأمان.
نُسخ احتياطية من البيانات في أجهزة Android
يضيف الإصدار 9 من نظام التشغيل Android وظائف وخيارات جديدة للمطوّرين ذات صلة بالنسخ الاحتياطي والاستعادة. تظهر تفاصيل حول هذه التغييرات في الأقسام التالية.
عمليات الاحتفاظ بنسخ احتياطية باستخدام ميزة "التشفير من جهة العميل"
يتيح نظام التشغيل Android 9 تشفير النُسخ الاحتياطية من بيانات Android باستخدام سر من جهة العميل. يتم تفعيل هذه الميزة تلقائيًا عند استيفاء الشروط التالية:
- يجب أن يكون المستخدم قد فعّل الاحتفاظ بنسخة احتياطية باستخدام الإصدار 9 أو الإصدارات الأحدث من نظام التشغيل Android.
- أن يكون المستخدم قد ضبط قفل شاشة لجهازه يتطلّب إدخال رقم تعريف شخصي أو نقش أو كلمة مرور لفتح القفل.
عند تفعيل إجراء الخصوصية هذا، يجب إدخال رقم التعريف الشخصي أو النقش أو كلمة المرور الخاصة بالجهاز لاستعادة البيانات من النُسخ الاحتياطية التي أنشأها جهاز المستخدم. لمزيد من المعلومات حول التكنولوجيا التي تستند إليها هذه الميزة، يُرجى الاطّلاع على التقرير الموجز حول خدمة Google Cloud Key Vault.
تحديد شروط الجهاز المطلوبة لإجراء النسخ الاحتياطي
إذا كانت بيانات تطبيقك تتضمّن معلومات أو إعدادات مفضّلة حسّاسة، يتيح لك نظام التشغيل Android 9 تحديد شروط الجهاز التي يتم بموجبها تضمين بيانات تطبيقك في النسخة الاحتياطية للمستخدم، مثل عندما يكون التشفير من جهة العميل مفعّلاً أو عندما يتم إجراء عملية نقل محلية من جهاز إلى جهاز.
لمزيد من المعلومات حول الاحتفاظ بنسخة احتياطية من البيانات على أجهزة Android، يُرجى الاطّلاع على نظرة عامة حول الاحتفاظ بنسخة احتياطية من البيانات.
تسهيل الاستخدام
يقدّم نظام التشغيل Android 9 تحسينات على إطار عمل تسهيل الاستخدام، ما يسهّل تقديم تجارب أفضل لمستخدمي تطبيقك.
دلالات التنقّل
تسهّل عليك السمات المضافة في Android 9 تحديد طريقة تنقّل خدمات تسهيل الاستخدام، خاصةً برامج قراءة الشاشة، من جزء من الشاشة إلى جزء آخر. يمكن أن تساعد هذه السمات المستخدمين الذين يعانون ضعفًا في البصر على التنقّل بسرعة بين النصوص في واجهة المستخدم الخاصة بتطبيقك، كما تتيح لهم إجراء تحديد.
على سبيل المثال، في تطبيق تسوّق، يمكن أن يساعد قارئ الشاشة المستخدمين في التنقّل مباشرةً من فئة صفقات إلى أخرى، بدون أن يضطر قارئ الشاشة إلى قراءة جميع العناصر في فئة قبل الانتقال إلى الفئة التالية.
عناوين لوحة تسهيل الاستخدام
في الإصدار 8.1 من نظام التشغيل Android (المستوى 27 من واجهة برمجة التطبيقات) والإصدارات الأقدم، لا يمكن لخدمات تسهيل الاستخدام في بعض الأحيان تحديد وقت تعديل جزء معيّن من الشاشة، مثلاً عندما يستبدل نشاط جزءًا بآخر. تتألف اللوحات من عناصر واجهة مستخدم ذات صلة مرئية ومجمّعة بشكل منطقي، وتشمل عادةً جزءًا.
في نظام التشغيل Android 9، يمكنك توفير عناوين لوحات تسهيل الاستخدام أو عناوين يمكن تحديدها بشكل فردي لهذه اللوحات. إذا كان للوحة عنوان خاص بسهولة الاستخدام، تتلقّى خدمات تسهيل الاستخدام معلومات أكثر تفصيلاً عند تغيير اللوحة. تتيح هذه الإمكانية للخدمات تقديم معلومات أكثر تفصيلاً للمستخدم حول التغييرات التي تم إجراؤها في واجهة المستخدم.
لتحديد عنوان جزء، استخدِم السمة
android:accessibilityPaneTitle
. يمكنك أيضًا تعديل عنوان لوحة واجهة المستخدم التي يتم استبدالها في وقت التشغيل باستخدام setAccessibilityPaneTitle()
.
على سبيل المثال، يمكنك تقديم عنوان لمنطقة المحتوى في عنصر Fragment
.
التنقّل المستند إلى العناوين
إذا كان تطبيقك يعرض محتوًى نصيًا يتضمّن عناوين منطقية، اضبط السمة
android:accessibilityHeading
على true
لعناصر
View
التي تمثّل تلك العناوين. من خلال إضافة هذه العناوين، يمكنك السماح لخدمات تسهيل الاستخدام بمساعدة المستخدمين في التنقّل مباشرةً من عنوان إلى آخر. ويمكن لأي خدمة تسهيل استخدام الاستفادة من هذه الإمكانية لتحسين تجربة المستخدمين في التنقّل في واجهة المستخدم.
التنقّل في المجموعة وإخراجها
اعتادت برامج قراءة الشاشة استخدام السمة android:focusable
لتحديد الوقت المناسب لقراءة ViewGroup
أو مجموعة من عناصر View
كوحدة واحدة. بهذه الطريقة، يمكن للمستخدمين فهم أنّ طرق العرض مرتبطة ببعضها البعض منطقيًا.
في الإصدار 8.1 من نظام التشغيل Android والإصدارات الأقدم، عليك وضع علامة على كل عنصر View
ضمن ViewGroup
على أنّه غير قابل للتركيز، ووضع علامة على ViewGroup
نفسها على أنّها قابلة للتركيز. وقد تسبّب هذا الترتيب في وضع علامة على بعض مثيلات View
على أنّها قابلة للتركيز بطريقة جعلت التنقّل باستخدام لوحة المفاتيح أكثر صعوبة.
بدءًا من Android 9، يمكنك استخدام السمة
android:screenReaderFocusable
بدلاً من السمة android:focusable
في الحالات التي يؤدي فيها
جعل العنصر View
قابلاً للتركيز إلى نتائج غير مرغوب فيها. تضع قارئات الشاشة التركيز على جميع العناصر التي تم ضبط قيمة android:screenReaderFocusable
أو android:focusable
فيها على true
.
الإجراءات السريعة
يضيف نظام التشغيل Android 9 إمكانية تنفيذ إجراءات مفيدة نيابةً عن المستخدمين:
- التفاعل مع تلميحات الأدوات
- تتيح لك الميزات المضافة في إطار عمل تسهيل الاستخدام الوصول إلى
تلميحات الأدوات في واجهة مستخدم التطبيق. استخدِم
getTooltipText()
لقراءة نص تلميح الأدوات، واستخدِمACTION_SHOW_TOOLTIP
وACTION_HIDE_TOOLTIP
لتوجيه مثيلاتView
لعرض تلميحات الأدوات أو إخفائها. - إضافة إجراءات عامة
- يتيح نظام التشغيل Android 9 إجراءَين إضافيَين على الأجهزة في فئة
AccessibilityService
. يمكن لخدمتك مساعدة المستخدمين في قفل أجهزتهم وأخذ لقطات شاشة باستخدام الإجراءَينGLOBAL_ACTION_LOCK_SCREEN
وGLOBAL_ACTION_TAKE_SCREENSHOT
على التوالي.
تفاصيل تغيير النافذة
يسهّل نظام التشغيل Android 9 تتبُّع التحديثات التي تطرأ على نوافذ التطبيق عندما يعيد التطبيق رسم نوافذ متعدّدة في الوقت نفسه. عند وقوع حدث
TYPE_WINDOWS_CHANGED
، استخدِم واجهة برمجة التطبيقات
getWindowChanges()
لتحديد كيفية تغيُّر النوافذ. أثناء تعديل النوافذ المتعددة، ينتج عن كل نافذة مجموعة الأحداث الخاصة بها.
تعرض الدالة getSource()
طريقة العرض الجذرية للنافذة المرتبطة بكل حدث.
إذا حدّد أحد التطبيقات عناوين لوحة تسهيل الاستخدام لعناصر
View
، يمكن أن تتعرّف خدمتك على وقت تعديل واجهة مستخدم التطبيق. عند وقوع حدث TYPE_WINDOW_STATE_CHANGED
، استخدِم الأنواع التي تعرضها getContentChangeTypes()
لتحديد كيفية تغيُّر النافذة. على سبيل المثال، يمكن للإطار اكتشاف متى يكون للوحة عنوان جديد أو متى تختفي لوحة.
الدوران
ولتجنُّب عمليات التدوير غير المقصودة، أضفنا وضعًا يثبّت الاتجاه الحالي حتى إذا تغيّر موضع الجهاز. يمكن للمستخدمين تفعيل التدوير يدويًا عند الحاجة من خلال الضغط على زر في شريط النظام.
في معظم الحالات، يكون تأثير التوافق على التطبيقات ضئيلاً. ومع ذلك، إذا كان تطبيقك يتضمّن أي سلوك مخصّص للعرض بالتناوب أو يستخدم أي إعدادات غير عادية لاتجاه الشاشة، قد تواجه مشاكل لم تكن لتلاحظها من قبل عندما كان خيار العرض بالتناوب المفضّل لدى المستخدم مضبوطًا دائمًا على الوضع العمودي. ننصحك بإلقاء نظرة على سلوك التدوير في جميع الأنشطة الرئيسية لتطبيقك والتأكّد من أنّ جميع إعدادات اتجاه الشاشة لا تزال توفّر أفضل تجربة.
لمزيد من التفاصيل، اطّلِع على التغييرات في السلوك المرتبطة.

يتيح وضع تدوير جديد للمستخدمين تفعيل التدوير يدويًا عند الحاجة باستخدام زر في شريط النظام.
نص
يوفّر الإصدار 9 من نظام التشغيل Android الميزات التالية ذات الصلة بالنصوص على النظام الأساسي:
Precomputed Text: تعمل الفئة
PrecomputedText
على تحسين أداء عرض النصوص من خلال السماح لك بحساب المعلومات المطلوبة وتخزينها مؤقتًا مسبقًا. ويتيح أيضًا لتطبيقك تنفيذ تخطيط النص خارج سلسلة التعليمات الرئيسية.المكبِّر: الفئة
Magnifier
هي أداة نظام أساسي توفّر واجهة برمجة تطبيقات للمكبِّر، ما يتيح تجربة متسقة لميزة المكبِّر في جميع التطبيقات.Smart Linkify: يعزّز نظام التشغيل Android 9 الفئة
TextClassifier
، التي تستفيد من تكنولوجيات تعلُّم الآلة للتعرّف على بعض العناصر في النص المحدّد واقترَاح إجراءات. على سبيل المثال، يمكن أن تتيحTextClassifier
لتطبيقك رصد أنّ المستخدم قد اختار رقم هاتف. يمكن لتطبيقك بعد ذلك أن يقترح على المستخدم إجراء مكالمة هاتفية باستخدام هذا الرقم. تحلّ الميزات فيTextClassifier
محل وظائف الفئةLinkify
.تنسيق النص: تتوفّر عدة طرق وسمات سهلة الاستخدام لتسهيل تنفيذ تصميم واجهة المستخدم. للحصول على التفاصيل، يُرجى الاطّلاع على المستندات المرجعية الخاصة بـ
TextView
.
تحويل ملفات DEX مسبقًا في ART
على الأجهزة التي تعمل بالإصدار 9 من نظام التشغيل Android أو الإصدارات الأحدث، يعمل برنامج التحويل البرمجي المسبق (AOT) في وقت التشغيل على Android (ART) على تحسين ملفات Dalvik Executable المضغوطة (DEX) من خلال تحويل ملفات DEX في حزمة التطبيق إلى تمثيل أكثر إحكامًا. يتيح هذا التغيير بدء تشغيل تطبيقك بشكل أسرع واستهلاك مساحة أقل على القرص وذاكرة الوصول العشوائي.
وتفيد هذه التحسينات بشكل خاص الأجهزة المنخفضة المستوى التي تتسم ببطء سرعات الإدخال والإخراج من القرص.
تتبُّع النظام على الجهاز فقط
يتيح لك الإصدار 9 من نظام التشغيل Android تسجيل عمليات تتبُّع النظام من جهازك، ثم مشاركة تقرير بهذه التسجيلات مع فريق التطوير. يتوافق هذا التقرير مع تنسيقات متعددة، بما في ذلك HTML.
من خلال جمع عمليات التتبُّع هذه، يمكنك تسجيل بيانات التوقيت ذات الصلة بعمليات تطبيقك وسلاسل التنفيذ وعرض أنواع أخرى من حالات الجهاز المهمة على مستوى العالم.
لمزيد من المعلومات حول هذه الأداة، يُرجى الاطّلاع على مقالة تنفيذ تتبُّع نظام على الجهاز.