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

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

حتماً فهرستی از تغییرات رفتاری را نیز مرور کنید که بر همه برنامه‌های در حال اجرا در Android 16 بدون توجه به targetSdkVersion برنامه شما تأثیر می‌گذارد.

تجربه کاربری و رابط کاربری سیستم

Android 16 (سطح API 36) شامل تغییرات زیر است که برای ایجاد یک تجربه کاربری سازگارتر و بصری در نظر گرفته شده است.

انصراف لبه به لبه حذف می شود

Android 15 برای برنامه‌هایی که Android 15 را هدف قرار می‌دهند (سطح API 35) لبه به لبه اعمال می‌شود ، اما برنامه شما می‌تواند با تنظیم R.attr#windowOptOutEdgeToEdgeEnforcement روی true انصراف دهد. برای برنامه‌هایی که Android 16 (سطح API 36) را هدف قرار می‌دهند، R.attr#windowOptOutEdgeToEdgeEnforcement منسوخ و غیرفعال شده است، و برنامه شما نمی‌تواند از رفتن لبه به لبه انصراف دهد.

  • اگر برنامه شما Android 16 (سطح API 36) را هدف قرار می دهد و در دستگاه Android 15 اجرا می شود، R.attr#windowOptOutEdgeToEdgeEnforcement به کار خود ادامه می دهد.
  • اگر برنامه شما Android 16 (سطح API 36) را هدف قرار می دهد و در دستگاه Android 16 اجرا می شود، R.attr#windowOptOutEdgeToEdgeEnforcement غیرفعال است.

برای آزمایش در Android 16 Beta 3، مطمئن شوید که برنامه شما از لبه به لبه پشتیبانی می کند و هرگونه استفاده از R.attr#windowOptOutEdgeToEdgeEnforcement را حذف کنید تا برنامه شما از لبه به لبه در دستگاه Android 15 نیز پشتیبانی کند. برای پشتیبانی از لبه به لبه، به راهنمای نوشتن و مشاهده مراجعه کنید.

،

Android 15 برای برنامه‌هایی که Android 15 را هدف قرار می‌دهند (سطح API 35) لبه به لبه اعمال می‌شود ، اما برنامه شما می‌تواند با تنظیم R.attr#windowOptOutEdgeToEdgeEnforcement روی true انصراف دهد. برای برنامه‌هایی که Android 16 (سطح API 36) را هدف قرار می‌دهند، R.attr#windowOptOutEdgeToEdgeEnforcement منسوخ و غیرفعال شده است، و برنامه شما نمی‌تواند از رفتن لبه به لبه انصراف دهد.

  • اگر برنامه شما Android 16 (سطح API 36) را هدف قرار می دهد و در دستگاه Android 15 اجرا می شود، R.attr#windowOptOutEdgeToEdgeEnforcement به کار خود ادامه می دهد.
  • اگر برنامه شما Android 16 (سطح API 36) را هدف قرار می دهد و در دستگاه Android 16 اجرا می شود، R.attr#windowOptOutEdgeToEdgeEnforcement غیرفعال است.

برای آزمایش در Android 16 Beta 3، مطمئن شوید که برنامه شما از لبه به لبه پشتیبانی می کند و هرگونه استفاده از R.attr#windowOptOutEdgeToEdgeEnforcement را حذف کنید تا برنامه شما از لبه به لبه در دستگاه Android 15 نیز پشتیبانی کند. برای پشتیبانی از لبه به لبه، به راهنمای نوشتن و مشاهده مراجعه کنید.

،

Android 15 برای برنامه‌هایی که Android 15 را هدف قرار می‌دهند (سطح API 35) لبه به لبه اعمال می‌شود ، اما برنامه شما می‌تواند با تنظیم R.attr#windowOptOutEdgeToEdgeEnforcement روی true انصراف دهد. برای برنامه‌هایی که Android 16 (سطح API 36) را هدف قرار می‌دهند، R.attr#windowOptOutEdgeToEdgeEnforcement منسوخ و غیرفعال شده است، و برنامه شما نمی‌تواند از رفتن لبه به لبه انصراف دهد.

  • اگر برنامه شما Android 16 (سطح API 36) را هدف قرار می دهد و در دستگاه Android 15 اجرا می شود، R.attr#windowOptOutEdgeToEdgeEnforcement به کار خود ادامه می دهد.
  • اگر برنامه شما Android 16 (سطح API 36) را هدف قرار می دهد و در دستگاه Android 16 اجرا می شود، R.attr#windowOptOutEdgeToEdgeEnforcement غیرفعال است.

برای آزمایش در Android 16 Beta 3، مطمئن شوید که برنامه شما از لبه به لبه پشتیبانی می کند و هرگونه استفاده از R.attr#windowOptOutEdgeToEdgeEnforcement را حذف کنید تا برنامه شما از لبه به لبه در دستگاه Android 15 نیز پشتیبانی کند. برای پشتیبانی از لبه به لبه، به راهنمای نوشتن و مشاهده مراجعه کنید.

