التغييرات في السلوك: التطبيقات التي تستهدف الإصدار 17 من Android أو الإصدارات الأحدث

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

احرص أيضًا على مراجعة قائمة التغييرات في السلوك التي تؤثر في جميع التطبيقات التي تعمل على Android 17 بغض النظر عن targetSdkVersion لتطبيقك.

الوظيفة الأساسية

يتضمّن نظام التشغيل Android 17 التغييرات التالية التي تعدّل أو توسّع العديد من الإمكانات الأساسية لنظام التشغيل Android.

تنفيذ جديد لـ MessageQueue بدون قفل

بدءًا من الإصدار 17 من نظام التشغيل Android، تتلقّى التطبيقات التي تستهدف الإصدار 17 من نظام التشغيل Android (المستوى 37 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث تنفيذًا جديدًا غير متزامن للدالة android.os.MessageQueue. يحسّن التنفيذ الجديد الأداء ويقلّل من عدد اللقطات التي لم يتم عرضها، ولكن قد يؤدي إلى تعطّل التطبيقات التي تستخدم الحقول والأساليب الخاصة MessageQueue.

لمزيد من المعلومات، بما في ذلك استراتيجيات تخفيف الأثر، يُرجى الاطّلاع على إرشادات تغيير سلوك MessageQueue.

أصبحت الحقول الثابتة النهائية غير قابلة للتعديل

لا يمكن للتطبيقات التي تعمل على Android 17 أو الإصدارات الأحدث والتي تستهدف Android 17 (المستوى 37 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث تغيير حقول static final. إذا حاول أحد التطبيقات تغيير حقل static final باستخدام الانعكاس، سيؤدي ذلك إلى ظهور IllegalAccessException. ستؤدي محاولة تعديل أحد هذه الحقول من خلال واجهات برمجة تطبيقات JNI (مثل SetStaticLongField()) إلى تعطُّل التطبيق.

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

يُجري نظام التشغيل Android 17 التغييرات التالية لتحسين ميزات تسهيل الاستخدام.

تسهيل استخدام لوحة المفاتيح الخارجية المعقّدة الخاصة بمحرّك طرق الإدخال

تقدّم هذه الميزة واجهات برمجة تطبيقات جديدة، وهي 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 (Encrypted Client Hello)

يقدّم الإصدار 17 من Android دعمًا على مستوى النظام الأساسي لميزة Encrypted Client Hello ‏(ECH)، وهي إضافة إلى بروتوكول أمان طبقة النقل (TLS) تعزّز خصوصية المستخدم من خلال تشفير مؤشر اسم الخادم (SNI) في عملية تأكيد الاتصال ببروتوكول أمان طبقة النقل (TLS). يساعد هذا التشفير في منع مراقبي الشبكة من تحديد النطاق الذي يتصل به تطبيقك بسهولة.

بالنسبة إلى التطبيقات التي تستهدف الإصدار 17 من Android (مستوى واجهة برمجة التطبيقات 37) أو الإصدارات الأحدث، يتم استخدام ميزة ECH لاتصالات بروتوكول أمان طبقة النقل (TLS). لا تكون ميزة ECH نشطة إلا إذا كانت مكتبة الشبكات التي يستخدمها التطبيق (مثل HttpEngine أو WebView أو OkHttp) تتضمّن دعمًا لميزة ECH وكان الخادم البعيد يتيح أيضًا بروتوكول ECH. إذا تعذّر التفاوض بشأن ميزة ECH، يرسل العميل إضافة ECH تتضمّن محتوًى عشوائيًا (آلية تُعرف باسم ECH GREASE). يمكنك الاطّلاع على RFC 9849 لمزيد من التفاصيل حول آلية عمل ECH GREASE.

للسماح للتطبيقات بتخصيص هذا السلوك، يضيف الإصدار 17 من Android عنصرًا جديدًا <domainEncryption> إلى ملف "إعدادات أمان الشبكة". يمكن للمطوّرين استخدام <domainEncryption> ضمن <base-config> أو <domain-config> لاختيار وضع ECH (مثل "enabled" أو "disabled") على مستوى عام أو على مستوى كل نطاق.

لمزيد من المعلومات، يُرجى الاطّلاع على مستندات Encrypted Client Hello.

يجب منح إذن الوصول إلى الشبكة المحلية للتطبيقات التي تستهدف الإصدار 17 من Android

يقدّم Android 17 إذن التشغيل ACCESS_LOCAL_NETWORK لحماية المستخدمين من الوصول غير المصرّح به إلى الشبكة المحلية. بما أنّ هذا الإذن يندرج ضمن مجموعة أذونات NEARBY_DEVICES الحالية، لن يُطلب من المستخدمين الذين سبق لهم منح أذونات أخرى ضمن NEARBY_DEVICES منح هذا الإذن مرة أخرى. يمنع هذا الشرط الجديد التطبيقات الضارة من استغلال الوصول غير المقيّد إلى الشبكة المحلية لتتبُّع المستخدمين وجمع بصماتهم بشكل سرّي. من خلال الإعلان عن هذا الإذن وطلبه، يمكن لتطبيقك اكتشاف الأجهزة على الشبكة المحلية (LAN) والاتصال بها، مثل أجهزة المنزل الذكي أو أجهزة استقبال البث.

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

لمزيد من المعلومات، يُرجى الاطّلاع على مستندات إذن الشبكة المحلية .

إخفاء كلمات المرور من الأجهزة المادية

If an app targets Android 17 (API level 37) or higher and the user is using a physical input device (for example, an external keyboard), the Android operating system applies the new show_passwords_physical setting to all characters in the password field. By default, that setting hides all password characters.

The Android system shows the last-typed password character to help the user see if they mistyped the password. However, this is much less necessary with larger external keyboards. In addition, devices with external keyboards often have larger displays, which increases the danger of someone seeing the typed password.

If the user is using the device's touchscreen, the system applies the new show_passwords_touch setting.

حماية كلمات المرور الصالحة لمرة واحدة في رسائل SMS العادية

بدءًا من Android 17، يوسّع Android نطاق حماية كلمة المرور لمرة واحدة (OTP) عبر الرسائل القصيرة ليشمل الرسائل القصيرة العادية (الرسائل القصيرة التي تحتوي على كلمة مرور لمرة واحدة ولا تستخدم تنسيقات WebOTP أو SMS Retriever). بالنسبة إلى معظم التطبيقات التي تستهدف Android 17 (مستوى واجهة برمجة التطبيقات 37) أو الإصدارات الأحدث، لا تتوفّر هذه الرسائل القصيرة إلا بعد ثلاث ساعات من استلامها. يهدف هذا التأخير إلى المساعدة في منع سرقة كلمات المرور لمرة واحدة. خلال فترة التأخير هذه التي تبلغ ثلاث ساعات، يتم حجب بث SMS_RECEIVED_ACTION وتتم فلترة طلبات البحث في قاعدة بيانات مقدّم خدمة الرسائل القصيرة. تتوفّر الرسالة القصيرة لهذه التطبيقات بعد فترة التأخير.

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

الأمان

يُجري نظام التشغيل Android 17 التحسينات التالية على أمان الأجهزة والتطبيقات.

أمان النشاط

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

تشمل التأثيرات الرئيسية على المطوّرين ما يلي:

  • تحسين قيود BAL وتحسين خيار الموافقة: نعمل على تحسين قيود تشغيل النشاط في الخلفية (BAL) من خلال توسيع نطاق الحماية ليشمل IntentSender. على المطوّرين التوقّف عن استخدام الثابت القديم MODE_BACKGROUND_ACTIVITY_START_ALLOWED. بدلاً من ذلك، يجب استخدام عناصر تحكّم دقيقة، مثل MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE، التي تقصر عمليات بدء الأنشطة على السيناريوهات التي يكون فيها تطبيق الاتصال مرئيًا، ما يقلّل بشكل كبير من مساحة الهجوم.
  • أدوات التوافق: على المطوّرين استخدام الوضع الصارم وعمليات التحقّق المعدَّلة من أداة lint لتحديد الأنماط القديمة وضمان الاستعداد لمتطلبات حزمة تطوير البرامج (SDK) المستقبلية.

تفعيل "المحادثة الذكية" تلقائيًا

If an app targets Android 17 (API level 37) or higher, certificate transparency (CT) is enabled by default. (On Android 16, CT is available but apps had to opt in.)

Safer Native DCL—C

If your app targets Android 17 (API level 37) or higher, the Safer Dynamic Code Loading (DCL) protection introduced in Android 14 for DEX and JAR files now extends to native libraries.

All native files loaded using System.load() must be marked as read-only. Otherwise, the system throws UnsatisfiedLinkError.

We recommend that apps avoid dynamically loading code whenever possible, as doing so greatly increases the risk that an app can be compromised by code injection or code tampering.

تقييد حقول معلومات التعريف الشخصية في عرض بيانات 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 التغييرات التالية على سلوك الوسائط.

تعزيز أمان الصوت في الخلفية

Beginning with Android 17, the audio framework enforces restrictions on background audio interactions including audio playback, audio focus requests, and volume change APIs to ensure that these changes are started intentionally by the user.

Some audio restrictions apply to all apps. However, the restrictions are more stringent if an app targets Android 17 (API level 37). If one of these apps interacts with audio while it is in the background, it must have a foreground service running. In addition, the app must meet one or both of these requirements:

  • The foreground service must have while-in-use (WIU) capabilities.
  • The app must have the exact alarm permission and be interacting with USAGE_ALARM audio streams.

For more information, including mitigation strategies, see Background audio hardening.

أشكال الأجهزة

يتضمّن نظام التشغيل Android 17 التغييرات التالية لتحسين تجربة المستخدم على مجموعة من أحجام الأجهزة وعوامل الشكل.

تغييرات في واجهة برمجة التطبيقات الخاصة بالمنصة لتجاهل قيود الاتجاه وإمكانية تغيير الحجم ونسبة العرض إلى الارتفاع على الشاشات الكبيرة (sw>=600dp)

We introduced Platform API changes in Android 16 to ignore orientation, aspect ratio, and resizability restrictions on large screens (sw >= 600dp) for apps targeting API level 36 or higher. Developers have the option to opt out of these changes with SDK 36, but this opt-out will no longer be available for apps that target Android 17 (API level 37) or higher.

For more information, see Restrictions on orientation and resizability are ignored.

إمكانية الاتصال

يقدّم نظام التشغيل Android 17 التغيير التالي لتحسين التوافق والتوافق مع سلوك InputStream العادي في Java لمقابس RFCOMM عبر البلوتوث.

سلوك متسق للدالة read()‎ في BluetoothSocket مع RFCOMM

For apps targeting Android 17 (API level 37), the read() method of the InputStream obtained from an RFCOMM-based BluetoothSocket now returns -1 when the socket is closed or the connection is dropped.

This change makes RFCOMM socket behavior consistent with LE CoC sockets and aligns with the standard InputStream.read() documentation, which states that -1 is returned when the end of the stream is reached.

Apps that rely solely on catching an IOException to break out of a read loop may be impacted by this change and should update the BluetoothSocket read loops to explicitly check for a return value of -1. This ensures the loop terminates correctly when the remote device disconnects or the socket is closed. For an example of the recommended implementation, see the code snippet in the Transfer Bluetooth data guide.