على غرار الإصدارات السابقة، يتضمّن Android 17 تغييرات في السلوك قد تؤثر في تطبيقك. تنطبق تغييرات السلوك التالية حصريًا على التطبيقات التي تستهدف Android 17 أو الإصدارات الأحدث. إذا كان تطبيقك يستهدف Android 17 أو الإصدارات الأحدث، عليك تعديله ليتوافق مع هذه السلوكيات، حيثما ينطبق ذلك.
احرص أيضًا على مراجعة قائمة تغييرات السلوك التي تؤثر في جميع التطبيقات
التي تعمل على Android 17 بغض النظر عن targetSdkVersion في تطبيقك.
الوظيفة الأساسية
يتضمّن Android 17 التغييرات التالية التي تعدِّل أو توسِّع إمكانات أساسية مختلفة في نظام Android.
تنفيذ جديد لـ MessageQueue لا يتطلّب قفلًا
بدءًا من الإصدار 17 من نظام التشغيل Android، تتلقّى التطبيقات التي تستهدف الإصدار 17 من نظام التشغيل Android (المستوى 37 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث تنفيذًا جديدًا غير متزامن للدالة android.os.MessageQueue. يحسّن التنفيذ الجديد الأداء ويقلّل من عدد اللقطات التي لم يتم عرضها، ولكن قد يؤدي إلى تعطّل التطبيقات التي تستخدم الحقول والأساليب الخاصة MessageQueue.
لمزيد من المعلومات، بما في ذلك استراتيجيات تخفيف الأثر، يُرجى الاطّلاع على إرشادات تغيير سلوك MessageQueue.
أصبحت الحقول `static final` غير قابلة للتعديل
لا يمكن للتطبيقات التي تعمل على Android 17 أو الإصدارات الأحدث والتي تستهدف Android 17 (المستوى 37 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث تغيير حقول static final. إذا حاول أحد التطبيقات تغيير حقل static final باستخدام الانعكاس، سيؤدي ذلك إلى ظهور IllegalAccessException. ستؤدي محاولة تعديل أحد هذه الحقول من خلال واجهات برمجة تطبيقات JNI (مثل SetStaticLongField()) إلى تعطُّل التطبيق.
تسهيل الاستخدام
يُجري Android 17 التغييرات التالية لتحسين ميزات تسهيل الاستخدام.
تسهيل استخدام لوحة المفاتيح الخارجية في طريقة الإدخال المعقّدة (IME)
تقدّم هذه الميزة واجهات برمجة تطبيقات جديدة، وهي AccessibilityEvent وTextAttribute
، لتحسين الملاحظات المنطوقة التي تقدّمها قارئات الشاشة عند إدخال النص بلغات CJKV. يمكن لتطبيقات محرر أسلوب الإدخال (IME) للغات CJKV الآن الإشارة إلى ما إذا تم اختيار مرشّح لتحويل النص أثناء إنشاء النص. يمكن للتطبيقات التي تتضمّن حقول تعديل تحديد أنواع تغيير النص عند إرسال أحداث تسهيل الاستخدام التي تشير إلى تغيير النص.
على سبيل المثال، يمكن للتطبيقات تحديد أنّ تغييرًا في النص قد حدث أثناء إنشاء النص، أو أنّ تغييرًا في النص نتج عن عملية إرسال.
يسمح ذلك لخدمات تسهيل الاستخدام، مثل قارئات الشاشة، بتقديم ملاحظات أكثر دقة استنادًا إلى طبيعة تعديل النص.
عدد التطبيقات التي تستخدم حِزم SDK
تطبيقات محرر أسلوب الإدخال (IME): عند ضبط إنشاء النص في حقول التعديل، يمكن لمحررات أسلوب الإدخال استخدام
TextAttribute.Builder.setTextSuggestionSelected()للإشارة إلى ما إذا تم اختيار مرشّح معيّن للتحويل.التطبيقات التي تتضمّن حقول تعديل: يمكن للتطبيقات التي تحتفظ بـ
InputConnectionمخصّص استرداد بيانات اختيار المرشّح من خلال استدعاءTextAttribute.isTextSuggestionSelected(). بعد ذلك، يجب أن تستدعي هذه التطبيقاتAccessibilityEvent.setTextChangeTypes()عند إرسال أحداثTYPE_VIEW_TEXT_CHANGED. سيتم تفعيل هذه الميزة تلقائيًا للتطبيقات التي تستهدف الإصدار Android 17 (مستوى واجهة برمجة التطبيقات 37) والتي تستخدمTextViewالعادي. (أي أنّTextViewسيتولّى استرداد البيانات من محرر أسلوب الإدخال وضبط أنواع تغيير النص عند إرسال الأحداث إلى خدمات تسهيل الاستخدام).خدمات تسهيل الاستخدام: يمكن لخدمات تسهيل الاستخدام التي تعالج أحداث
TYPE_VIEW_TEXT_CHANGEDاستدعاءAccessibilityEvent.getTextChangeTypes()لتحديد طبيعة التعديل وتعديل استراتيجيات الملاحظات وفقًا لذلك.
الخصوصية
يتضمّن Android 17 التغييرات التالية لتحسين خصوصية المستخدم.
تفعيل ECH (رسائل ClientHello المُشفَّرة) بشكل انتهازي
يتيح الإصدار 17 من نظام التشغيل Android استخدام ميزة Encrypted Client Hello (ECH)، وهي إضافة إلى بروتوكول أمان طبقة النقل (TLS) تعزّز خصوصية المستخدم من خلال تشفير إشارة اسم الخادم (SNI) في عملية تبادل البيانات عبر بروتوكول أمان طبقة النقل (TLS). يساعد هذا التشفير في منع مراقبي الشبكة من تحديد النطاق المحدّد الذي يتصل به تطبيقك بسهولة.
بالنسبة إلى التطبيقات التي تستهدف الإصدار 17 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 37) أو الإصدارات الأحدث، يتم استخدام ECH بشكل انتهازي لاتصالات بروتوكول أمان طبقة النقل (TLS). لا تكون إضافة ECH نشطة إلا إذا كانت مكتبة الشبكات التي يستخدمها التطبيق (مثل HttpEngine أو WebView أو OkHttp) تتضمّن ميزة ECH، وكان الخادم البعيد يتيح أيضًا بروتوكول ECH. في حال تعذُّر التفاوض على ECH، سيتم تلقائيًا الرجوع إلى عملية مصافحة TLS عادية بدون تشفير SNI.
للسماح للتطبيقات بتخصيص هذا السلوك، يضيف نظام التشغيل Android 17 عنصر <domainEncryption> جديدًا إلى ملف إعدادات أمان الشبكة.
يمكن للمطوّرين استخدام <domainEncryption> ضمن علامات <base-config> أو <domain-config> لاختيار وضع ECH (مثل "opportunistic" أو "enabled" أو "disabled") على مستوى العالم أو على أساس كل نطاق.
لمزيد من المعلومات، يُرجى الاطّلاع على مستندات Encrypted Client Hello.
يجب منح إذن الوصول إلى الشبكة المحلية للتطبيقات التي تستهدف Android 17
يقدّم Android 17 إذن التشغيل ACCESS_LOCAL_NETWORK لحماية المستخدمين من الوصول غير المصرّح به إلى الشبكة المحلية. بما أنّ هذا الإذن يندرج ضمن مجموعة أذونات NEARBY_DEVICES الحالية، لن يُطلب من المستخدمين الذين سبق لهم منح أذونات أخرى ضمن NEARBY_DEVICES منح هذا الإذن مرة أخرى. يمنع هذا الشرط الجديد التطبيقات الضارة من استغلال الوصول غير المقيّد إلى الشبكة المحلية لتتبُّع المستخدمين وجمع بصماتهم بشكل سرّي. من خلال الإعلان عن هذا الإذن وطلبه، يمكن لتطبيقك اكتشاف الأجهزة على الشبكة المحلية (LAN) والاتصال بها، مثل أجهزة المنزل الذكي أو أجهزة استقبال البث.
أصبح لدى التطبيقات التي تستهدف Android 17 (مستوى واجهة برمجة التطبيقات 37) أو الإصدارات الأحدث مساران للحفاظ على التواصل مع أجهزة الشبكة المحلية: إما استخدام أدوات اختيار الأجهزة التي تتوسّط فيها المنظومة والتي تحافظ على الخصوصية لتخطّي طلب الإذن، أو طلب هذا الإذن الجديد بشكل صريح في وقت التشغيل للحفاظ على التواصل مع الشبكة المحلية.
لمزيد من المعلومات، يُرجى الاطّلاع على مستندات إذن الشبكة المحلية .
إخفاء كلمات المرور من الأجهزة الخارجية
إذا كان التطبيق يستهدف الإصدار 17 من نظام التشغيل Android (المستوى 37 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث وكان المستخدم يستخدم جهاز إدخال ماديًا (مثل لوحة مفاتيح خارجية)، سيطبِّق نظام التشغيل Android إعداد show_passwords_physical الجديد على جميع الأحرف في حقل كلمة المرور. يخفي هذا الإعداد تلقائيًا جميع أحرف كلمة المرور.
يعرض نظام Android آخر حرف تم إدخاله من كلمة المرور لمساعدة المستخدم في معرفة ما إذا كان قد أخطأ في كتابة كلمة المرور. ومع ذلك، يصبح هذا الإجراء أقل ضرورة مع لوحات المفاتيح الخارجية الأكبر حجمًا. بالإضافة إلى ذلك، غالبًا ما تحتوي الأجهزة التي تتضمّن لوحات مفاتيح خارجية على شاشات أكبر، ما يزيد من خطر أن يرى شخص ما كلمة المرور التي تم إدخالها.
إذا كان المستخدم يستعمل شاشة الجهاز التي تعمل باللمس، سيطبّق النظام الإعداد الجديد
show_passwords_touch.
الأمان
يُجري Android 17 التحسينات التالية على أمان الجهاز والتطبيق.
أمان النشاط
في نظام التشغيل Android 17، تواصل المنصة انتقالها إلى بنية "آمنة تلقائيًا"، حيث تقدّم مجموعة من التحسينات المصمَّمة للحدّ من الثغرات الأمنية الخطيرة، مثل التصيّد الاحتيالي واختطاف التفاعلات وهجمات "الوكيل المرتبك". يتطلّب هذا التعديل أن يوافق المطوّرون صراحةً على معايير الأمان الجديدة للحفاظ على توافق التطبيق وحماية المستخدمين.
تشمل التأثيرات الرئيسية على المطوّرين ما يلي:
- تحسين قيود BAL وتحسين خيار الموافقة: نعمل على تحسين قيود تشغيل النشاط في الخلفية (BAL) من خلال توسيع نطاق الحماية ليشمل
IntentSender. على المطوّرين التوقّف عن استخدام الثابت القديمMODE_BACKGROUND_ACTIVITY_START_ALLOWED. بدلاً من ذلك، يجب استخدام عناصر تحكّم دقيقة، مثلMODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE، التي تقصر عمليات بدء الأنشطة على السيناريوهات التي يكون فيها تطبيق الاتصال مرئيًا، ما يقلّل بشكل كبير من مساحة الهجوم. - أدوات التوافق: على المطوّرين استخدام الوضع الصارم وعمليات التحقّق المعدَّلة من أداة lint لتحديد الأنماط القديمة وضمان الاستعداد لمتطلبات حزمة تطوير البرامج (SDK) المستقبلية.
تفعيل ميزة "تتبُّع المكالمات" تلقائيًا
إذا كان التطبيق يستهدف الإصدار 17 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 37) أو الإصدارات الأحدث، سيتم تفعيل شفافية الشهادات (CT) تلقائيًا. (في نظام التشغيل Android 16، تتوفّر ميزة "التوافق مع التطبيقات"، ولكن يجب أن تفعّلها التطبيقات).
مكتبة Safer Native DCL—C
إذا كان تطبيقك يستهدف الإصدار 17 من Android (المستوى 37 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث، فإنّ الحماية من تحميل الرموز البرمجية الديناميكية (DCL) الأكثر أمانًا التي تم طرحها في Android 14 لملفات DEX وJAR تشمل الآن المكتبات الأصلية.
يجب وضع علامة "للقراءة فقط" على جميع الملفات الأصلية التي يتم تحميلها باستخدام System.load().
وبخلاف ذلك، يعرض النظام الخطأ UnsatisfiedLinkError.
ننصح التطبيقات بتجنُّب تحميل الرموز البرمجية ديناميكيًا قدر الإمكان، لأنّ ذلك يزيد بشكل كبير من خطر تعرُّض التطبيق للاختراق من خلال إدخال رموز برمجية أو التلاعب بها.
تقييد حقول معلومات تكشف الهوية الشخصية في عرض بيانات CP2
بالنسبة إلى التطبيقات التي تستهدف الإصدار Android 17 (مستوى واجهة برمجة التطبيقات 37) والإصدارات الأحدث، يمنع "مقدِّم جهات الاتصال 2" (CP2) عرض أعمدة معيّنة تحتوي على معلومات تكشف الهوية الشخصية (PII) في عرض البيانات. عند تفعيل هذا التغيير، تتم إزالة هذه الأعمدة من طريقة عرض البيانات لتعزيز خصوصية المستخدم. تشمل الأعمدة المحظورة ما يلي:
يمكن للتطبيقات التي تستخدم هذه الأعمدة من ContactsContract.Data
استخراجها من ContactsContract.RawContacts
بدلاً من ذلك، من خلال الربط مع RAW_CONTACT_ID.
فرض عمليات التحقّق الصارمة من لغة SQL في CP2
بالنسبة إلى التطبيقات التي تستهدف الإصدار 17 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 37) والإصدارات الأحدث، يفرض مقدِّم جهات الاتصال 2 (CP2) عملية تحقّق صارمة من صحة طلبات بحث SQL عند الوصول إلى الجدول ContactsContract.Data بدون إذن READ_CONTACTS.
بموجب هذا التغيير، إذا لم يكن لدى التطبيق إذن READ_CONTACTS، سيتم ضبط الخيارَين StrictColumns وStrictGrammar عند طلب البحث في جدول ContactsContract.Data. إذا كان طلب البحث يستخدم نمطًا غير متوافق مع هذه الأنماط، سيتم رفضه وسيؤدي إلى حدوث استثناء.
الوسائط
يتضمّن Android 17 التغييرات التالية على سلوك الوسائط.
تعزيز أمان الصوت في الخلفية
بدءًا من الإصدار 17 من نظام التشغيل Android، يفرض إطار عمل الصوت قيودًا على التفاعلات الصوتية في الخلفية، بما في ذلك تشغيل الصوت وطلبات أولويّة الصوت وواجهات برمجة التطبيقات الخاصة بتغيير مستوى الصوت، وذلك لضمان أن يبدأ المستخدم هذه التغييرات عن قصد.
تنطبق بعض القيود على الصوت في جميع التطبيقات. ومع ذلك، تكون القيود أكثر صرامة إذا كان التطبيق يستهدف الإصدار 17 من نظام التشغيل Android (المستوى 37 لواجهة برمجة التطبيقات). إذا كان أحد هذه التطبيقات يتفاعل مع الصوت أثناء تشغيله في الخلفية، يجب أن تكون خدمة تعمل في المقدّمة قيد التشغيل. بالإضافة إلى ذلك، يجب أن يستوفي التطبيق أحد المتطلبات التالية أو كليهما:
- يجب أن تتضمّن الخدمة التي تعمل في المقدّمة إمكانات الوصول إلى الموقع الجغرافي أثناء الاستخدام.
- يجب أن يتوفّر للتطبيق إذن المنبّه الدقيق وأن يتفاعل مع
USAGE_ALARMبث الصوت.
لمزيد من المعلومات، بما في ذلك استراتيجيات التخفيف من المخاطر، يُرجى الاطّلاع على مقالة تعزيز أمان الصوت في الخلفية.
أشكال الأجهزة
يتضمّن Android 17 التغييرات التالية لتحسين تجربة المستخدم على مجموعة من أحجام الأجهزة وأشكالها.
تغييرات على واجهة برمجة التطبيقات للنظام الأساسي لتجاهُل قيود الاتجاه وتغيير الحجم ونسبة العرض إلى الارتفاع على الشاشات الكبيرة (sw>=600dp)
أجرينا تغييرات على واجهة برمجة التطبيقات الخاصة بالنظام الأساسي في Android 16 لتجاهل قيود الاتجاه ونسبة العرض إلى الارتفاع وإمكانية تغيير الحجم على الشاشات الكبيرة (sw >= 600dp) للتطبيقات التي تستهدف المستوى 36 من واجهة برمجة التطبيقات أو المستويات الأحدث. يمكن للمطوّرين إيقاف هذه التغييرات باستخدام حزمة SDK 36، ولكن لن يكون هذا الخيار متاحًا للتطبيقات التي تستهدف الإصدار 17 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 37) أو الإصدارات الأحدث.
لمزيد من المعلومات، يُرجى الاطّلاع على يتم تجاهل القيود المفروضة على الاتجاه وإمكانية تغيير الحجم.
إمكانية الاتصال
يُجري Android 17 التغيير التالي لتحسين الاتساق ومواءمة سلوك InputStream العادي في Java مع مآخذ توصيل Bluetooth RFCOMM.
سلوك متّسق للدالة `read()` في `BluetoothSocket` لبروتوكول RFCOMM
بالنسبة إلى التطبيقات التي تستهدف الإصدار 17 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 37)، تعرض الطريقة read() الخاصة بالكائن InputStream الذي تم الحصول عليه من BluetoothSocket المستند إلى RFCOMM الآن القيمة -1 عند إغلاق المقبس أو قطع الاتصال.
يؤدي هذا التغيير إلى تطابق سلوك مقابس RFCOMM مع مقابس LE CoC ويتوافق مع مستندات InputStream.read() المعيارية التي تنص على أنّه يتم عرض -1 عند الوصول إلى نهاية البث.
قد تتأثر التطبيقات التي تعتمد فقط على رصد IOException للخروج من حلقة القراءة بهذا التغيير، ويجب أن تعدّل حلقات القراءة في BluetoothSocket للتحقّق بشكل صريح من قيمة الإرجاع -1. يضمن ذلك إنهاء الحلقة بشكل صحيح عند قطع اتصال الجهاز البعيد أو إغلاق المقبس. للاطّلاع على مثال على عملية التنفيذ المقترَحة، راجِع مقتطف الرمز في دليل نقل البيانات عبر البلوتوث.