مهاجرت یا انصراف برای بازگشت پیش‌بینی لازم است

برای برنامه‌هایی که Android 16 (سطح API 36) یا بالاتر را هدف قرار می‌دهند و روی دستگاه Android 16 یا بالاتر اجرا می‌شوند، انیمیشن‌های پیش‌بینی کننده سیستم برگشت (بازگشت به خانه، کار متقابل و فعالیت متقابل) به طور پیش‌فرض فعال هستند. علاوه بر این، onBackPressed فراخوانی نمی شود و KeyEvent.KEYCODE_BACK دیگر ارسال نمی شود.

اگر برنامه‌تان رویداد برگشتی را متوقف کرد و هنوز به حالت پیش‌بینی منتقل نشده‌اید، برنامه‌تان را به‌روزرسانی کنید تا از API‌های پیمایش برگشتی پشتیبانی‌شده استفاده کند . یا با تنظیم ویژگی android:enableOnBackInvokedCallback روی false در تگ <application> یا <activity> فایل AndroidManifest.xml برنامه خود، موقتاً انصراف دهید.

انیمیشن پیش بینی بازگشت به خانه.
انیمیشن متقابل پیش بینی کننده.
انیمیشن متقابل پیش بینی کننده.

APIهای فونت زیبا منسوخ و غیرفعال شدند

برنامه‌هایی که Android 15 را هدف قرار می‌دهند (سطح API 35) دارای ویژگی elegantTextHeight TextView به‌طور پیش‌فرض روی true تنظیم شده‌اند و فونت فشرده را با فونتی که بسیار خواناتر است جایگزین می‌کند. می‌توانید با تنظیم ویژگی elegantTextHeight روی false این مورد را لغو کنید.

Android 16 ویژگی elegantTextHeight را منسوخ می‌کند، و زمانی که برنامه شما Android 16 را هدف قرار دهد، این ویژگی نادیده گرفته می‌شود. «فونت‌های UI» که توسط این APIها کنترل می‌شوند، متوقف می‌شوند، بنابراین باید هر گونه طرح‌بندی را برای اطمینان از ارائه متن ثابت و ثابت در آینده به زبان‌های عربی، لائوس، میانمار، تامیل، گجراتی، مالزی، تایلندی، تله‌آلو، کانا تطبیق دهید.

رفتار elegantTextHeight برای برنامه‌هایی که Android 14 (سطح API 34) و پایین‌تر را هدف قرار می‌دهند، یا برای برنامه‌هایی که Android 15 را هدف قرار می‌دهند (سطح API 35) که با تنظیم ویژگی elegantTextHeight روی false ، پیش‌فرض را لغو می‌کنند.
رفتار elegantTextHeight برای برنامه‌هایی که Android 16 را هدف قرار می‌دهند، یا برای برنامه‌هایی که Android 15 را هدف قرار می‌دهند (سطح API 35) که با تنظیم ویژگی elegantTextHeight روی false ، پیش‌فرض را لغو نکرده‌اند.

عملکرد اصلی

اندروید 16 (سطح API 36) شامل تغییرات زیر است که قابلیت‌های هسته‌ای مختلف سیستم اندروید را اصلاح یا گسترش می‌دهد.

بهینه سازی زمان بندی کار با نرخ ثابت

قبل از هدف قرار دادن اندروید 16، زمانی که scheduleAtFixedRate اجرای یک کار را به دلیل خارج از چرخه حیات فرآیند معتبر از دست داد، همه اجراهای از دست رفته بلافاصله با بازگشت برنامه به چرخه حیات معتبر اجرا می شوند.

هنگام هدف قرار دادن Android 16، حداکثر یک اجرای از دست رفته scheduleAtFixedRate بلافاصله پس از بازگشت برنامه به چرخه حیات معتبر اجرا می شود. انتظار می رود این تغییر رفتار باعث بهبود عملکرد برنامه شود. این رفتار را در برنامه خود آزمایش کنید تا بررسی کنید آیا برنامه شما تحت تأثیر قرار گرفته است یا خیر. همچنین می‌توانید با استفاده از چارچوب سازگاری برنامه و فعال کردن پرچم سازگار STPE_SKIP_MULTIPLE_MISSED_PERIODIC_TASKS آزمایش کنید.

عوامل شکل دستگاه

Android 16 (سطح API 36) شامل تغییرات زیر برای برنامه‌ها هنگام نمایش در دستگاه‌های صفحه بزرگ است.

طرح‌بندی‌های تطبیقی

