مانند نسخههای قبلی، اندروید ۱۷ شامل تغییرات رفتاری است که ممکن است بر برنامه شما تأثیر بگذارد. تغییرات رفتاری زیر منحصراً برای برنامههایی اعمال میشود که اندروید ۱۷ یا بالاتر را هدف قرار میدهند. اگر برنامه شما اندروید ۱۷ یا بالاتر را هدف قرار میدهد، باید برنامه خود را برای پشتیبانی از این رفتارها، در صورت لزوم، اصلاح کنید.
حتماً فهرست تغییرات رفتاری که صرف نظر از targetSdkVersion برنامه شما، بر همه برنامههای در حال اجرا در اندروید ۱۷ تأثیر میگذارند را نیز بررسی کنید.
عملکرد اصلی
اندروید ۱۷ شامل تغییرات زیر است که قابلیتهای اصلی مختلف سیستم اندروید را اصلاح یا گسترش میدهد.
پیادهسازی جدید و بدون قفل MessageQueue
با شروع از اندروید ۱۷، برنامههایی که اندروید ۱۷ (سطح API ۳۷) یا بالاتر را هدف قرار میدهند، یک پیادهسازی جدید و بدون قفل از android.os.MessageQueue دریافت میکنند. این پیادهسازی جدید عملکرد را بهبود میبخشد و فریمهای از دست رفته را کاهش میدهد، اما ممکن است کلاینتهایی را که روی فیلدها و متدهای خصوصی MessageQueue تأمل میکنند، خراب کند.
برای اطلاعات بیشتر، از جمله استراتژیهای کاهش، به راهنمای تغییر رفتار MessageQueue مراجعه کنید.
فیلدهای نهایی استاتیک اکنون غیرقابل تغییر هستند
برنامههایی که روی اندروید ۱۷ یا بالاتر اجرا میشوند و اندروید ۱۷ (سطح API ۳۷) یا بالاتر را هدف قرار میدهند، نمیتوانند فیلدهای static final را تغییر دهند. اگر برنامهای سعی کند با استفاده از reflection یک فیلد static final تغییر دهد، باعث ایجاد خطای IllegalAccessException میشود. تلاش برای تغییر یکی از این فیلدها از طریق APIهای JNI (مانند SetStaticLongField() ) باعث خرابی برنامه خواهد شد.
دسترسیپذیری
اندروید ۱۷ تغییرات زیر را برای بهبود دسترسی ایجاد میکند.
پشتیبانی از قابلیت دسترسی برای تایپ پیچیده با صفحه کلید فیزیکی 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()来识别修改的性质,并相应地调整其反馈策略。
حریم خصوصی
اندروید ۱۷ شامل تغییرات زیر برای بهبود حریم خصوصی کاربران است.
مجوز شبکه محلی برای برنامههایی که اندروید ۱۷ را هدف قرار میدهند، الزامی است
| برای تست موجود است؟ (نسخهی آزمایشی الزامی است) | بله (اندروید ۱۷ یا بالاتر) |
|---|---|
نیاز به تغییر targetSDKVersion دارد؟ (سطح API) | بله (سطح API 37) برای اطلاعات بیشتر در مورد این مقدار، به مستندات ویژگی manifest مراجعه کنید. |
اندروید ۱۷ مجوز زمان اجرا ACCESS_LOCAL_NETWORK را برای محافظت از کاربران در برابر دسترسی غیرمجاز به شبکه محلی معرفی میکند. از آنجا که این مجوز تحت گروه مجوزهای NEARBY_DEVICES موجود قرار میگیرد، کاربرانی که قبلاً مجوزهای NEARBY_DEVICES دیگری را اعطا کردهاند، دوباره درخواست نمیشوند. این الزام جدید مانع از سوءاستفاده برنامههای مخرب از دسترسی نامحدود به شبکه محلی برای ردیابی و انگشتنگاری مخفیانه کاربر میشود. با اعلام و درخواست این مجوز، برنامه شما میتواند دستگاههای موجود در شبکه محلی (LAN)، مانند دستگاههای خانه هوشمند یا گیرندههای Casting را کشف و به آنها متصل شود.
برنامههایی که اندروید ۱۷ (سطح API ۳۷) یا بالاتر را هدف قرار میدهند، اکنون دو مسیر برای حفظ ارتباط با دستگاههای LAN دارند: اتخاذ انتخابگرهای دستگاه با حفظ حریم خصوصی و با واسطه سیستم برای رد کردن درخواست مجوز، یا درخواست صریح این مجوز جدید در زمان اجرا برای حفظ ارتباط شبکه محلی.
برای اطلاعات بیشتر، به مستندات مجوزهای شبکه محلی مراجعه کنید.
پنهان کردن رمزهای عبور از دستگاههای فیزیکی
如果应用以 Android 17(API 级别 37)或更高版本为目标平台,并且用户使用的是实体输入设备(例如外接键盘),则 Android 操作系统会将新的 show_passwords_physical 设置应用于密码字段中的所有字符。默认情况下,该设置会隐藏所有密码字符。
Android 系统会显示最后输入的密码字符,以帮助用户查看密码是否输入错误。不过,对于较大的外接键盘,这种做法的必要性会大大降低。此外,配备外接键盘的设备通常具有更大的显示屏,这会增加他人看到所输入密码的风险。
如果用户使用的是设备的触屏,系统会应用新的 show_passwords_touch 设置。
امنیت
اندروید ۱۷ بهبودهای زیر را در امنیت دستگاه و برنامهها ایجاد میکند.
امنیت فعالیت
在 Android 17 中,平台继续向“默认安全”架构转变,引入了一系列旨在缓解严重程度较高的漏洞利用(例如网络钓鱼、交互劫持和混淆代理攻击)的增强功能。此更新要求开发者明确选择启用新的安全标准,以保持应用兼容性和用户保护。
对开发者的主要影响包括:
- BAL 强化和改进的选择启用机制:我们正在通过将保护范围扩展到
IntentSender来完善后台 activity 启动 (BAL) 限制。 开发者必须弃用旧版MODE_BACKGROUND_ACTIVITY_START_ALLOWED常量。相反,您应采用精细的控制措施,例如MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE,该措施会将 activity 启动限制在调用应用可见的场景中,从而显著减小攻击面。 - 采用工具:开发者应利用严格模式和更新后的 lint 检查来识别旧版模式,并确保做好准备,以满足未来的目标 SDK 要求。
فعال کردن CT به صورت پیشفرض
如果应用以 Android 17(API 级别 37)或更高版本为目标平台, 证书透明度 (CT) 默认处于启用状态。(在 Android 16 上,CT 可用,但应用必须选择启用。)
DCL بومی امنتر—C
اگر برنامه شما اندروید ۱۷ (سطح API ۳۷) یا بالاتر را هدف قرار میدهد، محافظت Safer Dynamic Code Loading (DCL) که در اندروید ۱۴ برای فایلهای DEX و JAR معرفی شد، اکنون به کتابخانههای بومی نیز گسترش مییابد.
تمام فایلهای بومی که با استفاده از System.load() بارگذاری میشوند، باید به صورت فقط خواندنی علامتگذاری شوند. در غیر این صورت، سیستم UnsatisfiedLinkError را نمایش میدهد.
ما توصیه میکنیم که برنامهها تا حد امکان از بارگذاری پویای کد خودداری کنند، زیرا انجام این کار خطر به خطر افتادن برنامه با تزریق کد یا دستکاری کد را به شدت افزایش میدهد.
فاکتورهای شکل دستگاه
اندروید ۱۷ شامل تغییرات زیر است تا تجربه کاربری را در طیف وسیعی از اندازهها و فرمفکتورهای دستگاه بهبود بخشد.
تغییرات API پلتفرم برای نادیده گرفتن محدودیتهای جهتگیری، تغییر اندازه و نسبت ابعاد در صفحات نمایش بزرگ (sw>=600dp)
ما در اندروید ۱۶ تغییراتی در API پلتفرم ایجاد کردیم تا محدودیتهای جهتگیری، نسبت ابعاد و قابلیت تغییر اندازه در صفحه نمایشهای بزرگ (sw >= 600dp) برای برنامههایی که سطح API ۳۶ یا بالاتر را هدف قرار میدهند، نادیده گرفته شود . توسعهدهندگان میتوانند با SDK ۳۶ از این تغییرات انصراف دهند، اما این انصراف دیگر برای برنامههایی که اندروید ۱۷ (سطح API ۳۷) یا بالاتر را هدف قرار میدهند، در دسترس نخواهد بود.
برای اطلاعات بیشتر، به بخش «محدودیتهای جهتگیری و تغییر اندازه نادیده گرفته میشوند» مراجعه کنید.