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

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

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

تجربة المستخدم وواجهة مستخدم النظام

يتضمّن نظام التشغيل Android 17 التغييرات التالية التي تهدف إلى توفير تجربة استخدام أكثر اتساقًا وسلاسة.

أداة الحدّ الأقصى للذاكرة

从 Android 17 开始,对于以 Android 17(API 级别 37)或更高版本为目标平台的应用,系统会针对 RemoteViews Parcel 中存在的位图和图标的总内存使用量强制执行严格的内存限制 (1.5 * 屏幕宽度 * 屏幕高度 * 4)。如果超出这些限制,系统会抛出致命的 IllegalArgumentException 并导致应用进程崩溃。

如需了解详情,请参阅 UpdateAppWidget。

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

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

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

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

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

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

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

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

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

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

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

عدد التطبيقات التي تستخدم حِزم SDK

  • تطبيقات IME: عند ضبط نص التأليف في حقول التعديل، يمكن لأدوات IME استخدام TextAttribute.Builder.setTextSuggestionSelected() للإشارة إلى ما إذا تم اختيار مرشح إحالة ناجحة معيّن.

  • التطبيقات التي تتضمّن حقول تعديل: التطبيقات التي تحتفظ InputConnection مخصّصًا يمكنها استرداد بيانات اختيار المرشّحين من خلال طلب TextAttribute.isTextSuggestionSelected(). بعد ذلك، يجب أن تستدعي هذه التطبيقات AccessibilityEvent.setTextChangeTypes() عند إرسال أحداث TYPE_VIEW_TEXT_CHANGED. سيتم تفعيل هذه الميزة تلقائيًا في التطبيقات التي تستهدف الإصدار 17 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 37) والتي تستخدم TextView العادي. (أي أنّ TextView ستتولّى استرداد البيانات من محرّك IME وتحديد أنواع تغييرات النص عند إرسال الأحداث إلى خدمات تسهيل الاستخدام).

  • خدمات تسهيل الاستخدام: يمكن لخدمات تسهيل الاستخدام التي تعالج أحداث 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.

للسماح للتطبيقات بتخصيص هذا السلوك، يضيف نظام التشغيل Android 17 عنصر <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(API 级别 37)或更高版本为目标平台的应用现在可以通过两种方式与 LAN 设备保持通信:采用系统介导的、可保护隐私的设备选择器来跳过权限提示,或者在运行时明确请求这项新权限来保持本地网络通信。

如需了解详情,请参阅本地网络权限文档。

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

如果应用以 Android 17(API 级别 37)或更高版本为目标平台,并且用户使用的是实体输入设备(例如外接键盘),则 Android 操作系统会将新的 show_passwords_physical 设置应用于密码字段中的所有字符。默认情况下,该设置会隐藏所有密码字符。

Android 系统会显示最后输入的密码字符,以帮助用户查看密码是否输入错误。不过,如果使用较大的外接键盘,则不太需要这样做。此外,配备外接键盘的设备通常具有更大的显示屏,这会增加他人看到所输入密码的风险。

如果用户使用的是设备的触屏,系统会应用新的 show_passwords_touch 设置。

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

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

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

الأمان

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

أمان النشاط

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

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

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

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

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

Safer Native DCL—C

如果您的应用以 Android 17(API 级别 37)或更高版本为目标平台,则 Android 14 中针对 DEX 和 JAR 文件引入的更安全的动态代码加载 (DCL) 保护功能现在也适用于原生库。

使用 System.load() 加载的所有原生文件都必须标记为只读。 否则,系统会抛出 UnsatisfiedLinkError。

我们建议应用尽可能避免动态加载代码,因为这样做会大大增加应用因代码注入或代码篡改而遭到入侵的风险。

تقييد حقول معلومات التعريف الشخصية في عرض بيانات CP2

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

يمكن للتطبيقات التي تستخدم هذه الأعمدة من ContactsContract.Data استخراجها من ContactsContract.RawContacts بدلاً من ذلك، من خلال الربط بـ RAW_CONTACT_ID.