با توجه به اینکه اکنون برنامه‌های اندروید بر روی دستگاه‌های مختلف (مانند تلفن‌ها، تبلت‌ها، تاشوها، رایانه‌های رومیزی، ماشین‌ها و تلویزیون‌ها) و حالت‌های پنجره‌سازی روی صفحه‌های بزرگ (مانند پنجره‌های تقسیم‌شده و دسک‌تاپ) اجرا می‌شوند، توسعه‌دهندگان باید برنامه‌های اندرویدی بسازند که با هر اندازه صفحه و پنجره سازگار باشد، صرف نظر از جهت‌گیری دستگاه. پارادایم هایی مانند محدود کردن جهت گیری و تغییر اندازه در دنیای چند دستگاهی امروزی بسیار محدود کننده هستند.

جهت گیری، قابلیت تغییر اندازه و محدودیت های نسبت تصویر را نادیده بگیرید

برای برنامه‌هایی که Android 16 (سطح API 36) را هدف قرار می‌دهند، Android 16 شامل تغییراتی در نحوه مدیریت سیستم جهت‌گیری، قابلیت تغییر اندازه و محدودیت‌های نسبت ابعاد است. در نمایشگرهایی با کمترین عرض >= 600dp، محدودیت ها دیگر اعمال نمی شوند. برنامه‌ها همچنین کل پنجره نمایشگر را بدون توجه به نسبت ابعاد یا جهت‌گیری ترجیحی کاربر پر می‌کنند و از ستون‌باکسینگ استفاده نمی‌شود.

این تغییر رفتار پلت فرم استاندارد جدیدی را معرفی می کند. اندروید در حال حرکت به سمت مدلی است که انتظار می رود برنامه ها با جهت گیری ها، اندازه های نمایشگر و نسبت های مختلف سازگار شوند. محدودیت‌هایی مانند جهت‌گیری ثابت یا قابلیت تغییر اندازه محدود، مانع از سازگاری برنامه می‌شوند، بنابراین توصیه می‌کنیم برنامه خود را برای ارائه بهترین تجربه ممکن برای کاربر سازگار کنید .

همچنین می‌توانید این رفتار را با استفاده از چارچوب سازگاری برنامه و فعال کردن پرچم سازگار UNIVERSAL_RESIZABLE_BY_DEFAULT آزمایش کنید.

تغییرات متداول شکستن

نادیده گرفتن محدودیت‌های جهت، قابلیت تغییر اندازه و نسبت ابعاد ممکن است بر رابط کاربری برنامه شما در برخی از دستگاه‌ها تأثیر بگذارد، به‌ویژه عناصری که برای طرح‌بندی‌های کوچک قفل‌شده در جهت عمودی طراحی شده‌اند: برای مثال، مسائلی مانند طرح‌بندی‌های کشیده و انیمیشن‌ها و اجزای خارج از صفحه. هر گونه فرضی در مورد نسبت تصویر یا جهت‌گیری می‌تواند باعث ایجاد مشکلات بصری در برنامه شما شود. درباره نحوه اجتناب از آنها و بهبود رفتار تطبیقی ​​برنامه خود بیشتر بیاموزید .

اجازه چرخش دستگاه منجر به ایجاد مجدد فعالیت بیشتر می شود که در صورت عدم حفظ صحیح می تواند منجر به از دست دادن حالت کاربر شود. نحوه ذخیره صحیح حالت رابط کاربری را در حالت های ذخیره رابط کاربری بیاموزید.

جزئیات پیاده سازی

ویژگی های مانیفست زیر و API های زمان اجرا در دستگاه های صفحه بزرگ در حالت تمام صفحه و چند پنجره نادیده گرفته می شوند:

مقادیر زیر برای screenOrientation ، setRequestedOrientation() و getRequestedOrientation() نادیده گرفته می شوند:

  • portrait
  • reversePortrait
  • sensorPortrait
  • userPortrait
  • landscape
  • reverseLandscape
  • sensorLandscape
  • userLandscape

با توجه به قابلیت تغییر اندازه نمایشگر، android:resizeableActivity="false" ، android:minAspectRatio و android:maxAspectRatio هیچ تاثیری ندارند.

برای برنامه‌هایی که Android 16 (سطح API 36) را هدف قرار می‌دهند، محدودیت‌های جهت‌گیری برنامه، قابلیت تغییر اندازه و نسبت ابعاد به طور پیش‌فرض در صفحه‌های بزرگ نادیده گرفته می‌شوند، اما هر برنامه‌ای که کاملاً آماده نیست می‌تواند موقتاً این رفتار را با انصراف لغو کند (که منجر به رفتار قبلی یعنی قرار گرفتن در حالت سازگاری می‌شود).

استثنائات

