مانند نسخههای قبلی، اندروید ۱۷ شامل تغییرات رفتاری است که ممکن است بر برنامه شما تأثیر بگذارد. تغییرات رفتاری زیر منحصراً برای برنامههایی اعمال میشود که اندروید ۱۷ یا بالاتر را هدف قرار میدهند. اگر برنامه شما اندروید ۱۷ یا بالاتر را هدف قرار میدهد، باید برنامه خود را برای پشتیبانی از این رفتارها، در صورت لزوم، اصلاح کنید.
حتماً فهرست تغییرات رفتاری که صرف نظر از targetSdkVersion برنامه شما، بر همه برنامههای در حال اجرا در اندروید ۱۷ تأثیر میگذارند را نیز بررسی کنید.
عملکرد اصلی
اندروید ۱۷ شامل تغییرات زیر است که قابلیتهای اصلی مختلف سیستم اندروید را اصلاح یا گسترش میدهد.
پیادهسازی جدید و بدون قفل MessageQueue
با شروع از اندروید ۱۷، برنامههایی که اندروید ۱۷ یا بالاتر را هدف قرار میدهند، پیادهسازی جدید و بدون قفل android.os.MessageQueue را دریافت میکنند. این پیادهسازی جدید عملکرد را بهبود میبخشد و فریمهای از دست رفته را کاهش میدهد، اما ممکن است کلاینتهایی را که روی فیلدها و متدهای خصوصی MessageQueue تأمل میکنند، خراب کند.
برای اطلاعات بیشتر، از جمله استراتژیهای کاهش، به راهنمای تغییر رفتار MessageQueue مراجعه کنید.
فیلدهای نهایی استاتیک اکنون غیرقابل تغییر هستند
برنامههایی که روی اندروید ۱۷ یا بالاتر اجرا میشوند و اندروید ۱۷ یا بالاتر را هدف قرار میدهند، نمیتوانند فیلدهای 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فراخوانی کنند. برنامههایی که اندروید ۱۷ را هدف قرار میدهند و ازTextViewاستاندارد استفاده میکنند، این ویژگی را به طور پیشفرض فعال خواهند داشت. (یعنی،TextViewهنگام ارسال رویدادها به سرویسهای دسترسی، بازیابی دادهها از IME و تنظیم انواع تغییر متن را مدیریت خواهد کرد).سرویسهای دسترسیپذیری: سرویسهای دسترسیپذیری که رویدادهای
TYPE_VIEW_TEXT_CHANGEDرا پردازش میکنند، میتوانندAccessibilityEvent.getTextChangeTypes()را فراخوانی کنند تا ماهیت تغییر را شناسایی کرده و استراتژیهای بازخورد خود را بر اساس آن تنظیم کنند.
حریم خصوصی
اندروید ۱۷ شامل تغییرات زیر برای بهبود حریم خصوصی کاربران است.
مجوز شبکه محلی برای برنامههایی که اندروید ۱۷ را هدف قرار میدهند، الزامی است
| برای تست موجود است؟ (نسخهی آزمایشی الزامی است) | بله (اندروید ۱۷ یا بالاتر) |
|---|---|
نیاز به تغییر targetSDKVersion دارد؟ (سطح API) | بله (سطح API "CINNAMON_BUN" )برای اطلاعات بیشتر در مورد این مقدار، به مستندات ویژگی manifest مراجعه کنید. |
اندروید ۱۷ مجوز زمان اجرا ACCESS_LOCAL_NETWORK را برای محافظت از کاربران در برابر دسترسی غیرمجاز به شبکه محلی معرفی میکند. از آنجا که این مجوز تحت گروه مجوزهای NEARBY_DEVICES موجود قرار میگیرد، کاربرانی که قبلاً مجوزهای NEARBY_DEVICES دیگری را اعطا کردهاند، دوباره درخواست نمیشوند. این الزام جدید مانع از سوءاستفاده برنامههای مخرب از دسترسی نامحدود به شبکه محلی برای ردیابی و انگشتنگاری مخفیانه کاربر میشود. با اعلام و درخواست این مجوز، برنامه شما میتواند دستگاههای موجود در شبکه محلی (LAN)، مانند دستگاههای خانه هوشمند یا گیرندههای Casting را کشف و به آنها متصل شود.
برنامههایی که اندروید ۱۷ یا بالاتر را هدف قرار میدهند، اکنون دو مسیر برای حفظ ارتباط با دستگاههای LAN دارند: اتخاذ انتخابگرهای دستگاه با حفظ حریم خصوصی و با واسطه سیستم برای رد کردن درخواست مجوز، یا درخواست صریح این مجوز جدید در زمان اجرا برای حفظ ارتباط شبکه محلی.
برای اطلاعات بیشتر، به مستندات مجوزهای شبکه محلی مراجعه کنید.
امنیت
اندروید ۱۷ بهبودهای زیر را در امنیت دستگاه و برنامهها ایجاد میکند.
امنیت فعالیت
در اندروید ۱۷، این پلتفرم به سمت معماری «امن به طور پیشفرض» تغییر جهت داده و مجموعهای از پیشرفتها را معرفی میکند که برای کاهش سوءاستفادههای شدید مانند فیشینگ، ربودن تعامل و حملات تصادفی طراحی شدهاند. این بهروزرسانی از توسعهدهندگان میخواهد که به صراحت استانداردهای امنیتی جدید را برای حفظ سازگاری برنامه و حفاظت از کاربر بپذیرند.
تأثیرات کلیدی برای توسعهدهندگان شامل موارد زیر است:
- مقاومسازی BAL و بهبود انتخاب: ما با گسترش محافظتها به
IntentSender، محدودیتهای راهاندازی فعالیت پسزمینه (BAL) را اصلاح میکنیم. توسعهدهندگان باید از ثابت قدیمیMODE_BACKGROUND_ACTIVITY_START_ALLOWEDفاصله بگیرند. در عوض، باید کنترلهای جزئیتری مانندMODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLEرا اتخاذ کنید که شروع فعالیت را به سناریوهایی محدود میکند که برنامه فراخوانی قابل مشاهده است و به طور قابل توجهی سطح حمله را کاهش میدهد. - ابزارهای پذیرش: توسعهدهندگان باید از حالت strict mode و بررسیهای بهروز شدهی lint برای شناسایی الگوهای قدیمی و اطمینان از آمادگی برای الزامات SDK هدف در آینده استفاده کنند.
فعال کردن CT به صورت پیشفرض
اگر برنامهای اندروید ۱۷ یا بالاتر را هدف قرار دهد، شفافیت گواهی (CT) به طور پیشفرض فعال میشود. (در اندروید ۱۶، CT در دسترس است اما برنامهها باید آن را انتخاب میکردند .)
DCL بومی امنتر—C
اگر برنامه شما اندروید ۱۷ یا بالاتر را هدف قرار میدهد، محافظت Safer Dynamic Code Loading (DCL) که در اندروید ۱۴ برای فایلهای DEX و JAR معرفی شد، اکنون به کتابخانههای بومی نیز گسترش مییابد.
تمام فایلهای بومی که با استفاده از System.load() بارگذاری میشوند، باید به صورت فقط خواندنی علامتگذاری شوند. در غیر این صورت، سیستم UnsatisfiedLinkError را نمایش میدهد.
ما توصیه میکنیم که برنامهها تا حد امکان از بارگذاری پویای کد خودداری کنند، زیرا انجام این کار خطر به خطر افتادن برنامه با تزریق کد یا دستکاری کد را به شدت افزایش میدهد.
فاکتورهای شکل دستگاه
اندروید ۱۷ شامل تغییرات زیر است تا تجربه کاربری را در طیف وسیعی از اندازهها و فرمفکتورهای دستگاه بهبود بخشد.
تغییرات API پلتفرم برای نادیده گرفتن محدودیتهای جهتگیری، تغییر اندازه و نسبت ابعاد در صفحات نمایش بزرگ (sw>=600dp)
ما در اندروید ۱۶ تغییراتی در API پلتفرم ایجاد کردیم تا محدودیتهای جهتگیری، نسبت ابعاد و قابلیت تغییر اندازه در صفحه نمایشهای بزرگ (sw >= 600dp) برای برنامههایی که سطح API ۳۶ یا بالاتر را هدف قرار میدهند، نادیده گرفته شوند . توسعهدهندگان میتوانند با SDK ۳۶ از این تغییرات انصراف دهند، اما این انصراف دیگر برای برنامههایی که اندروید ۱۷ یا بالاتر را هدف قرار میدهند، در دسترس نخواهد بود.
برای اطلاعات بیشتر، به بخش «محدودیتهای جهتگیری و تغییر اندازه نادیده گرفته میشوند» مراجعه کنید.