فرض عمليات التحقّق الصارمة من لغة الاستعلامات البنيوية (SQL) في CP2

对于以 Android 17(API 级别 37)及更高版本为目标平台的应用,当在没有 READ_CONTACTS 权限的情况下访问 ContactsContract.Data 表时,联系人提供程序 2 (CP2) 会强制执行严格的 SQL 查询验证。

在此更改之后,如果应用没有 READ_CONTACTS 权限,则在查询 ContactsContract.Data 表时,系统会设置 StrictColumns 和 StrictGrammar 选项。如果查询使用的模式与这些模式不兼容,则会被拒绝并导致抛出异常。

Intelligence

يتضمّن نظام التشغيل Android 17 التغييرات التالية على ميزة "الذكاء الاصطناعي في النظام".

إيقاف طريقة setContentCaptureEnabled نهائيًا

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

اعتبارًا من الإصدار 17 من نظام التشغيل Android، سيتم إيقاف طريقة واجهة برمجة التطبيقات ContentCaptureManager.setContentCaptureEnabled(boolean) نهائيًا. بالنسبة إلى التطبيقات التي تستهدف الإصدار 17 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 37) أو الإصدارات الأحدث، لن يؤدي استدعاء setContentCaptureEnabled(false) إلى إيقاف ميزة "التقاط المحتوى".

إذا كان تطبيقك بحاجة إلى مواصلة إيقاف ميزة &quot;التقاط المحتوى&quot; أو حظر التقاط النظام لمحتوى الشاشة، عليك الانتقال إلى استخدام مَعلمة تخطيط النافذة FLAG_SECURE.

لإيقاف ميزة &quot;التقاط المحتوى&quot;، اضبط العلامة FLAG_SECURE في نافذتك كما هو موضّح في المثال التالي:

Kotlin

window.setFlags(
    WindowManager.LayoutParams.FLAG_SECURE,
    WindowManager.LayoutParams.FLAG_SECURE
)

Java

getWindow().setFlags(
    WindowManager.LayoutParams.FLAG_SECURE,
    WindowManager.LayoutParams.FLAG_SECURE
);

لمزيد من التفاصيل، راجِع مستندات WindowManager.LayoutParams.FLAG_SECURE المرجعية.

الوسائط

يتضمّن نظام التشغيل Android 17 التغييرات التالية على سلوك الوسائط.

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

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

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

  • يجب أن تتضمّن الخدمة التي تعمل في المقدّمة إمكانات الوصول إلى الموقع الجغرافي أثناء الاستخدام.
  • يجب أن يكون لدى التطبيق إذن المنبّه الدقيق وأن يتفاعل مع USAGE_ALARM بث الصوت.

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

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

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

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

我们在 Android 16 中引入了平台 API 变更,以忽略以 API 级别 36 或更高级别为目标的应用在大屏 (sw >= 600dp) 设备上的屏幕方向、宽高比和尺寸调整能力限制。开发者可以选择使用 SDK 36 停用这些变更,但对于以 Android 17(API 级别 37)或更高版本为目标平台的应用,此停用选项将不再可用。

如需了解详情,请参阅忽略了有关屏幕方向和可调整大小性的限制。

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

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

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

对于以 Android 17(API 级别 37)为目标平台的应用,从基于 RFCOMM 的 BluetoothSocket 获取的 InputStream 的 read() 方法现在在套接字关闭或连接断开时返回 -1。

此变更使 RFCOMM 套接字行为与 LE CoC 套接字保持一致,并与标准 InputStream.read() 文档保持一致,该文档指出,当到达数据流末尾时,系统会返回 -1。

仅依靠捕获 IOException 来跳出读取循环的应用可能会受到此变更的影响,应更新 BluetoothSocket 读取循环以明确检查 -1 的返回值。这可确保在远程设备断开连接或套接字关闭时,循环正确终止。如需查看推荐的实现示例,请参阅传输蓝牙数据指南中的代码段。