محدودیت‌های جهت‌گیری، قابلیت تغییر اندازه و نسبت تصویر Android 16 در شرایط زیر اعمال نمی‌شوند:

  • بازی ها (بر اساس پرچم android:appCategory )
  • کاربران به صراحت از رفتار پیش‌فرض برنامه در تنظیمات نسبت تصویر دستگاه استفاده می‌کنند
  • صفحه نمایش هایی که کوچکتر از sw600dp هستند

به طور موقت انصراف دهید

برای انصراف از یک فعالیت خاص، ویژگی PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY مانیفست را اعلام کنید:

<activity ...>
  <property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
  ...
</activity>

اگر بخش‌های زیادی از برنامه شما برای Android 16 آماده نیست، می‌توانید با اعمال همان ویژگی در سطح برنامه، به طور کامل انصراف دهید:

<application ...>
  <property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
</application>
،

با توجه به اینکه اکنون برنامه‌های اندروید بر روی دستگاه‌های مختلف (مانند تلفن‌ها، تبلت‌ها، تاشوها، رایانه‌های رومیزی، ماشین‌ها و تلویزیون‌ها) و حالت‌های پنجره‌سازی روی صفحه‌های بزرگ (مانند پنجره‌های تقسیم‌شده و دسک‌تاپ) اجرا می‌شوند، توسعه‌دهندگان باید برنامه‌های اندرویدی بسازند که با هر اندازه صفحه و پنجره سازگار باشد، صرف نظر از جهت‌گیری دستگاه. پارادایم هایی مانند محدود کردن جهت گیری و تغییر اندازه در دنیای چند دستگاهی امروزی بسیار محدود کننده هستند.

جهت گیری، قابلیت تغییر اندازه و محدودیت های نسبت تصویر را نادیده بگیرید

برای برنامه‌هایی که Android 16 (سطح API 36) را هدف قرار می‌دهند، Android 16 شامل تغییراتی در نحوه مدیریت سیستم جهت‌گیری، قابلیت تغییر اندازه و محدودیت‌های نسبت ابعاد است. در نمایشگرهایی با کمترین عرض >= 600dp، محدودیت ها دیگر اعمال نمی شوند. برنامه‌ها همچنین کل پنجره نمایشگر را بدون توجه به نسبت ابعاد یا جهت‌گیری ترجیحی کاربر پر می‌کنند و از ستون‌باکسینگ استفاده نمی‌شود.

این تغییر رفتار پلت فرم استاندارد جدیدی را معرفی می کند. اندروید در حال حرکت به سمت مدلی است که انتظار می رود برنامه ها با جهت گیری ها، اندازه های نمایشگر و نسبت های مختلف سازگار شوند. محدودیت‌هایی مانند جهت‌گیری ثابت یا قابلیت تغییر اندازه محدود، مانع از سازگاری برنامه می‌شوند، بنابراین توصیه می‌کنیم برنامه خود را برای ارائه بهترین تجربه ممکن برای کاربر سازگار کنید .

همچنین می‌توانید این رفتار را با استفاده از چارچوب سازگاری برنامه و فعال کردن پرچم سازگار UNIVERSAL_RESIZABLE_BY_DEFAULT آزمایش کنید.

تغییرات متداول شکستن

نادیده گرفتن محدودیت‌های جهت، قابلیت تغییر اندازه و نسبت ابعاد ممکن است بر رابط کاربری برنامه شما در برخی از دستگاه‌ها تأثیر بگذارد، به‌ویژه عناصری که برای طرح‌بندی‌های کوچک قفل‌شده در جهت عمودی طراحی شده‌اند: برای مثال، مسائلی مانند طرح‌بندی‌های کشیده و انیمیشن‌ها و اجزای خارج از صفحه. هر گونه فرضی در مورد نسبت تصویر یا جهت‌گیری می‌تواند باعث ایجاد مشکلات بصری در برنامه شما شود. درباره نحوه اجتناب از آنها و بهبود رفتار تطبیقی ​​برنامه خود بیشتر بیاموزید .

اجازه چرخش دستگاه منجر به ایجاد مجدد فعالیت بیشتر می شود که در صورت عدم حفظ صحیح می تواند منجر به از دست دادن حالت کاربر شود. نحوه ذخیره صحیح حالت رابط کاربری را در حالت های ذخیره رابط کاربری بیاموزید.

جزئیات پیاده سازی

ویژگی های مانیفست زیر و API های زمان اجرا در دستگاه های صفحه بزرگ در حالت تمام صفحه و چند پنجره نادیده گرفته می شوند:

مقادیر زیر برای screenOrientation ، setRequestedOrientation() و getRequestedOrientation() نادیده گرفته می شوند:

  • portrait
  • reversePortrait
  • sensorPortrait
  • userPortrait
  • landscape
  • reverseLandscape
  • sensorLandscape
  • userLandscape

با توجه به قابلیت تغییر اندازه نمایشگر، android:resizeableActivity="false" ، android:minAspectRatio و android:maxAspectRatio هیچ تاثیری ندارند.

