تغییرات رفتاری: برنامه‌هایی که اندروید ۱۷ یا بالاتر را هدف قرار می‌دهند

مانند نسخه‌های قبلی، اندروید ۱۷ شامل تغییرات رفتاری است که ممکن است بر برنامه شما تأثیر بگذارد. تغییرات رفتاری زیر منحصراً برای برنامه‌هایی اعمال می‌شود که اندروید ۱۷ یا بالاتر را هدف قرار می‌دهند. اگر برنامه شما اندروید ۱۷ یا بالاتر را هدف قرار می‌دهد، باید برنامه خود را برای پشتیبانی از این رفتارها، در صورت لزوم، اصلاح کنید.

حتماً فهرست تغییرات رفتاری که صرف نظر از targetSdkVersion برنامه شما، بر همه برنامه‌های در حال اجرا در اندروید ۱۷ تأثیر می‌گذارند را نیز بررسی کنید.

عملکرد اصلی

اندروید ۱۷ شامل تغییرات زیر است که قابلیت‌های اصلی مختلف سیستم اندروید را اصلاح یا گسترش می‌دهد.

پیاده‌سازی جدید و بدون قفل MessageQueue

با شروع از اندروید ۱۷، برنامه‌هایی که اندروید ۱۷ (سطح API ۳۷) یا بالاتر را هدف قرار می‌دهند، یک پیاده‌سازی جدید و بدون قفل از android.os.MessageQueue دریافت می‌کنند. این پیاده‌سازی جدید عملکرد را بهبود می‌بخشد و فریم‌های از دست رفته را کاهش می‌دهد، اما ممکن است کلاینت‌هایی را که روی فیلدها و متدهای خصوصی MessageQueue تأمل می‌کنند، خراب کند.

برای اطلاعات بیشتر، از جمله استراتژی‌های کاهش، به راهنمای تغییر رفتار MessageQueue مراجعه کنید.

فیلدهای نهایی استاتیک اکنون غیرقابل تغییر هستند

برنامه‌هایی که روی اندروید ۱۷ یا بالاتر اجرا می‌شوند و اندروید ۱۷ (سطح API ۳۷) یا بالاتر را هدف قرار می‌دهند، نمی‌توانند فیلدهای static final را تغییر دهند. اگر برنامه‌ای سعی کند با استفاده از reflection یک فیلد static final تغییر دهد، باعث ایجاد خطای IllegalAccessException می‌شود. تلاش برای تغییر یکی از این فیلدها از طریق APIهای JNI (مانند SetStaticLongField() ) باعث خرابی برنامه خواهد شد.

دسترسی‌پذیری

اندروید ۱۷ تغییرات زیر را برای بهبود دسترسی ایجاد می‌کند.

پشتیبانی از قابلیت دسترسی برای تایپ پیچیده با صفحه کلید فیزیکی IME

此功能引入了新的 AccessibilityEventTextAttribute 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 دارند: اتخاذ انتخابگرهای دستگاه با حفظ حریم خصوصی و با واسطه سیستم برای رد کردن درخواست مجوز، یا درخواست صریح این مجوز جدید در زمان اجرا برای حفظ ارتباط شبکه محلی.

برای اطلاعات بیشتر، به مستندات مجوزهای شبکه محلی مراجعه کنید.

پنهان کردن رمزهای عبور از دستگاه‌های فیزیکی

اگر برنامه‌ای اندروید ۱۷ (سطح API ۳۷) یا بالاتر را هدف قرار دهد و کاربر از یک دستگاه ورودی فیزیکی (مثلاً یک صفحه‌کلید خارجی) استفاده کند، سیستم عامل اندروید تنظیم جدید show_passwords_physical را برای همه کاراکترهای فیلد رمز عبور اعمال می‌کند. به طور پیش‌فرض، این تنظیم همه کاراکترهای رمز عبور را پنهان می‌کند.

سیستم اندروید آخرین کاراکتر رمز عبور تایپ شده را نشان می‌دهد تا به کاربر کمک کند تا در صورت اشتباه تایپ کردن رمز عبور، آن را تشخیص دهد. با این حال، این کار با صفحه کلیدهای خارجی بزرگتر بسیار کمتر ضروری است. علاوه بر این، دستگاه‌های دارای صفحه کلیدهای خارجی اغلب نمایشگرهای بزرگتری دارند که خطر دیدن رمز عبور تایپ شده توسط دیگران را افزایش می‌دهد.

اگر کاربر از صفحه لمسی دستگاه استفاده کند، سیستم تنظیم جدید 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 به صورت پیش‌فرض

اگر برنامه‌ای اندروید ۱۷ (سطح API ۳۷) یا بالاتر را هدف قرار دهد، شفافیت گواهی (CT) به طور پیش‌فرض فعال می‌شود. (در اندروید ۱۶، CT در دسترس است اما برنامه‌ها باید آن را انتخاب می‌کردند .)

DCL بومی امن‌تر—C

اگر برنامه شما اندروید ۱۷ (سطح API ۳۷) یا بالاتر را هدف قرار می‌دهد، محافظت Safer Dynamic Code Loading (DCL) که در اندروید ۱۴ برای فایل‌های DEX و JAR معرفی شد، اکنون به کتابخانه‌های بومی نیز گسترش می‌یابد.

تمام فایل‌های بومی که با استفاده از System.load() بارگذاری می‌شوند، باید به صورت فقط خواندنی علامت‌گذاری شوند. در غیر این صورت، سیستم UnsatisfiedLinkError را نمایش می‌دهد.

ما توصیه می‌کنیم که برنامه‌ها تا حد امکان از بارگذاری پویای کد خودداری کنند، زیرا انجام این کار خطر به خطر افتادن برنامه با تزریق کد یا دستکاری کد را به شدت افزایش می‌دهد.

فاکتورهای شکل دستگاه

اندروید ۱۷ شامل تغییرات زیر است تا تجربه کاربری را در طیف وسیعی از اندازه‌ها و فرم‌فکتورهای دستگاه بهبود بخشد.

تغییرات API پلتفرم برای نادیده گرفتن محدودیت‌های جهت‌گیری، تغییر اندازه و نسبت ابعاد در صفحات نمایش بزرگ (sw>=600dp)

ما در اندروید ۱۶ تغییراتی در API پلتفرم ایجاد کردیم تا محدودیت‌های جهت‌گیری، نسبت ابعاد و قابلیت تغییر اندازه در صفحه نمایش‌های بزرگ (sw >= 600dp) برای برنامه‌هایی که سطح API ۳۶ یا بالاتر را هدف قرار می‌دهند، نادیده گرفته شود . توسعه‌دهندگان می‌توانند با SDK ۳۶ از این تغییرات انصراف دهند، اما این انصراف دیگر برای برنامه‌هایی که اندروید ۱۷ (سطح API ۳۷) یا بالاتر را هدف قرار می‌دهند، در دسترس نخواهد بود.

برای اطلاعات بیشتر، به بخش «محدودیت‌های جهت‌گیری و تغییر اندازه نادیده گرفته می‌شوند» مراجعه کنید.