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

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

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

عملکرد اصلی

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

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

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

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

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

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

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

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

پذیرش برنامه

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

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

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

امنیت

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

امنیت فعالیت

در اندروید ۱۷، این پلتفرم به سمت معماری «امن به طور پیش‌فرض» تغییر جهت داده و مجموعه‌ای از پیشرفت‌ها را معرفی می‌کند که برای کاهش سوءاستفاده‌های شدید مانند فیشینگ، ربودن تعامل و حملات تصادفی طراحی شده‌اند. این به‌روزرسانی از توسعه‌دهندگان می‌خواهد که به صراحت استانداردهای امنیتی جدید را برای حفظ سازگاری برنامه و حفاظت از کاربر بپذیرند.

تأثیرات کلیدی برای توسعه‌دهندگان شامل موارد زیر است:

  • مقاوم‌سازی BAL و بهبود انتخاب: ما با گسترش محافظت‌ها به IntentSender ، محدودیت‌های راه‌اندازی فعالیت پس‌زمینه (BAL) را اصلاح می‌کنیم. توسعه‌دهندگان باید از ثابت قدیمی MODE_BACKGROUND_ACTIVITY_START_ALLOWED فاصله بگیرند. در عوض، باید کنترل‌های جزئی‌تری مانند MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE را اتخاذ کنید که شروع فعالیت را به سناریوهایی محدود می‌کند که برنامه فراخوانی قابل مشاهده است و به طور قابل توجهی سطح حمله را کاهش می‌دهد.
  • ابزارهای پذیرش: توسعه‌دهندگان باید از حالت strict mode و بررسی‌های به‌روز شده‌ی lint برای شناسایی الگوهای قدیمی و اطمینان از آمادگی برای الزامات SDK هدف در آینده استفاده کنند.

محافظت‌های میزبان محلی

برای بهبود امنیت پلتفرم و حفظ حریم خصوصی کاربر، اندروید ۱۷ یک مجوز جدید در زمان نصب به نام USE_LOOPBACK_INTERFACE معرفی می‌کند. این تغییر، ارتباطات بین برنامه‌ای و بین پروفایلی را از طریق رابط loopback (به عنوان مثال، 127.0.0.1 یا ::1 ) محدود می‌کند، که قبلاً به طور ضمنی با مجوز INTERNET مجاز بود. برای برنامه‌هایی که اندروید ۱۷ یا بالاتر را هدف قرار می‌دهند، قوانین زیر اعمال می‌شود:

  • رضایت متقابل الزامی است: ارتباط بین برنامه‌ها و پروفایل‌های مختلف اکنون به طور پیش‌فرض مسدود شده است. برای موفقیت اتصال، هم برنامه فرستنده و هم برنامه گیرنده باید صریحاً مجوز USE_LOOPBACK_INTERFACE را در مانیفست‌های خود اعلام کنند.
  • ترافیک درون برنامه‌ای معاف: ارتباط حلقه‌ای در همان برنامه (ارتباط درون برنامه‌ای ) بدون تغییر باقی می‌ماند و نیازی به این مجوز جدید ندارد.
  • رفتار SDK هدف:
    • برنامه برای اندروید ۱۷ یا بالاتر: مجوز باید صریحاً درخواست شود. در صورت عدم وجود آن، عملیات سوکت (مانند اتصال TCP یا ارسال UDP) با شکست مواجه می‌شود و معمولاً خطای EPERM (عملیات مجاز نیست) را برمی‌گرداند.
    • برنامه‌هایی که API سطح ۳۶ یا پایین‌تر را هدف قرار می‌دهند: این مجوز در INTERNET به عنوان یک مجوز تقسیم‌شده در نظر گرفته می‌شود. برنامه‌هایی که API سطوح پایین‌تر را هدف قرار می‌دهند، در صورت داشتن INTERNET این مجوز را به طور خودکار دریافت می‌کنند.
  • هشدار سازگاری: اگر یک برنامه‌ی گیرنده، هدف خود را به اندروید ۱۷ به‌روزرسانی کند اما این مجوز را درخواست نکند، اتصالات ورودی از برنامه‌های دیگر رد می‌شوند، حتی اگر برنامه‌ی فرستنده سطح API پایین‌تری را هدف قرار دهد.

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

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

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

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

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

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

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

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

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

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

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