برای برنامه‌هایی که Android 16 (سطح API 36) را هدف قرار می‌دهند، محدودیت‌های جهت‌گیری برنامه، قابلیت تغییر اندازه و نسبت ابعاد به طور پیش‌فرض در صفحه‌های بزرگ نادیده گرفته می‌شوند، اما هر برنامه‌ای که کاملاً آماده نیست می‌تواند موقتاً این رفتار را با انصراف لغو کند (که منجر به رفتار قبلی یعنی قرار گرفتن در حالت سازگاری می‌شود).

استثنائات

محدودیت‌های جهت‌گیری، قابلیت تغییر اندازه و نسبت تصویر Android 16 در شرایط زیر اعمال نمی‌شوند:

  • بازی ها (بر اساس پرچم android:appCategory )
  • کاربران به صراحت از رفتار پیش‌فرض برنامه در تنظیمات نسبت تصویر دستگاه استفاده می‌کنند
  • صفحه نمایش هایی که کوچکتر از sw600dp هستند

به طور موقت انصراف دهید

برای انصراف از یک فعالیت خاص، ویژگی PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY مانیفست را اعلام کنید:

<activity ...>
  <property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
  ...
</activity>

اگر بخش‌های زیادی از برنامه شما برای Android 16 آماده نیست، می‌توانید با اعمال همان ویژگی در سطح برنامه، به طور کامل انصراف دهید:

<application ...>
  <property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
</application>

سلامتی و تناسب اندام

اندروید 16 (سطح API 36) شامل تغییرات زیر مربوط به داده های سلامت و تناسب اندام است.

مجوزهای سلامت و تناسب اندام

برای برنامه‌هایی که Android 16 (سطح API 36) یا بالاتر را هدف قرار می‌دهند، مجوزهای BODY_SENSORS در حال انتقال به مجوزهای جزئی تحت android.permissions.health هستند که توسط Health Connect نیز استفاده می‌شود. هر API که قبلاً به BODY_SENSORS یا BODY_SENSORS_BACKGROUND نیاز داشت، اکنون به مجوز android.permissions.health مربوطه نیاز دارد. این بر انواع داده‌ها، APIها و انواع خدمات پیش‌زمینه زیر تأثیر می‌گذارد:

اگر برنامه شما از این APIها استفاده می کند، اکنون باید مجوزهای گرانول مربوطه را درخواست کند:

این مجوزها همان مجوزهایی هستند که از دسترسی به داده‌های خواندن از Health Connect ، ذخیره‌گاه داده Android برای داده‌های سلامتی، تناسب اندام و سلامتی محافظت می‌کنند.

برنامه های موبایل

برنامه‌های موبایلی که برای استفاده از READ_HEART_RATE و سایر مجوزهای جزئی مهاجرت می‌کنند، باید فعالیتی را برای نمایش خط‌مشی رازداری برنامه اعلام کنند . این همان نیاز Health Connect است.

قابلیت اتصال

اندروید 16 (سطح API 36) شامل تغییرات زیر در پشته بلوتوث برای بهبود اتصال با دستگاه های جانبی است.

اهداف جدید برای مدیریت از دست دادن اوراق قرضه و تغییرات رمزگذاری

به عنوان بخشی از بهبود مدیریت از دست دادن اوراق قرضه ، اندروید 16 همچنین 2 هدف جدید را معرفی می کند تا برنامه ها را با آگاهی بیشتر از از دست دادن اوراق قرضه و تغییرات رمزگذاری ارائه کند.

برنامه هایی که اندروید 16 را هدف قرار می دهند اکنون می توانند:

  • هنگامی که از دست دادن اوراق قرضه از راه دور شناسایی شد، یک هدف ACTION_KEY_MISSING دریافت کنید، که به آنها امکان می دهد بازخورد آموزنده تری از کاربر ارائه دهند و اقدامات مناسب را انجام دهند.
  • هر زمان که وضعیت رمزگذاری پیوند تغییر کرد، یک هدف ACTION_ENCRYPTION_CHANGE دریافت کنید. این شامل تغییر وضعیت رمزگذاری، تغییر الگوریتم رمزگذاری و تغییر اندازه کلید رمزگذاری است. اگر بعداً پس از دریافت هدف ACTION_ENCRYPTION_CHANGE پیوند با موفقیت رمزگذاری شد، برنامه‌ها باید پیوند را بازیابی شده در نظر بگیرند.

اگر برنامه شما در حال حاضر از مکانیسم‌های سفارشی برای رسیدگی به ضرر اوراق قرضه استفاده می‌کند، برای شناسایی و مدیریت رویدادهای از دست دادن اوراق قرضه، به هدف جدید ACTION_KEY_MISSING مهاجرت کنید. توصیه می کنیم برنامه شما را به کاربر راهنمایی کند تا قبل از شروع فراموشی و جفت شدن مجدد دستگاه، تأیید کند که دستگاه راه دور در محدوده است.

