كما هو الحال في الإصدارات السابقة، يتضمّن 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(API 级别 37)或更高版本为目标平台的 Android 17 或更高版本上运行的应用无法更改 static final 字段。如果应用尝试使用反射更改 static final 字段,则会导致 IllegalAccessException。尝试通过 JNI API(例如 SetStaticLongField())修改其中一个字段会导致应用崩溃。
تسهيل الاستخدام
يُجري نظام التشغيل Android 17 التغييرات التالية لتحسين ميزات تسهيل الاستخدام.
تسهيل استخدام لوحة المفاتيح الخارجية المعقّدة الخاصة بمحرّك IME
此功能引入了新的 AccessibilityEvent 和 TextAttribute API,以增强屏幕阅读器针对 CJKV 语言输入的语音反馈。CJKV IME 应用现在可以指示在文本撰写期间是否已选择文本转换候选内容。具有编辑字段的应用可以在发送文本更改无障碍事件时指定文本更改类型。例如,应用可以指定在文本撰写期间发生了文本更改,或者文本更改是由提交导致的。这样做可让屏幕阅读器等无障碍服务根据文本修改的性质提供更精确的反馈。
应用采用量
IME 应用:在编辑字段中设置正在撰写的文本时,IME 可以使用
TextAttribute.Builder.setTextSuggestionSelected()来指明是否选择了特定的转换候选对象。具有“编辑字段”权限的应用:维护自定义
InputConnection的应用可以通过调用TextAttribute.isTextSuggestionSelected()来检索候选选择数据。然后,这些应用在调度TYPE_VIEW_TEXT_CHANGED事件时应调用AccessibilityEvent.setTextChangeTypes()。如果应用以 Android 17(API 级别 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.
للسماح للتطبيقات بتخصيص هذا السلوك، يضيف الإصدار 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) أو الإصدارات الأحدث مساران للحفاظ على التواصل مع أجهزة الشبكة المحلية: إما استخدام أدوات اختيار الأجهزة التي تتوسّط فيها المنظومة والتي تحافظ على الخصوصية لتخطّي طلب الإذن، أو طلب هذا الإذن الجديد بشكل صريح في وقت التشغيل للحفاظ على التواصل مع الشبكة المحلية.
لمزيد من المعلومات، يُرجى الاطّلاع على مستندات إذن الشبكة المحلية .
إخفاء كلمات المرور من الأجهزة المادية
إذا كان التطبيق يستهدف الإصدار 17 من نظام التشغيل Android (المستوى 37 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث وكان المستخدم يستخدم جهاز إدخال ماديًا (مثل لوحة مفاتيح خارجية)، سيطبِّق نظام التشغيل Android إعداد show_passwords_physical الجديد على جميع الأحرف في حقل كلمة المرور. يخفي هذا الإعداد تلقائيًا جميع أحرف كلمة المرور.
يعرض نظام Android آخر حرف تم إدخاله من كلمة المرور لمساعدة المستخدم في معرفة ما إذا كان قد أخطأ في كتابة كلمة المرور. ومع ذلك، يصبح هذا الإجراء أقل ضرورة مع لوحات المفاتيح الخارجية الأكبر حجمًا. بالإضافة إلى ذلك، غالبًا ما تحتوي الأجهزة التي تتضمّن لوحات مفاتيح خارجية على شاشات أكبر، ما يزيد من خطر أن يرى شخص ما كلمة المرور التي تم إدخالها.
إذا كان المستخدم يستعمل شاشة الجهاز التي تعمل باللمس، سيطبّق النظام الإعداد الجديد
show_passwords_touch.
حماية كلمات المرور الصالحة لمرة واحدة في رسائل 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) المستقبلية.
تفعيل CT تلقائيًا
如果应用以 Android 17(API 级别 37)或更高版本为目标平台,则默认启用证书透明度 (CT)。(在 Android 16 上,CT 可用,但应用必须选择启用。)
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
对于以 Android 17(API 级别 37)及更高版本为目标平台的应用,当在没有 READ_CONTACTS 权限的情况下访问 ContactsContract.Data 表时,联系人提供程序 2 (CP2) 会强制执行严格的 SQL 查询验证。
在此项更改生效后,如果应用没有 READ_CONTACTS 权限,则在查询 ContactsContract.Data 表时会设置 StrictColumns 和 StrictGrammar 选项。如果查询使用的模式与这些模式不兼容,则会被拒绝并导致抛出异常。
الوسائط
يتضمّن نظام التشغيل 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 لمقابس RFCOMM عبر البلوتوث.
سلوك متسق للدالة read() في BluetoothSocket مع RFCOMM
对于以 Android 17(API 级别 37)为目标平台的应用,
read() 方法从InputStream 获取的
基于 RFCOMM 的 BluetoothSocket 现在会在
套接字关闭或连接断开时返回 -1。
此更改使 RFCOMM 套接字行为与 LE CoC 套接字保持一致,并与标准 InputStream.read()
文档保持一致,该文档指出,当到达流的末尾时,系统会返回 -1。
仅依赖于捕获 IOException 以跳出读取循环的应用可能会受到此更改的影响,并且应更新 BluetoothSocket 读取循环以明确检查返回值 -1。这可确保在远程设备断开连接或套接字关闭时,循环正确终止。如需查看推荐的实现示例,请参阅传输蓝牙数据指南中的代码段。