مانند نسخه های قبلی، اندروید 16 شامل تغییرات رفتاری است که ممکن است بر برنامه شما تأثیر بگذارد. تغییرات رفتاری زیر منحصراً برای برنامههایی اعمال میشود که اندروید 16 یا بالاتر را هدف قرار میدهند. اگر برنامه شما اندروید 16 یا بالاتر را هدف قرار می دهد، باید برنامه خود را تغییر دهید تا در صورت لزوم از این رفتارها پشتیبانی کند.
حتماً فهرستی از تغییرات رفتاری را نیز مرور کنید که بر همه برنامههای در حال اجرا در Android 16 بدون توجه به targetSdkVersion
برنامه شما تأثیر میگذارد.
تجربه کاربری و رابط کاربری سیستم
Android 16 (سطح API 36) شامل تغییرات زیر است که برای ایجاد یک تجربه کاربری سازگارتر و بصری در نظر گرفته شده است.
انصراف لبه به لبه حذف می شود
Android 15 enforced edge-to-edge for apps targeting Android 15 (API
level 35), but your app could opt-out by setting
R.attr#windowOptOutEdgeToEdgeEnforcement
to true
. For apps
targeting Android 16 (API level 36),
R.attr#windowOptOutEdgeToEdgeEnforcement
is deprecated and disabled, and your
app can't opt-out of going edge-to-edge.
- If your app targets Android 16 (API level 36) and is running on an
Android 15 device,
R.attr#windowOptOutEdgeToEdgeEnforcement
continues to work. - If your app targets Android 16 (API level 36) and is running on an
Android 16 device,
R.attr#windowOptOutEdgeToEdgeEnforcement
is disabled.
For testing in Android 16, ensure your app supports edge-to-edge and
remove any use of R.attr#windowOptOutEdgeToEdgeEnforcement
so that your app
also supports edge-to-edge on an Android 15 device. To support edge-to-edge,
see the Compose and Views guidance.
مهاجرت یا انصراف برای بازگشت پیشبینی لازم است
برای برنامههایی که 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 را هدف قرار میدهند (سطح API 36)، یا برای برنامههایی که 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
-
resizableActivity
-
minAspectRatio
-
maxAspectRatio
-
setRequestedOrientation()
-
getRequestedOrientation()
مقادیر زیر برای 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 نیز از آن استفاده میکند. از Android 16، هر API که قبلاً به BODY_SENSORS
یا BODY_SENSORS_BACKGROUND
نیاز داشت، در عوض به مجوز android.permissions.health
مربوطه نیاز دارد. این بر انواع دادهها، APIها و انواع خدمات پیشزمینه زیر تأثیر میگذارد:
-
HEART_RATE_BPM
از Health Services on Wear OS -
Sensor.TYPE_HEART_RATE
از Android Sensor Manager -
heartRateAccuracy
وheartRateBpm
ازProtoLayout
در Wear OS -
FOREGROUND_SERVICE_TYPE_HEALTH
که در آن مجوزandroid.permission.health
مربوطه به جایBODY_SENSORS
مورد نیاز است
اگر برنامه شما از این APIها استفاده میکند، باید مجوزهای دقیق مربوطه را درخواست کند:
- برای نظارت بر ضربان قلب، SpO2 یا دمای پوست در حین استفاده: به جای
BODY_SENSORS
، مجوز دانهبندی را درandroid.permissions.health
درخواست کنید، مانندREAD_HEART_RATE
. - برای دسترسی به حسگر پسزمینه: به جای
BODY_SENSORS_BACKGROUND
READ_HEALTH_DATA_IN_BACKGROUND
درخواست کنید.
این مجوزها همان مجوزهایی هستند که از دسترسی به دادههای خواندن از Health Connect ، ذخیرهگاه داده Android برای دادههای سلامتی، تناسب اندام و سلامتی محافظت میکنند.
برنامه های موبایل
برنامههای موبایلی که برای استفاده از READ_HEART_RATE
و سایر مجوزهای جزئی مهاجرت میکنند، باید فعالیتی را برای نمایش خطمشی رازداری برنامه اعلام کنند . این همان نیاز Health Connect است.
قابلیت اتصال
اندروید 16 (سطح API 36) شامل تغییرات زیر در پشته بلوتوث برای بهبود اتصال با دستگاه های جانبی است.
اهداف جدید برای مدیریت از دست دادن اوراق قرضه و تغییرات رمزگذاری
به عنوان بخشی از بهبود مدیریت از دست دادن اوراق قرضه ، اندروید 16 همچنین 2 هدف جدید را معرفی می کند تا برنامه ها را با آگاهی بیشتر از از دست دادن اوراق قرضه و تغییرات رمزگذاری ارائه کند.
برنامه هایی که اندروید 16 را هدف قرار می دهند اکنون می توانند:
- هنگامی که از دست دادن اوراق قرضه از راه دور شناسایی شد، یک هدف
ACTION_KEY_MISSING
دریافت کنید، که به آنها امکان می دهد بازخورد آموزنده تری از کاربر ارائه دهند و اقدامات مناسب را انجام دهند. - هر زمان که وضعیت رمزگذاری پیوند تغییر کرد، یک هدف
ACTION_ENCRYPTION_CHANGE
دریافت کنید. این شامل تغییر وضعیت رمزگذاری، تغییر الگوریتم رمزگذاری و تغییر اندازه کلید رمزگذاری است. اگر بعداً پس از دریافت هدفACTION_ENCRYPTION_CHANGE
پیوند با موفقیت رمزگذاری شد، برنامهها باید پیوند را بازیابی شده در نظر بگیرند.
انطباق با پیاده سازی های مختلف OEM
در حالی که اندروید 16 این اهداف جدید را معرفی میکند، پیادهسازی و پخش آنها میتواند در تولیدکنندگان مختلف دستگاه (OEM) متفاوت باشد. برای اطمینان از اینکه برنامه شما یک تجربه ثابت و قابل اعتماد را در همه دستگاهها ارائه میکند، توسعهدهندگان باید مدیریت تلفات اوراق قرضه خود را طوری طراحی کنند که بهخوبی با این تغییرات بالقوه سازگار شوند.
ما رفتارهای برنامه زیر را توصیه می کنیم:
اگر هدف
ACTION_KEY_MISSING
پخش شود:پیوند ACL (اتصال ناهمگام-کمتر) توسط سیستم قطع خواهد شد، اما اطلاعات پیوند دستگاه حفظ خواهد شد (همانطور که در اینجا توضیح داده شده است).
برنامه شما باید از این هدف بهعنوان سیگنال اصلی برای تشخیص از دست دادن اوراق قرضه استفاده کند و کاربر را راهنمایی کند تا قبل از شروع فراموشی یا جفتسازی مجدد دستگاه تأیید کند که دستگاه راه دور در محدوده است.
اگر دستگاهی پس از دریافت
ACTION_KEY_MISSING
قطع شود، برنامه شما باید در مورد اتصال مجدد محتاط باشد، زیرا ممکن است دستگاه دیگر به سیستم متصل نباشد.اگر هدف
ACTION_KEY_MISSING
پخش نشد:پیوند ACL متصل باقی میماند، و اطلاعات پیوند دستگاه توسط سیستم حذف میشود، مانند رفتار در Android 15.
در این سناریو، برنامه شما باید به مکانیسمهای مدیریت از دست دادن اوراق قرضه موجود خود مانند نسخههای قبلی اندروید ادامه دهد تا رویدادهای از دست دادن اوراق قرضه را شناسایی و مدیریت کند.
روشی جدید برای حذف باند بلوتوث
All apps targeting Android 16 are now able to unpair bluetooth devices using a
public API in CompanionDeviceManager
. If a companion device is
being managed as a CDM association, then the app can trigger
bluetooth bond removal by using the new removeBond(int)
API
on the associated device. The app can monitor the bond state changes by
listening to the bluetooth device broadcast event
ACTION_BOND_STATE_CHANGED
.
امنیت
اندروید 16 (سطح API 36) شامل تغییرات امنیتی زیر است.
قفل شدن نسخه MediaStore
برای برنامههایی که اندروید 16 یا بالاتر را هدف قرار میدهند، MediaStore#getVersion()
اکنون برای هر برنامه منحصر به فرد خواهد بود. این ویژگی های شناسایی را از رشته نسخه حذف می کند تا از سوء استفاده و استفاده از تکنیک های انگشت نگاری جلوگیری شود. برنامه ها نباید هیچ فرضی در مورد قالب این نسخه داشته باشند. برنامهها از قبل باید هنگام استفاده از این API تغییرات نسخه را کنترل کنند و در بیشتر موارد نیازی به تغییر رفتار فعلی خود ندارند، مگر اینکه توسعهدهنده تلاش کرده باشد اطلاعات بیشتری را استنباط کند که فراتر از محدوده مورد نظر این API است.
مقاصد امن تر
The Safer Intents feature is a multi-phase security initiative designed to improve the security of Android's intent resolution mechanism. The goal is to protect apps from malicious actions by adding checks during intent processing and filtering intents that don't meet specific criteria.
In Android 15 the feature focused on the sending app, now with Android 16, shifts control to the receiving app, allowing developers to opt-in to strict intent resolution using their app manifest.
Two key changes are being implemented:
Explicit Intents Must Match the Target Component's Intent Filter: If an intent explicitly targets a component, it should match that component's intent filter.
Intents Without an Action Cannot Match any Intent Filter: Intents that don't have an action specified shouldn't be resolved to any intent filter.
These changes only apply when multiple apps are involved and don't affect intent handling within a single app.
Impact
The opt-in nature means that developers must explicitly enable it in their app manifest for it to take effect. As a result, the feature's impact will be limited to apps whose developers:
- Are aware of the Safer Intents feature and its benefits.
- Actively choose to incorporate stricter intent handling practices into their apps.
This opt-in approach minimizes the risk of breaking existing apps that may rely on the current less-secure intent resolution behavior.
While the initial impact in Android 16 may be limited, the Safer Intents initiative has a roadmap for broader impact in future Android releases. The plan is to eventually make strict intent resolution the default behavior.
The Safer Intents feature has the potential to significantly enhance the security of the Android ecosystem by making it more difficult for malicious apps to exploit vulnerabilities in the intent resolution mechanism.
However, the transition to opt-out and mandatory enforcement must be carefully managed to address potential compatibility issues with existing apps.
Implementation
Developers need to explicitly enable stricter intent matching using the
intentMatchingFlags
attribute in their app manifest.
Here is an example where the feature is opt-in for the entire app,
but disabled/opt-out on a receiver:
<application android:intentMatchingFlags="enforceIntentFilter">
<receiver android:name=".MyBroadcastReceiver" android:exported="true" android:intentMatchingFlags="none">
<intent-filter>
<action android:name="com.example.MY_CUSTOM_ACTION" />
</intent-filter>
<intent-filter>
<action android:name="com.example.MY_ANOTHER_CUSTOM_ACTION" />
</intent-filter>
</receiver>
</application>
More on the supported flags:
Flag Name | Description |
---|---|
enforceIntentFilter | Enforces stricter matching for incoming intents |
none | Disables all special matching rules for incoming intents. When specifying multiple flags, conflicting values are resolved by giving precedence to the "none" flag |
allowNullAction | Relaxes the matching rules to allow intents without an action to match. This flag to be used in conjunction with "enforceIntentFilter" to achieve a specific behavior |
Testing and Debugging
When the enforcement is active, apps should function correctly if the intent
caller has properly populated the intent.
However, blocked intents will trigger warning log messages like
"Intent does not match component's intent filter:"
and "Access blocked:"
with the tag "PackageManager."
This indicates a potential issue that could impact the app and requires
attention.
Logcat filter:
tag=:PackageManager & (message:"Intent does not match component's intent filter:" | message: "Access blocked:")
حریم خصوصی
اندروید 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 ارائه میشود).
راهنمای توسعهدهنده (انتخاب کردن)
برای انتخاب محدودیت های شبکه محلی، موارد زیر را انجام دهید:
- دستگاه را روی یک بیلد با 25Q2 Beta 3 یا جدیدتر فلش کنید.
- برنامه را برای تست نصب کنید.
پرچم Appcompat را در adb تغییر دهید:
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
دستگاه را راه اندازی مجدد کنید
اکنون دسترسی برنامه شما به شبکه محلی محدود شده است و هرگونه تلاش برای دسترسی به شبکه محلی منجر به خطاهای سوکت می شود. اگر از APIهایی استفاده می کنید که عملیات شبکه محلی را خارج از فرآیند برنامه شما انجام می دهند (مثلاً NsdManager)، در مرحله انتخاب کردن تحت تأثیر قرار نمی گیرند.
برای بازیابی دسترسی، باید به برنامه خود مجوز NEARBY_WIFI_DEVICES
بدهید.
- مطمئن شوید که برنامه مجوز
NEARBY_WIFI_DEVICES
را در مانیفست خود اعلام کرده است. - به 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) به عنوان آدرس های شبکه محلی طبقه بندی می شوند.