علاوه بر این، اگر دستگاهی پس از دریافت هدف ACTION_KEY_MISSING قطع شود، برنامه شما باید مراقب اتصال مجدد به دستگاه باشد زیرا ممکن است آن دستگاه دیگر به سیستم متصل نباشد.

،

به عنوان بخشی از بهبود مدیریت از دست دادن اوراق قرضه ، اندروید 16 همچنین 2 هدف جدید را معرفی می کند تا برنامه ها را با آگاهی بیشتر از از دست دادن اوراق قرضه و تغییرات رمزگذاری ارائه کند.

برنامه هایی که اندروید 16 را هدف قرار می دهند اکنون می توانند:

  • هنگامی که از دست دادن اوراق قرضه از راه دور شناسایی شد، یک هدف ACTION_KEY_MISSING دریافت کنید، که به آنها امکان می دهد بازخورد آموزنده تری از کاربر ارائه دهند و اقدامات مناسب را انجام دهند.
  • هر زمان که وضعیت رمزگذاری پیوند تغییر کرد، یک هدف ACTION_ENCRYPTION_CHANGE دریافت کنید. این شامل تغییر وضعیت رمزگذاری، تغییر الگوریتم رمزگذاری و تغییر اندازه کلید رمزگذاری است. اگر بعداً پس از دریافت هدف ACTION_ENCRYPTION_CHANGE پیوند با موفقیت رمزگذاری شد، برنامه‌ها باید پیوند را بازیابی شده در نظر بگیرند.

اگر برنامه شما در حال حاضر از مکانیسم‌های سفارشی برای رسیدگی به ضرر اوراق قرضه استفاده می‌کند، برای شناسایی و مدیریت رویدادهای از دست دادن اوراق قرضه، به هدف جدید ACTION_KEY_MISSING مهاجرت کنید. توصیه می کنیم برنامه شما را به کاربر راهنمایی کند تا قبل از شروع فراموشی و جفت شدن مجدد دستگاه، تأیید کند که دستگاه راه دور در محدوده است.

علاوه بر این، اگر دستگاهی پس از دریافت هدف ACTION_KEY_MISSING قطع شود، برنامه شما باید مراقب اتصال مجدد به دستگاه باشد زیرا ممکن است آن دستگاه دیگر به سیستم متصل نباشد.

،

به عنوان بخشی از بهبود مدیریت از دست دادن اوراق قرضه ، اندروید 16 همچنین 2 هدف جدید را معرفی می کند تا برنامه ها را با آگاهی بیشتر از از دست دادن اوراق قرضه و تغییرات رمزگذاری ارائه کند.

برنامه هایی که اندروید 16 را هدف قرار می دهند اکنون می توانند:

  • هنگامی که از دست دادن اوراق قرضه از راه دور شناسایی شد، یک هدف ACTION_KEY_MISSING دریافت کنید، که به آنها امکان می دهد بازخورد آموزنده تری از کاربر ارائه دهند و اقدامات مناسب را انجام دهند.
  • هر زمان که وضعیت رمزگذاری پیوند تغییر کرد، یک هدف ACTION_ENCRYPTION_CHANGE دریافت کنید. این شامل تغییر وضعیت رمزگذاری، تغییر الگوریتم رمزگذاری و تغییر اندازه کلید رمزگذاری است. اگر بعداً پس از دریافت هدف ACTION_ENCRYPTION_CHANGE پیوند با موفقیت رمزگذاری شد، برنامه‌ها باید پیوند را بازیابی شده در نظر بگیرند.

اگر برنامه شما در حال حاضر از مکانیسم‌های سفارشی برای رسیدگی به ضرر اوراق قرضه استفاده می‌کند، برای شناسایی و مدیریت رویدادهای از دست دادن اوراق قرضه، به هدف جدید ACTION_KEY_MISSING مهاجرت کنید. توصیه می کنیم برنامه شما را به کاربر راهنمایی کند تا قبل از شروع فراموشی و جفت شدن مجدد دستگاه، تأیید کند که دستگاه راه دور در محدوده است.

علاوه بر این، اگر دستگاهی پس از دریافت هدف ACTION_KEY_MISSING قطع شود، برنامه شما باید مراقب اتصال مجدد به دستگاه باشد زیرا ممکن است آن دستگاه دیگر به سیستم متصل نباشد.

،

به عنوان بخشی از بهبود مدیریت از دست دادن اوراق قرضه ، اندروید 16 همچنین 2 هدف جدید را معرفی می کند تا برنامه ها را با آگاهی بیشتر از از دست دادن اوراق قرضه و تغییرات رمزگذاری ارائه کند.

