これまでのリリースと同様、Android 16 には、アプリに影響する可能性がある動作変更が含まれています。下記の動作変更は、Android 16 以上をターゲットとするアプリにのみ適用されます。アプリが Android 16 以上をターゲットとする場合は、必要に応じてアプリを変更し、下記の動作に対応できるようにしてください。
アプリの targetSdkVersion に関係なく、Android 16 で実行されるすべてのアプリに影響する動作変更のリストも必ずご確認ください。
ユーザー エクスペリエンスとシステム UI
Android 16(API レベル 36)には、より一貫性のある直感的なユーザー エクスペリエンスを実現するための以下の変更が含まれています。
エッジ ツー エッジのオプトアウトが廃止
Android 15 强制实行全屏显示,但您的应用可以通过将 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 を使用するようにアプリを更新するか、または
アプリの
<application> タグまたは <activity> タグで
android:enableOnBackInvokedCallback 属性を false に設定して、一時的にオプトアウトします。AndroidManifest.xml ファイル。
Elegant font API のサポート終了と無効化
以 Android 15(API 级别 35)为目标平台的应用默认将 elegantTextHeight
TextView 属性设置为 true,从而将紧凑型字体替换为可读性更高的字体。您可以通过将 elegantTextHeight 属性设置为 false 来替换此设置。
Android 16 弃用了 elegantTextHeight 属性,当您的应用以 Android 16 为目标平台后,系统会忽略该属性。由这些 API 控制的“界面字体”即将停用,因此您应调整所有布局,以确保阿拉伯语、老挝语、缅甸语、泰米尔语、古吉拉特语、卡纳达语、马拉雅拉姆语、奥里亚语、泰卢固语或泰语文本的呈现效果一致且不受未来变化的影响。
elegantTextHeight 属性设置为 false 替换默认值的应用,
elegantTextHeight 行为。elegantTextHeight 属性设置为 false 来替换默认值的应用,其 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)をターゲットとするアプリでは、最小幅が 600 dp 以上のディスプレイで、画面の向き、サイズ変更、アスペクト比の制限が適用されなくなります。アスペクト比やユーザーが指定した画面の向きにかかわらず、アプリはディスプレイ ウィンドウ全体に表示され、ピラーボックス表示は使用されません。
この変更により、新しい標準プラットフォームの動作が導入されます。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 权限使用更精细的权限
under android.permissions.health,which Health Connect
also uses。从 Android 16 开始,凡是以前需要具有 BODY_SENSORS
或 BODY_SENSORS_BACKGROUND 权限的 API,现在都需要获取相应的
android.permissions.health 权限。这会影响以下数据类型、API 和前台服务类型:
HEART_RATE_BPMWear OS 上的健康服务Sensor.TYPE_HEART_RATE来自 Android Sensor ManagerheartRateAccuracy和heartRateBpm(来自 Wear OS 上的ProtoLayout)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
“更安全的 intent”功能是一项多阶段安全计划,旨在提高 Android 的 intent 解析机制的安全性。其目标是在 intent 处理期间添加检查,并过滤不符合特定条件的 intent,从而保护应用免受恶意操作的影响。
在 Android 15 中,此功能侧重于发送应用,而现在在 Android 16 中,控制权转移到了接收应用,开发者可以使用应用清单选择启用严格的 intent 解析。
我们正在实施两项关键变更:
显式 intent 必须与目标组件的 intent 过滤器匹配:如果 intent 显式以某个组件为目标,则应与该组件的 intent 过滤器匹配。
没有操作的 intent 无法与任何 intent 过滤器匹配:未指定操作的 intent 不应解析为任何 intent 过滤器。
这些变更仅在涉及多个应用时适用,不会影响单个应用内的 intent 处理。
影响
由于此功能是选择启用,因此开发者必须在应用清单中明确启用此功能,才能使其生效。因此,此功能的影响将仅限于以下应用:
- 了解“更安全的 intent”功能及其优势。
- 主动选择将更严格的 intent 处理实践融入到其应用中。
这种选择启用方法可最大限度地降低破坏可能依赖于当前安全性较低的 intent 解析行为的现有应用的风险。
虽然在 Android 16 中的初始影响可能有限,但“更安全的 intent”计划制定了在未来的 Android 版本中扩大影响的路线图。 该计划最终将使严格的 intent 解析成为默认行为。
“更安全的 intent”功能通过使恶意应用更难利用 intent 解析机制中的漏洞,有可能显著增强 Android 生态系统的安全性。
不过,向选择退出和强制执行的过渡必须经过仔细管理,以解决与现有应用潜在的兼容性问题。
实现
开发者需要在应用清单中使用 intentMatchingFlags 属性明确启用更严格的 intent 匹配。
以下示例展示了如何为整个应用选择启用此功能,但在接收器上停用/选择停用此功能:
<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 | 对传入 intent 强制执行更严格的匹配 |
| none | 停用传入 intent 的所有特殊匹配规则。指定多个标志时,系统会优先使用“none”标志来解决冲突值 |
| allowNullAction | 放宽匹配规则,允许没有操作的 intent 进行匹配。此标志应与“enforceIntentFilter”结合使用,以实现特定行为 |
测试和调试
启用强制执行后,如果 intent 调用方已正确填充 intent,应用应能正常运行。
不过,被屏蔽的 intent 会触发警告日志消息,例如
"Intent does not match component's intent filter:" 和 "Access blocked:"
,并带有标记 "PackageManager."
。这表示可能存在影响应用的问题,需要引起
注意。
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)では、プライバシーが次のように変更されています。
ローカル ネットワークへのアクセス権
LAN 上のデバイスには、INTERNET 権限を持つすべてのアプリからアクセスできます。
これにより、アプリはローカル デバイスに簡単に接続できますが、ユーザーのフィンガープリントの作成や位置情報のプロキシなど、プライバシーへの影響もあります。
ローカル ネットワーク保護プロジェクトは、新しい実行時の権限の背後でローカル ネットワークへのアクセスをゲートすることで、ユーザーのプライバシーを保護することを目的としています。
リリース計画
この変更は、25Q2 と 26Q2 の 2 つのリリースに分けてデプロイされます。 デベロッパーは、25Q2 のガイダンスに沿ってフィードバックを共有する必要があります。これらの保護は今後の Android リリースで適用される ためです。 また、以下のガイダンスに沿って、暗黙的なローカル ネットワーク アクセスに依存するシナリオを更新し、新しい権限のユーザーによる拒否と取り消しに備える必要があります。
影響
現時点では、LNP はオプトイン機能であるため、オプトインしたアプリのみが影響を受けます。オプトイン フェーズの目的は、アプリ デベロッパーがアプリのどの部分が暗黙的なローカル ネットワーク アクセスに依存しているかを把握し、次のリリースで権限を保護できるようにすることです。
アプリが次の方法でユーザーのローカル ネットワークにアクセスする場合、アプリは影響を受けます。
- ローカル ネットワーク アドレスでのローソケットの直接使用またはライブラリの使用(mDNS や SSDP サービス ディスカバリ プロトコルなど)
- ローカル ネットワークにアクセスするフレームワーク レベルのクラスの使用(NsdManager など)
ローカル ネットワーク アドレスとの間のトラフィックには、ローカル ネットワーク アクセス権限が必要です。次の表に、一般的なケースを示します。
| アプリの低レベル ネットワーク オペレーション | 必要なローカル ネットワーク権限 |
|---|---|
| 送信 TCP 接続の確立 | はい |
| 受信 TCP 接続の受け入れ | はい |
| UDP ユニキャスト、マルチキャスト、ブロードキャストの送信 | はい |
| 受信 UDP ユニキャスト、マルチキャスト、ブロードキャストの受信 | はい |
これらの制限はネットワーク スタックの奥深くに実装されているため、すべてのネットワーク API に適用されます。これには、ネイティブ コードまたはマネージド コードで作成されたソケット、Cronet や OkHttp などのネットワーク ライブラリ、それらの上に実装された API が含まれます。ローカル ネットワーク上のサービス(.local サフィックスが付いたサービス)を解決するには、ローカル ネットワーク権限が必要です。
上記のルールの例外:
- デバイスの DNS サーバーがローカル ネットワーク上にある場合、そのサーバーとの間のトラフィック(ポート 53)にはローカル ネットワーク アクセス権限は必要ありません。
- アプリ内ピッカーとして出力スイッチャーを使用するアプリには、ローカル ネットワーク権限は必要ありません(詳細なガイダンスは 2025 年第 4 四半期に提供されます)。
デベロッパー向けガイダンス(オプトイン)
ローカル ネットワーク制限をオプトインする手順は次のとおりです。
- デバイスを 25Q2 ベータ版 3 以降のビルドに書き込みます。
- テストするアプリをインストールします。
adb で Appcompat フラグを切り替えます。
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>デバイスを再起動します
これで、アプリのローカル ネットワークへのアクセスが制限され、ローカル ネットワークにアクセスしようとするとソケット エラーが発生します。アプリ プロセス外でローカル ネットワーク オペレーションを実行する API(NsdManager など)を使用している場合、 オプトイン フェーズでは影響を受けません。
アクセスを復元するには、アプリに NEARBY_WIFI_DEVICES 権限を付与する必要があります。
- アプリのマニフェストで
NEARBY_WIFI_DEVICES権限が宣言されていることを確認します。 - [設定] > [アプリ] > [アプリ名] > [権限] > [付近のデバイス] > [許可] に移動します。
これで、アプリのローカル ネットワークへのアクセスが復元され、アプリをオプトインする前と同じようにすべてのシナリオが機能するようになります。
ローカル ネットワーク保護の適用が開始されると、アプリのネットワーク トラフィックは次のように影響を受けます。
| 権限 | 送信 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)
ローカル ネットワークの定義
このプロジェクトのローカル ネットワークとは、ブロードキャスト可能なネットワーク インターフェース(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 或更高版本的设备上提示用户授予照片和视频权限时,如果用户选择限制对所选媒体的访问权限,则会在照片选择器中看到该应用拥有的所有照片。用户可以取消选择任何这些预选项,这会撤消该应用对这些照片和视频的访问权限。