كما هو الحال في الإصدارات السابقة، يتضمّن Android 17 تغييرات في السلوك قد تؤثر في تطبيقك. تنطبق تغييرات السلوك التالية حصريًا على التطبيقات التي تستهدف الإصدار 17 من نظام التشغيل Android أو الإصدارات الأحدث. إذا كان تطبيقك يستهدف الإصدار 17 من نظام التشغيل Android أو الإصدارات الأحدث، عليك تعديل تطبيقك ليتوافق مع هذه السلوكيات، حيثما ينطبق ذلك.
احرص أيضًا على مراجعة قائمة التغييرات في السلوك التي تؤثّر في جميع التطبيقات
التي تعمل على Android 17 بغض النظر عن targetSdkVersion لتطبيقك.
تجربة المستخدم وواجهة مستخدم النظام
يتضمّن نظام التشغيل Android 17 التغييرات التالية التي تهدف إلى توفير تجربة استخدام أكثر اتساقًا وسلاسة.
أداة الحدّ الأقصى للذاكرة
Beginning with Android 17, for apps targeting
Android 17 (API level 37) or higher, the system enforces a strict memory
limit (1.5 * screen width * screen height * 4) against the combined memory usage
of both Bitmaps and Icons present in the RemoteViews parcel. Exceeding these
limits throws a fatal IllegalArgumentException and crashes the app's process.
For more information, see UpdateAppWidget.
الوظيفة الأساسية
يتضمّن نظام التشغيل Android 17 التغييرات التالية التي تعدّل أو توسّع العديد من الإمكانات الأساسية لنظام التشغيل Android.
تنفيذ جديد لـ MessageQueue بدون قفل
بدءًا من الإصدار 17 من نظام التشغيل Android، تتلقّى التطبيقات التي تستهدف الإصدار 17 من نظام التشغيل Android (المستوى 37 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث تنفيذًا جديدًا غير متزامن للدالة android.os.MessageQueue. يؤدي التنفيذ الجديد إلى تحسين الأداء وتقليل عدد اللقطات التي لم يتم عرضها، ولكن قد يؤدي إلى تعطّل العملاء الذين يعتمدون على الحقول والأساليب الخاصة MessageQueue.
لمزيد من المعلومات، بما في ذلك استراتيجيات تخفيف الأثر، يُرجى الاطّلاع على إرشادات تغيير سلوك MessageQueue.
أصبحت الحقول الثابتة النهائية غير قابلة للتعديل
如果应用在 Android 17 或更高版本上运行,且以 Android 17(API 级别 37)或更高版本为目标平台,则无法更改 static final 字段。如果应用尝试使用反射来更改 static final 字段,则会导致 IllegalAccessException。尝试通过 JNI API(例如 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)
Android 17 引入了对加密 Client Hello (ECH) 的平台支持。ECH 是一项 TLS 扩展,可通过加密 TLS 握手中的服务器名称指示 (SNI) 来增强用户隐私保护。这种加密有助于防止网络观察者轻易识别出您的应用所连接的特定网域。
对于以 Android 17(API 级别 37)或更高版本为目标平台的应用,ECH 用于 TLS 连接。只有当应用使用的网络库(例如 HttpEngine、WebView 或 OkHttp)已集成 ECH 支持,并且远程服务器也支持 ECH 协议时,ECH 才会处于有效状态。如果无法协商 ECH,客户端会发送包含随机内容的 ECH 扩展程序(一种称为 ECH GREASE 的机制)。如需详细了解 ECH GREASE 的运作方式,请参阅 RFC 9849。
为了允许应用自定义此行为,Android 17 向网络安全配置文件添加了一个新的 <domainEncryption> 元素。开发者可以在 <base-config> 或 <domain-config> 标记中使用 <domainEncryption>,以全局或按网域选择 ECH 模式(例如 "enabled" 或 "disabled")。
如需了解详情,请参阅加密的客户端 Hello 文档。
يجب منح إذن الوصول إلى الشبكة المحلية للتطبيقات التي تستهدف الإصدار 17 من نظام التشغيل Android
يقدّم نظام التشغيل Android 17 إذن التشغيل ACCESS_LOCAL_NETWORK لحماية المستخدمين من الوصول غير المصرَّح به إلى الشبكة المحلية. وبما أنّ هذا الإذن يندرج ضمن مجموعة أذونات NEARBY_DEVICES الحالية، لن يُطلب من المستخدمين الذين سبق لهم منح أذونات NEARBY_DEVICES أخرى الموافقة على هذا الإذن مرة أخرى. يمنع هذا الشرط الجديد التطبيقات الضارة من استغلال إمكانية الوصول غير المحدود إلى الشبكة المحلية لتتبُّع المستخدمين واستكشاف تفاصيلهم بشكل سرّي. من خلال الإفصاح عن هذا الإذن وطلبه، يمكن لتطبيقك اكتشاف الأجهزة المتصلة بشبكة المنطقة المحلية (LAN) والربط بها، مثل أجهزة المنزل الذكي أو أجهزة استقبال البث.
تتوفّر الآن طريقتان للتطبيقات التي تستهدف الإصدار 17 من نظام التشغيل Android (المستوى 37 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث للحفاظ على التواصل مع الأجهزة على الشبكة المحلية: استخدام أدوات اختيار الأجهزة التي تتوسّط فيها الأنظمة وتحافظ على الخصوصية لتخطّي طلب الإذن، أو طلب هذا الإذن الجديد بشكل صريح في وقت التشغيل للحفاظ على التواصل مع الشبكة المحلية.
لمزيد من المعلومات، يُرجى الاطّلاع على مستندات إذن الوصول إلى الشبكة المحلية.
إخفاء كلمات المرور من الأجهزة المادية
如果应用以 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 中,平台继续向“默认安全”架构转变,引入了一系列旨在缓解严重程度较高的漏洞利用(例如网络钓鱼、交互劫持和混淆代理攻击)的增强功能。此更新要求开发者明确选择启用新的安全标准,以保持应用兼容性和用户保护。
对开发者的主要影响包括:
- BAL 安全加固和改进的选择启用机制:我们正在通过将保护范围扩展到
IntentSender来完善后台 Activity 启动 (BAL) 限制。开发者必须弃用旧版MODE_BACKGROUND_ACTIVITY_START_ALLOWED常量。相反,您应采用精细的控制措施,例如MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE,该措施会将 activity 启动限制在调用应用可见的场景中,从而显著减小攻击面。 - 采用工具:开发者应利用严格模式和更新后的 lint 检查来识别旧版模式,并确保应用符合未来的目标 SDK 要求。
تفعيل "المحادثة الذكية" تلقائيًا
如果应用以 Android 17(API 级别 37)或更高版本为目标平台,则默认启用证书透明度 (CT)。(在 Android 16 上,CT 可用,但应用必须选择启用。)
Safer Native DCL—C
إذا كان تطبيقك يستهدف الإصدار 17 من نظام التشغيل Android (المستوى 37 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث، ستشمل الحماية الأحدث من ميزة "تحميل الرموز البرمجية الديناميكية" (DCL) التي تم طرحها في Android 14 لملفات DEX وJAR المكتبات المجمّعة من رموز برمجية أصلية.
يجب وضع علامة "للقراءة فقط" على جميع الملفات الأصلية التي يتم تحميلها باستخدام System.load().
وفي الحالات الأخرى، يعرض النظام الخطأ UnsatisfiedLinkError.
ننصح التطبيقات بتجنُّب تحميل الرموز البرمجية بشكل ديناميكي كلما أمكن ذلك، لأنّ هذا الإجراء يزيد بشكل كبير من خطر تعرُّض التطبيق للاختراق من خلال إدخال رموز برمجية أو التلاعب بها.
تقييد حقول معلومات التعريف الشخصية في عرض بيانات CP2
بالنسبة إلى التطبيقات التي تستهدف الإصدار 17 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات (API) في Android) والإصدارات الأحدث، يفرض "مقدِّم جهات الاتصال 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. إذا كان طلب البحث يستخدم نمطًا غير متوافق مع هذه الأنماط، سيتم رفضه وسيؤدي إلى حدوث استثناء.
Intelligence
يتضمّن نظام التشغيل Android 17 التغييرات التالية على ميزة "الذكاء الاصطناعي في النظام".
إيقاف طريقة setContentCaptureEnabled نهائيًا
تكون ميزة "التقاط المحتوى" مفعَّلة تلقائيًا على بعض الأجهزة للسماح لميزات الذكاء الاصطناعي على الجهاز بتحليل محتوى الشاشة من أجل تقديم تجارب ذكية.
اعتبارًا من الإصدار 17 من نظام التشغيل Android، سيتم إيقاف طريقة واجهة برمجة التطبيقات
ContentCaptureManager.setContentCaptureEnabled(boolean) نهائيًا. بالنسبة إلى التطبيقات التي تستهدف الإصدار 17 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 37) أو الإصدارات الأحدث، لن يؤدي استدعاء setContentCaptureEnabled(false) إلى إيقاف ميزة "التقاط المحتوى".
إذا كان تطبيقك بحاجة إلى مواصلة إيقاف ميزة "التقاط المحتوى" أو حظر التقاط النظام لمحتوى الشاشة، عليك الانتقال إلى استخدام مَعلمة تخطيط النافذة FLAG_SECURE.
لإيقاف ميزة "التقاط المحتوى"، اضبط العلامة 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)
أجرينا تغييرات على Platform API في Android 16 لتجاهل قيود اتجاه الشاشة ونسبة العرض إلى الارتفاع وإمكانية تغيير الحجم على الشاشات الكبيرة (sw >= 600 وحدة بكسل مستقلة الكثافة) للتطبيقات التي تستهدف المستوى 36 من واجهة برمجة التطبيقات أو الإصدارات الأحدث. يمكن للمطوّرين إيقاف هذه التغييرات باستخدام حزمة SDK 36، ولكن لن يكون خيار الإيقاف هذا متاحًا للتطبيقات التي تستهدف الإصدار 17 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 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 的返回值。这可确保在远程设备断开连接或套接字关闭时,循环正确终止。如需查看推荐的实现示例,请参阅传输蓝牙数据指南中的代码段。