برنامه هایی که اندروید 16 را هدف قرار می دهند اکنون می توانند:

  • هنگامی که از دست دادن اوراق قرضه از راه دور شناسایی شد، یک هدف ACTION_KEY_MISSING دریافت کنید، که به آنها امکان می دهد بازخورد آموزنده تری از کاربر ارائه دهند و اقدامات مناسب را انجام دهند.
  • هر زمان که وضعیت رمزگذاری پیوند تغییر کرد، یک هدف ACTION_ENCRYPTION_CHANGE دریافت کنید. این شامل تغییر وضعیت رمزگذاری، تغییر الگوریتم رمزگذاری و تغییر اندازه کلید رمزگذاری است. اگر بعداً پس از دریافت هدف ACTION_ENCRYPTION_CHANGE پیوند با موفقیت رمزگذاری شد، برنامه‌ها باید پیوند را بازیابی شده در نظر بگیرند.

اگر برنامه شما در حال حاضر از مکانیسم‌های سفارشی برای رسیدگی به ضرر اوراق قرضه استفاده می‌کند، برای شناسایی و مدیریت رویدادهای از دست دادن اوراق قرضه، به هدف جدید ACTION_KEY_MISSING مهاجرت کنید. توصیه می کنیم برنامه شما را به کاربر راهنمایی کند تا قبل از شروع فراموشی و جفت شدن مجدد دستگاه، تأیید کند که دستگاه راه دور در محدوده است.

علاوه بر این، اگر دستگاهی پس از دریافت هدف ACTION_KEY_MISSING قطع شود، برنامه شما باید مراقب اتصال مجدد به دستگاه باشد زیرا ممکن است آن دستگاه دیگر به سیستم متصل نباشد.

امنیت

اندروید 16 (سطح API 36) شامل تغییرات امنیتی زیر است.

قفل شدن نسخه MediaStore

برای برنامه‌هایی که اندروید 16 یا بالاتر را هدف قرار می‌دهند، MediaStore#getVersion() اکنون برای هر برنامه منحصر به فرد خواهد بود. این ویژگی های شناسایی را از رشته نسخه حذف می کند تا از سوء استفاده و استفاده از تکنیک های انگشت نگاری جلوگیری شود. برنامه ها نباید هیچ فرضی در مورد قالب این نسخه داشته باشند. برنامه‌ها از قبل باید هنگام استفاده از این API تغییرات نسخه را کنترل کنند و در بیشتر موارد نیازی به تغییر رفتار فعلی خود ندارند، مگر اینکه توسعه‌دهنده تلاش کرده باشد اطلاعات بیشتری را استنباط کند که فراتر از محدوده مورد نظر این API است.

حریم خصوصی

اندروید 16 (سطح API 36) شامل تغییرات حریم خصوصی زیر است.

مجوز شبکه محلی

دستگاه های موجود در شبکه LAN توسط هر برنامه ای که مجوز INTERNET را داشته باشد قابل دسترسی است. این امر اتصال برنامه‌ها به دستگاه‌های محلی را آسان می‌کند، اما پیامدهای حفظ حریم خصوصی مانند تشکیل اثر انگشت کاربر و پروکسی بودن مکان را نیز دارد.

پروژه Local Network Protections با هدف حفاظت از حریم خصوصی کاربر با دسترسی به شبکه محلی در پشت مجوز زمان اجرا جدید.

طرح انتشار

این تغییر به ترتیب بین دو نسخه 25Q2 و TBD اعمال خواهد شد. ضروری است که توسعه دهندگان این دستورالعمل را برای 25Q2 دنبال کنند و بازخورد خود را به اشتراک بگذارند زیرا این حفاظت ها در نسخه بعدی اندروید اعمال خواهند شد . علاوه بر این، آنها باید سناریوهایی را که به دسترسی ضمنی شبکه محلی وابسته هستند با استفاده از راهنمایی زیر به روز کنند و برای رد کاربر و لغو مجوز جدید آماده شوند.

تاثیر

در مرحله فعلی، LNP یک ویژگی Opt-in است که به این معنی است که فقط برنامه هایی که شرکت می کنند تحت تأثیر قرار می گیرند. هدف مرحله انتخاب کردن این است که توسعه دهندگان برنامه بفهمند کدام بخش از برنامه آنها به دسترسی ضمنی شبکه محلی وابسته است به طوری که می توانند برای محافظت از آنها برای نسخه بعدی آماده شوند.

اگر برنامه‌ها با استفاده از موارد زیر به شبکه محلی کاربر دسترسی پیدا کنند تحت تأثیر قرار می‌گیرند.

  • استفاده مستقیم یا کتابخانه ای از سوکت های خام در آدرس های شبکه محلی (مثلاً پروتکل کشف سرویس mDNS یا SSDP)
  • استفاده از کلاس های سطح چارچوب که به شبکه محلی دسترسی دارند (مانند NsdManager)

