これまでのリリースと同様、Android 16 には、アプリに影響する可能性がある動作変更が含まれています。下記の動作変更は、Android 16 以上をターゲットとするアプリにのみ適用されます。アプリが Android 16 以上をターゲットとする場合は、必要に応じてアプリを変更し、下記の動作に対応できるようにしてください。
アプリの targetSdkVersion に関係なく、Android 16 で実行されるすべてのアプリに影響する動作変更のリストも必ずご確認ください。
ユーザー エクスペリエンスとシステム UI
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 でテストする場合は、アプリがエッジ ツー エッジに対応していることを確認し、R.attr#windowOptOutEdgeToEdgeEnforcement の使用をすべて削除して、Android 15 デバイスでもエッジ ツー エッジに対応するようにします。エッジ ツー エッジをサポートするには、Compose と Views のガイダンスをご覧ください。
予測型「戻る」には移行またはオプトアウトが必要
Android 16(API レベル 36)以上をターゲットとし、Android 16 以上のデバイスで実行されるアプリの場合、予測型「戻る」システムの(ホームに戻る、タスク間、アクティビティ間の)アニメーションはデフォルトで有効になっています。また、onBackPressed は呼び出されず、KeyEvent.KEYCODE_BACK はディスパッチされなくなります。
アプリが「戻る」イベントをインターセプトしていて、予測型「戻る」にまだ移行していない場合は、サポートされている「戻る」ナビゲーション API を使用するようにアプリを更新するか、アプリの AndroidManifest.xml ファイルの <application> または <activity> タグで android:enableOnBackInvokedCallback 属性を false に設定して、一時的にオプトアウトします。
Elegant font API のサポート終了と無効化
Android 15(API レベル 35)をターゲットとするアプリでは、elegantTextHeight
TextView 属性がデフォルトで true に設定され、コンパクトなフォントが可読性の高いフォントに置き換えられます。elegantTextHeight 属性を false に設定することで、この動作をオーバーライドできます。
Android 16 では elegantTextHeight 属性が非推奨となり、アプリのターゲットが Android 16 になると、この属性は無視されます。これらの API で制御される「UI フォント」は廃止されるため、アラビア語、ラオス語、ミャンマー語、タミル語、グジャラート語、カンナダ語、マラヤーラム語、オディア語、テルグ語、タイ語でテキストが常に正しくレンダリングされるように、レイアウトを調整する必要があります。
elegantTextHeight 属性を false に設定してデフォルトをオーバーライドした Android 15(API レベル 35)をターゲットとするアプリの elegantTextHeight の動作。
elegantTextHeight 属性を false に設定してデフォルトをオーバーライドしていない Android 15(API レベル 35)をターゲットとするアプリの elegantTextHeight の動作。
コア機能
Android 16(API レベル 36)には、Android システムのさまざまなコア機能を変更または拡張する以下の変更が含まれています。
固定レートの作業スケジュールの最適化
Android 16 をターゲットとする前は、scheduleAtFixedRate が有効なプロセス ライフサイクルの外部にあるためにタスクの実行を逃した場合、アプリが有効なライフサイクルに戻ると、逃した実行がすべて直ちに実行されました。
Android 16 をターゲットとしている場合、アプリが有効なライフサイクルに戻ると、scheduleAtFixedRate の実行が最大 1 回スキップされた場合、その実行が直ちに実行されます。この動作変更により、アプリのパフォーマンスが向上することが期待されます。アプリでこの動作をテストして、アプリが影響を受けているかどうかを確認します。アプリ互換性フレームワークを使用して STPE_SKIP_MULTIPLE_MISSED_PERIODIC_TASKS 互換性フラグを有効にしてテストすることもできます。
デバイスのフォーム ファクタ
Android 16(API レベル 36)では、大画面デバイスに表示されるアプリに対して次の変更が加えられています。
アダプティブ レイアウト
Android アプリは、スマートフォン、タブレット、折りたたみ式デバイス、デスクトップ、自動車、テレビなど、さまざまなデバイスで動作するようになり、大画面のウィンドウ モード(分割画面やデスクトップ ウィンドウなど)も利用できるようになりました。そのため、デベロッパーは、デバイスの向きにかかわらず、あらゆる画面サイズやウィンドウ サイズに対応できる Android アプリを構築する必要があります。画面の向きやサイズ変更を制限するなどのパラダイムは、今日のマルチデバイスの世界では制限が厳しすぎます。
向き、サイズ変更の可能性、アスペクト比の制限を無視する
Android 16(API レベル 36)をターゲットとするアプリでは、Android 16 には、システムが画面の向き、サイズ変更、アスペクト比の制限を管理する方法の変更が含まれています。最小幅が 600dp 以上のディスプレイでは、制限は適用されなくなります。アプリは、アスペクト比やユーザーの優先する向きに関係なく、ディスプレイ ウィンドウ全体に表示され、ピラーボックス表示は使用されません。
この変更により、新しい標準プラットフォームの動作が導入されます。Android は、アプリがさまざまな向き、表示サイズ、アスペクト比に対応することを想定したモデルに移行しています。固定された向きやサイズ変更の制限などの制約はアプリの適応性を妨げるため、アプリをアダプティブにすることで、可能な限り最高のユーザー エクスペリエンスを提供することをおすすめします。
アプリ互換性フレームワークを使用して UNIVERSAL_RESIZABLE_BY_DEFAULT 互換性フラグを有効にすることで、この動作をテストすることもできます。
一般的な互換性を破る変更
向き、サイズ変更、アスペクト比の制限を無視すると、一部のデバイスでアプリの UI に影響する可能性があります。特に、縦向きに固定された小さなレイアウト用に設計された要素では、レイアウトの引き伸ばしや画面外のアニメーションやコンポーネントなどの問題が発生する可能性があります。アスペクト比や向きに関する想定は、アプリの視覚的な問題を引き起こす可能性があります。問題を回避し、アプリの適応動作を改善する方法について詳しくは、こちらをご覧ください。
デバイスの回転を許可すると、アクティビティの再作成が増え、適切に保存されていない場合はユーザーの状態が失われる可能性があります。UI の状態を正しく保存する方法については、UI の状態を保存するをご覧ください。
実装の詳細
次のマニフェスト属性とランタイム API は、大画面デバイスの全画面モードとマルチウィンドウ モードでは無視されます。
screenOrientationresizableActivityminAspectRatiomaxAspectRatiosetRequestedOrientation()getRequestedOrientation()
screenOrientation、setRequestedOrientation()、getRequestedOrientation() の次の値は無視されます。
portraitreversePortraitsensorPortraituserPortraitlandscapereverseLandscapesensorLandscapeuserLandscape
ディスプレイのサイズ変更については、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(API 级别 36)或更高版本为目标平台的应用,BODY_SENSORS 权限使用 android.permissions.health 下更精细的权限,健康数据共享也使用这些权限。自 Android 16 起,凡是以前需要具有 BODY_SENSORS 或 BODY_SENSORS_BACKGROUND 权限的 API,现在都需要获取相应的 android.permissions.health 权限。这会影响以下数据类型、API 和前台服务类型:
- 从 Wear OS 上的健康服务中获取
HEART_RATE_BPM - 来自 Android Sensor Manager 的
Sensor.TYPE_HEART_RATE - 在 Wear OS 上,
ProtoLayout中的heartRateAccuracy和heartRateBpm FOREGROUND_SERVICE_TYPE_HEALTH,其中需要使用相应的android.permission.health权限来代替BODY_SENSORS
如果您的应用使用这些 API,则应请求相应的精细权限:
- 对于使用期间的心率、血氧饱和度或体表温度监测:请求
android.permissions.health下的精细权限,例如READ_HEART_RATE,而不是BODY_SENSORS。 - 对于后台传感器访问权限:请求
READ_HEALTH_DATA_IN_BACKGROUND而不是BODY_SENSORS_BACKGROUND。
这些权限与用于保护对 Health Connect(Android 健康、健身和身心状态数据存储区)中读取数据的访问权限相同。
移动应用
迁移到使用 READ_HEART_RATE 和其他精细权限的移动应用还必须声明 activity 以显示应用的隐私权政策。此要求与健康数据共享的要求相同。
接続
Android 16(API レベル 36)では、周辺機器との接続性を改善するために、Bluetooth スタックに次の変更が加えられています。
ボンドの損失と暗号化の変更を処理する新しいインテント
作为改进了对键值对丢失的处理的一部分,Android 16 还引入了 2 个新 intent,以便应用更好地了解键值对丢失和加密更改。
以 Android 16 为目标平台的应用现在可以:
- 在检测到远程键盘连接丢失时接收
ACTION_KEY_MISSINGintent,以便提供更具信息量的用户反馈并采取适当的措施。 - 每当链接的加密状态发生变化时,都会收到
ACTION_ENCRYPTION_CHANGEintent。这包括加密状态更改、加密算法更改和加密密钥大小更改。如果应用在稍后收到ACTION_ENCRYPTION_CHANGEintent 时成功加密了链接,则必须将该绑定视为已恢复。
适应不同的 OEM 实现
虽然 Android 16 引入了这些新 intent,但其实现和广播可能会因不同的设备制造商 (OEM) 而异。为了确保您的应用在所有设备上都能提供一致且可靠的体验,开发者应设计其绑定丢失处理机制,以妥善适应这些潜在的变化。
我们建议您采用以下应用行为:
如果广播
ACTION_KEY_MISSINGintent:系统会断开 ACL(异步无连接)链接,但会保留设备的配对信息(如此处所述)。
您的应用应将此 intent 用作检测配对丢失的主要信号,并在发起设备忘记或重新配对之前引导用户确认远程设备是否在范围内。
如果设备在收到
ACTION_KEY_MISSING后断开连接,您的应用应谨慎重新连接,因为设备可能已不再与系统绑定。如果未广播
ACTION_KEY_MISSINGintent:ACL 链接将保持连接状态,系统会移除设备的配对信息,与 Android 15 中的行为相同。
在这种情况下,您的应用应继续使用与之前的 Android 版本相同的现有配对丢失处理机制,以检测和管理配对丢失事件。
Bluetooth のペア設定を削除する新しい方法
Android 16 をターゲットとするすべてのアプリで、CompanionDeviceManager の公開 API を使用して Bluetooth デバイスのペア設定を解除できるようになりました。コンパニオン デバイスが CDM の関連付けとして管理されている場合、アプリは、関連付けられたデバイスで新しい removeBond(int) API を使用して、Bluetooth の接続解除をトリガーできます。アプリは、Bluetooth デバイスのブロードキャスト イベント ACTION_BOND_STATE_CHANGED をリッスンすることで、ボンディング状態の変化をモニタリングできます。
セキュリティ
Android 16(API レベル 36)では、セキュリティが次のように変更されています。
MediaStore バージョンのロックダウン
Android 16 以降をターゲットとするアプリの場合、MediaStore#getVersion() はアプリごとに一意になります。これにより、バージョン文字列から識別プロパティが削除され、フィンガープリント手法の不正使用と使用が防止されます。アプリでは、このバージョンの形式について前提条件を設定しないでください。アプリは、この API を使用する際にバージョンの変更をすでに処理している必要があります。ほとんどの場合、デベロッパーがこの API の対象範囲を超える追加情報を推測しようとしない限り、現在の動作を変更する必要はありません。
Safer Intents
Safer Intents 機能は、Android のインテント解決メカニズムのセキュリティを強化するために設計された多段階のセキュリティ イニシアチブです。この目標は、インテント処理中にチェックを追加し、特定の条件を満たさないインテントをフィルタすることで、アプリを悪意のあるアクションから保護することです。
Android 15 では、この機能は送信側アプリに重点が置かれていましたが、Android 16 では受信側アプリに制御が移り、デベロッパーはアプリのマニフェストを使用して厳格なインテント解決を有効にできるようになりました。
主な変更点は次の 2 つです。
明示的インテントはターゲット コンポーネントのインテント フィルタと一致する必要がある: インテントがコンポーネントを明示的にターゲットに設定している場合、そのコンポーネントのインテント フィルタと一致する必要があります。
アクションのないインテントはインテント フィルタに一致しない: アクションが指定されていないインテントは、インテント フィルタに解決されるべきではありません。
これらの変更は、複数のアプリが関与している場合にのみ適用され、単一のアプリ内のインテント処理には影響しません。
影響
オプトイン方式であるため、デベロッパーはアプリ マニフェストで明示的に有効にしないと、この機能は有効になりません。そのため、この機能の影響は、デベロッパーが以下の条件を満たすアプリに限定されます。
- Safer Intents 機能とそのメリットを理解している。
- より厳格なインテント処理方法をアプリに組み込むことを積極的に選択する。
このオプトイン アプローチにより、現在の安全性の低いインテント解決動作に依存している可能性のある既存のアプリが破損するリスクを最小限に抑えることができます。
Android 16 での初期の影響は限定的かもしれませんが、Safer Intents イニシアチブには、今後の Android リリースでより広範な影響を与えるためのロードマップがあります。最終的には、厳密なインテント解決をデフォルトの動作にする予定です。
Safer Intents 機能は、悪意のあるアプリがインテント解決メカニズムの脆弱性を悪用することを困難にすることで、Android エコシステムのセキュリティを大幅に強化する可能性があります。
ただし、既存のアプリとの互換性の問題に対処するため、オプトアウトと強制適用の移行は慎重に管理する必要があります。
実装
デベロッパーは、アプリのマニフェストで intentMatchingFlags 属性を使用して、より厳密なインテント マッチングを明示的に有効にする必要があります。アプリ全体で機能を有効にし、レシーバで無効にする/無効にする例を次に示します。
<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>
サポートされているフラグの詳細:
| フラグ名 | 説明 |
|---|---|
| enforceIntentFilter | 受信インテントの厳密な照合を適用する |
| なし | 受信インテントの特別な照合ルールをすべて無効にします。複数のフラグを指定した場合、競合する値は「none」フラグが優先されることで解決されます。 |
| allowNullAction | 一致ルールを緩和し、アクションのないインテントを一致させます。特定の動作を実現するために「enforceIntentFilter」と組み合わせて使用されるフラグ |
テストとデバッグ
適用が有効になっている場合、インテント呼び出し元がインテントを適切に設定していれば、アプリは正しく機能します。ただし、ブロックされたインテントは、タグ "PackageManager." を含む "Intent does not match component's intent filter:" や "Access blocked:" などの警告ログメッセージをトリガーします。これは、アプリに影響する可能性のある問題を示しており、注意が必要です。
Logcat フィルタ:
tag=:PackageManager & (message:"Intent does not match component's intent filter:" | message: "Access blocked:")
GPU システムコール フィルタリング
Mali GPU サーフェスを強化するため、非推奨になった Mali GPU IOCTL や GPU 開発専用の Mali GPU IOCTL は、本番環境ビルドでブロックされています。また、GPU プロファイリングに使用される IOCTL が、シェルプロセスまたはデバッグ可能なアプリに制限されました。プラットフォーム レベルのポリシーについて詳しくは、SAC の更新を参照してください。
この変更は、Mali GPU を使用する Google Pixel デバイス(Google Pixel 6 ~ 9)で実施されます。Arm は、r54p2 リリースの Documentation/ioctl-categories.rst で IOCTL の公式な分類を提供しています。このリストは、今後のドライバ リリースでも引き続き維持されます。
この変更は、サポートされているグラフィック API(Vulkan や OpenGL など)には影響しません。また、デベロッパーや既存のアプリケーションにも影響しないと見込まれます。Streamline Performance Analyzer や Android GPU Inspector などの GPU プロファイリング ツールは影響を受けません。
テスト
次のような SELinux の拒否が表示された場合は、アプリがこの変更の影響を受けている可能性があります。
06-30 10:47:18.617 20360 20360 W roidJUnitRunner: type=1400 audit(0.0:85): avc: denied { ioctl }
for path="/dev/mali0" dev="tmpfs" ino=1188 ioctlcmd=0x8023
scontext=u:r:untrusted_app_25:s0:c512,c768 tcontext=u:object_r:gpu_device:s0 tclass=chr_file
permissive=0 app=com.google.android.selinux.pts
アプリケーションでブロックされた IOCTL を使用する必要がある場合は、バグを報告して android-partner-security@google.com に割り当ててください。
よくある質問
このポリシーの変更はすべての OEM に適用されますか?この変更はオプトインですが、この強化方法を使用したい OEM は誰でも利用できます。変更の実装手順については、実装に関するドキュメントをご覧ください。
これを実装するには OEM コードベースで変更を行う必要がありますか?それとも、新しい AOSP リリースにデフォルトで含まれていますか?プラットフォーム レベルの変更は、デフォルトで新しい AOSP リリースに含まれます。ベンダーは、この変更を適用したい場合は、コードベースでこの変更を有効にできます。
SoC は IOCTL リストを最新の状態に保つ責任を負っていますか?たとえば、デバイスで ARM Mali GPU を使用している場合、変更について ARM に問い合わせる必要はありますか?個々の SoC は、ドライバのリリース時にデバイスごとに IOCTL リストを更新する必要があります。たとえば、ARM はドライバの更新時に公開済みの IOCTL リストを更新します。ただし、OEM は、SEPolicy に更新を組み込み、必要に応じて選択したカスタム IOCTL をリストに追加する必要があります。
この変更は、販売中のすべての Google Pixel に自動的に適用されますか?それとも、この変更を適用するためにユーザーが何かを切り替える必要がありますか?この変更は、Mali GPU(Google Pixel 6 ~ 9)を使用するすべての Google Pixel 販売中デバイスに適用されます。この変更を適用するためにユーザー側で必要な対応はありません。
このポリシーを使用すると、カーネル ドライバのパフォーマンスに影響しますか?このポリシーは GFXBench を使用して Mali GPU でテストされましたが、GPU パフォーマンスに測定可能な変化は見られませんでした。
IOCTL リストを現在のユーザースペースとカーネル ドライバのバージョンに合わせる必要がありますか?はい。許可される IOCTL のリストは、ユーザー空間とカーネル ドライバの両方でサポートされる IOCTL と同期する必要があります。ユーザー空間またはカーネル ドライバの IOCTL が更新された場合は、SEPolicy IOCTL リストも一致するように更新する必要があります。
ARM は IOCTL を「制限付き」 / 「計測」に分類していますが、一部を本番環境のユースケースで使用したり、一部を拒否したりしたいと考えています。個々の OEM/SoC は、ユーザー空間 Mali ライブラリの構成に基づいて、使用する IOCTL を分類する方法を決定する責任があります。ARM のリストは、これらの決定に役立ちますが、OEM/SoC のユースケースはそれぞれ異なる場合があります。
プライバシー
Android 16(API レベル 36)では、プライバシーが次のように変更されています。
ローカル ネットワークの権限
具有 INTERNET 权限的任何应用都可以访问局域网上的设备。
这使得应用可以轻松连接到本地设备,但也存在隐私影响,例如形成用户指纹,以及成为位置信息的代理。
本地网络保护项目旨在通过在新的运行时权限后限制对本地网络的访问,来保护用户的隐私。
发布计划
此变更将分别在 25Q2 和 26Q2 这两个版本之间部署。 开发者必须遵循 25Q2 的相关指南并分享反馈,因为这些保护措施将在后续 Android 版本中强制执行。此外,他们还需要按照以下指南更新依赖于隐式本地网络访问权限的场景,并为用户拒绝和撤消新权限做好准备。
影响
在当前阶段,LNP 是一项选择启用功能,这意味着只有选择启用的应用会受到影响。选择启用阶段的目标是让应用开发者了解应用的哪些部分依赖于隐式本地网络访问权限,以便他们可以为下一个版本做好权限保护准备。
如果应用使用以下方式访问用户的本地网络,则会受到影响:
- 在本地网络地址(例如 mDNS 或 SSDP 服务发现协议)上直接或通过库使用原始套接字
- 使用可访问本地网络的框架级类(例如 NsdManager)
向本地网络地址发送流量和从本地网络地址接收流量需要本地网络访问权限。下表列出了一些常见情况:
| 应用低级层网络操作 | 需要本地网络权限 |
|---|---|
| 建立出站 TCP 连接 | 是 |
| 接受传入的 TCP 连接 | 是 |
| 发送 UDP 单播、多播、广播 | 是 |
| 接收传入的 UDP 单播、多播、广播 | 是 |
这些限制是在网络堆栈深处实现的,因此适用于所有网络 API。这包括在原生代码或受管理代码中创建的套接字、Cronet 和 OkHttp 等网络库,以及基于这些库实现的任何 API。尝试解析本地网络上的服务(即带有 .local 后缀的服务)将需要本地网络权限。
上述规则的例外情况:
- 如果设备的 DNS 服务器位于本地网络上,则进出该服务器(位于端口 53)的流量不需要本地网络访问权限。
- 如果应用使用输出切换器作为其应用内选择器,则无需本地网络权限(更多指南将在 2025 年第 4 季度发布)。
开发者指南(选择启用)
如需选择启用本地网络限制,请执行以下操作:
- 将设备刷写到 25Q2 Beta 3 或更高版本的 build。
- 安装要测试的应用。
在 adb 中切换 Appcompat 标志:
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>重启设备
现在,您的应用对本地网络的访问受到限制,任何访问本地网络的尝试都会导致套接字错误。如果您使用的 API 在应用进程之外执行本地网络操作(例如:NsdManager),在选择启用阶段,这些 API 不会受到影响。
如需恢复访问权限,您必须向应用授予 NEARBY_WIFI_DEVICES 权限。
- 确保应用在其清单中声明了
NEARBY_WIFI_DEVICES权限。 - 依次前往设置 > 应用 > [应用名称] > 权限 > 附近的设备 > 允许。
现在,应用对本地网络的访问权限应该已恢复,并且所有场景都应像选择启用应用之前一样正常运行。
本地网络保护功能开始强制执行后,应用的网络流量将受到以下影响。
| 权限 | 出站 LAN 请求 | 出站/入站互联网请求 | 入站 LAN 请求 |
|---|---|---|---|
| 已授予 | Works | Works | Works |
| 未授予 | 最差排行榜 | Works | 最差排行榜 |
使用以下命令切换关闭应用兼容性标志
adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>
错误
每当调用套接字调用 send 或 send 变体向本地网络地址发送数据时,系统都会向该套接字返回因这些限制而产生的错误。
错误示例:
sendto failed: EPERM (Operation not permitted)
sendto failed: ECONNABORTED (Operation not permitted)
本地网络定义
此项目中的本地网络是指使用支持广播的网络接口(例如 Wi-Fi 或以太网)的 IP 网络,但不包括移动网络 (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 等桩网络
- 多个子网(待定)
此外,多播地址 (224.0.0.0/4、ff00::/8) 和 IPv4 广播地址 (255.255.255.255) 都归类为本地网络地址。
アプリ所有の写真
当面向 SDK 36 或更高版本的应用在搭载 Android 16 或更高版本的设备上提示用户授予照片和视频权限时,如果用户选择限制对所选媒体的访问权限,则会在照片选择器中看到该应用拥有的所有照片。用户可以取消选择任何这些预选项,这会撤消该应用对这些照片和视频的访问权限。