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

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

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

عملکرد اصلی

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

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

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

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

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

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

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

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

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

این ویژگی، APIهای AccessibilityEvent و TextAttribute جدیدی را برای بهبود بازخورد گفتاری خواننده صفحه نمایش برای ورودی زبان CJKV معرفی می‌کند. برنامه‌های CJKV IME اکنون می‌توانند نشان دهند که آیا یک کاندید تبدیل متن در طول ترکیب متن انتخاب شده است یا خیر. برنامه‌های دارای فیلد ویرایش می‌توانند هنگام ارسال رویدادهای دسترسی تغییر متن، انواع تغییر متن را مشخص کنند. به عنوان مثال، برنامه‌ها می‌توانند مشخص کنند که تغییر متن در طول ترکیب متن رخ داده است یا اینکه تغییر متن ناشی از یک commit است. انجام این کار، سرویس‌های دسترسی مانند خوانندگان صفحه نمایش را قادر می‌سازد تا بازخورد دقیق‌تری را بر اساس ماهیت تغییر متن ارائه دهند.

پذیرش برنامه

  • برنامه‌های IME: هنگام تنظیم متن نوشتاری در فیلدهای ویرایش، IMEها می‌توانند از TextAttribute.Builder.setTextSuggestionSelected() برای نشان دادن اینکه آیا یک کاندید تبدیل خاص انتخاب شده است یا خیر، استفاده کنند.

  • برنامه‌هایی با فیلدهای ویرایش: برنامه‌هایی که یک InputConnection سفارشی دارند می‌توانند داده‌های انتخاب کاندید را با فراخوانی TextAttribute.isTextSuggestionSelected() بازیابی کنند. این برنامه‌ها سپس باید AccessibilityEvent.setTextChangeTypes() را هنگام ارسال رویدادهای TYPE_VIEW_TEXT_CHANGED فراخوانی کنند. برنامه‌هایی که اندروید ۱۷ (سطح API ۳۷) را هدف قرار می‌دهند و از TextView استاندارد استفاده می‌کنند، این ویژگی را به طور پیش‌فرض فعال خواهند داشت. (یعنی، TextView هنگام ارسال رویدادها به سرویس‌های دسترسی، بازیابی داده‌ها از IME و تنظیم انواع تغییر متن را مدیریت خواهد کرد).

  • سرویس‌های دسترسی‌پذیری: سرویس‌های دسترسی‌پذیری که رویدادهای TYPE_VIEW_TEXT_CHANGED را پردازش می‌کنند، می‌توانند AccessibilityEvent.getTextChangeTypes() را فراخوانی کنند تا ماهیت تغییر را شناسایی کرده و استراتژی‌های بازخورد خود را بر اساس آن تنظیم کنند.

حریم خصوصی

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

ECH (سلام کلاینت رمزگذاری شده) به صورت فرصت طلبانه فعال شد

اندروید ۱۷ پشتیبانی پلتفرم از Encrypted Client Hello (ECH) را معرفی می‌کند، یک افزونه TLS که با رمزگذاری Server Name Indication (SNI) در TLS handshake، حریم خصوصی کاربر را افزایش می‌دهد. این رمزگذاری به ناظران شبکه کمک می‌کند تا به راحتی دامنه خاصی را که برنامه شما به آن متصل می‌شود، شناسایی نکنند.

برای برنامه‌هایی که اندروید ۱۷ (سطح API ۳۷) یا بالاتر را هدف قرار می‌دهند، ECH به صورت فرصت‌طلبانه برای اتصالات TLS استفاده می‌شود. ECH تنها در صورتی فعال است که کتابخانه شبکه مورد استفاده توسط برنامه (به عنوان مثال، HttpEngine، WebView یا OkHttp) دارای پشتیبانی یکپارچه ECH باشد و سرور راه دور نیز از پروتکل ECH پشتیبانی کند. اگر ECH قابل مذاکره نباشد، اتصال به طور خودکار به یک handshake استاندارد TLS بدون رمزگذاری SNI برمی‌گردد.

برای اینکه برنامه‌ها بتوانند این رفتار را سفارشی کنند، اندروید ۱۷ یک عنصر جدید <domainEncryption> به فایل پیکربندی امنیت شبکه اضافه می‌کند. توسعه‌دهندگان می‌توانند از <domainEncryption> در تگ‌های <base-config> یا <domain-config> برای انتخاب یک حالت ECH (مثلاً "opportunistic" ، "enabled" یا "disabled" ) به صورت سراسری یا برای هر دامنه استفاده کنند.

برای اطلاعات بیشتر، به مستندات Encrypted Client Hello مراجعه کنید.

مجوز شبکه محلی برای برنامه‌هایی که اندروید ۱۷ را هدف قرار می‌دهند، الزامی است

اندروید ۱۷ مجوز زمان اجرا ACCESS_LOCAL_NETWORK را برای محافظت از کاربران در برابر دسترسی غیرمجاز به شبکه محلی معرفی می‌کند. از آنجا که این مجوز تحت گروه مجوزهای NEARBY_DEVICES موجود قرار می‌گیرد، کاربرانی که قبلاً مجوزهای NEARBY_DEVICES دیگری را اعطا کرده‌اند، دوباره درخواست نمی‌شوند. این الزام جدید مانع از سوءاستفاده برنامه‌های مخرب از دسترسی نامحدود به شبکه محلی برای ردیابی و انگشت‌نگاری مخفیانه کاربر می‌شود. با اعلام و درخواست این مجوز، برنامه شما می‌تواند دستگاه‌های موجود در شبکه محلی (LAN)، مانند دستگاه‌های خانه هوشمند یا گیرنده‌های Casting را کشف و به آنها متصل شود.

برنامه‌هایی که اندروید ۱۷ (سطح API ۳۷) یا بالاتر را هدف قرار می‌دهند، اکنون دو مسیر برای حفظ ارتباط با دستگاه‌های LAN دارند: اتخاذ انتخابگرهای دستگاه با حفظ حریم خصوصی و با واسطه سیستم برای رد کردن درخواست مجوز، یا درخواست صریح این مجوز جدید در زمان اجرا برای حفظ ارتباط شبکه محلی.

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

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

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

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

اگر کاربر از صفحه لمسی دستگاه استفاده کند، سیستم تنظیم جدید show_passwords_touch را اعمال می‌کند.

امنیت

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

امنیت فعالیت

In Android 17, the platform continues its shift toward a "secure-by-default" architecture, introducing a suite of enhancements designed to mitigate high-severity exploits such as phishing, interaction hijacking, and confused deputy attacks. This update requires developers to explicitly opt in to new security standards to maintain app compatibility and user protection.

Key impacts for developers include:

  • BAL hardening & improved opt-in: We are refining Background Activity Launch (BAL) restrictions by extending protections to IntentSender. Developers must migrate away from the legacy MODE_BACKGROUND_ACTIVITY_START_ALLOWED constant. Instead, you should adopt granular controls like MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE, which restricts activity starts to scenarios where the calling app is visible, significantly reducing the attack surface.
  • Adoption tools: Developers should utilize strict mode and updated lint checks to identify legacy patterns and ensure readiness for future target SDK requirements.

فعال کردن CT به صورت پیش‌فرض

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

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

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

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

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

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

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

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

We introduced Platform API changes in Android 16 to ignore orientation, aspect ratio, and resizability restrictions on large screens (sw >= 600dp) for apps targeting API level 36 or higher. Developers have the option to opt out of these changes with SDK 36, but this opt-out will no longer be available for apps that target Android 17 (API level 37) or higher.

For more information, see Restrictions on orientation and resizability are ignored.