ترافیک به و از یک آدرس شبکه محلی نیاز به مجوز دسترسی به شبکه محلی دارد. جدول زیر برخی از موارد رایج را فهرست می کند:

برنامه عملیات شبکه سطح پایین مجوز شبکه محلی مورد نیاز است
ایجاد یک اتصال TCP خروجی بله
پذیرش اتصالات TCP ورودی بله
ارسال UDP تک پخشی، چندپخشی، پخش بله
دریافت یک UDP دریافتی unicast، multicast، پخش بله

این محدودیت‌ها در اعماق پشته شبکه پیاده‌سازی می‌شوند و بنابراین برای همه APIهای شبکه اعمال می‌شوند. این شامل سوکت های ایجاد شده در کدهای بومی یا مدیریت شده، کتابخانه های شبکه مانند Cronet و OkHttp و هر APIهایی است که در بالای آن ها پیاده سازی شده اند. تلاش برای حل و فصل سرویس‌ها در شبکه محلی (یعنی آنهایی که پسوند .local دارند) به مجوز شبکه محلی نیاز دارد.

استثنائات قوانین فوق:

  • اگر سرور DNS دستگاه در یک شبکه محلی است، ترافیک به یا از آن (در پورت 53) نیازی به مجوز دسترسی به شبکه محلی ندارد.
  • برنامه‌هایی که از Output Switcher به‌عنوان انتخابگر درون‌برنامه خود استفاده می‌کنند، نیازی به مجوزهای شبکه محلی ندارند (راهنمایی‌های بیشتری در Q4 2025 ارائه می‌شود).

راهنمای توسعه‌دهنده (انتخاب کردن)

برای انتخاب محدودیت های شبکه محلی، موارد زیر را انجام دهید:

  1. دستگاه را روی یک بیلد با 25Q2 Beta 3 یا جدیدتر فلش کنید.
  2. برنامه را برای تست نصب کنید.
  3. پرچم Appcompat را در adb تغییر دهید:

    adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
    
  4. دستگاه را راه اندازی مجدد کنید

اکنون دسترسی برنامه شما به شبکه محلی محدود شده است و هرگونه تلاش برای دسترسی به شبکه محلی منجر به خطاهای سوکت می شود. اگر از APIهایی استفاده می کنید که عملیات شبکه محلی را خارج از فرآیند برنامه شما انجام می دهند (مثلاً NsdManager)، در مرحله انتخاب کردن تحت تأثیر قرار نمی گیرند.

برای بازیابی دسترسی، باید به برنامه خود مجوز NEARBY_WIFI_DEVICES بدهید.

  1. مطمئن شوید که برنامه مجوز NEARBY_WIFI_DEVICES را در مانیفست خود اعلام کرده است.
  2. به Settings > Apps > [Application Name] > Permissions > Nearby devices > Allow بروید .

اکنون دسترسی برنامه شما به شبکه محلی باید بازیابی شود و همه سناریوهای شما باید مانند قبل از انتخاب برنامه کار کنند.

هنگامی که اجرای حفاظت از شبکه محلی آغاز شد، در اینجا نحوه تأثیرگذاری بر ترافیک شبکه برنامه آمده است.

اجازه درخواست LAN خروجی درخواست اینترنت خروجی/ورودی درخواست LAN ورودی
داده شده است کار می کند کار می کند کار می کند
داده نشده است شکست می خورد کار می کند شکست می خورد

از دستور زیر برای خاموش کردن پرچم App-Compat استفاده کنید

adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>

خطاها

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

نمونه خطاها:

sendto failed: EPERM (Operation not permitted)

sendto failed: ECONNABORTED (Operation not permitted)

تعریف شبکه محلی

یک شبکه محلی در این پروژه به یک شبکه IP اشاره دارد که از یک رابط شبکه با قابلیت پخش مانند Wi-Fi یا Ethernet استفاده می کند، اما اتصالات سلولی (WWAN) یا VPN را استثنا نمی کند.

شبکه های زیر به عنوان شبکه های محلی در نظر گرفته می شوند:

IPv4:

  • 169.254.0.0/16 // پیوند محلی
  • 100.64.0.0/10 // CGNAT
  • 10.0.0.0/8 // RFC1918
  • 172.16.0.0/12 // RFC1918
  • 192.168.0.0/16 // RFC1918

IPv6:

  • پیوند محلی
  • مسیرهای متصل مستقیم
  • شبکه های خرد مانند Thread
  • زیرشبکه های چندگانه (TBD)

علاوه بر این، هر دو آدرس چندپخشی (224.0.0.0/4، ff00::/8) و آدرس پخش IPv4 (255.255.255.255) به عنوان آدرس های شبکه محلی طبقه بندی می شوند.