動作の変更点: API レベル 28 以降をターゲットとするアプリ

Android 9(API レベル 28)では、Android システムにいくつかの変更が加えられています。 以下の動作変更は、以下をターゲットとするアプリにのみ適用されます。 API レベル 28 以降。targetSdkVersion を API レベル 28 または より高いレベルでの それらの動作を適切にサポートする必要があります(該当する場合)。

Android 9 で実行されるすべてのアプリに影響する変更(API は問わない) 詳しく知ると、 動作の変更点: すべてのアプリ

フォアグラウンド サービス

Android 9 以降をターゲットとし、フォアグラウンド サービスを使用するアプリは、 FOREGROUND_SERVICE 付与します。これは標準の権限であり、 リクエスト元のアプリに自動的に付与されます。

Android 9 以降をターゲットとするアプリが、許可なくフォアグラウンド サービスを作成しようとすると、 FOREGROUND_SERVICE をリクエストしています。 システムは SecurityException をスローします。

プライバシーの変更点

Android 9 をターゲットとするアプリの場合は、以下の要件に準拠してください。 念頭に置いてください。デバイスのシリアル情報や DNS 情報の更新 ユーザーのプライバシーを強化できます。

ビルドシリアル番号のサポートの終了

Android 9 での Build.SERIAL は、 ユーザーを保護するため、常に "UNKNOWN" に設定プライバシーを保護する。

アプリがデバイスのハードウェア シリアル番号にアクセスする必要がある場合は、 代わりに READ_PHONE_STATE 渡してから getSerial()

DNS プライバシー

Android 9 をターゲットとするアプリでは、プライベート DNS API を尊重する必要があります。特に システム リゾルバが DNS-over-TLS を実行している場合、 暗号化 DNS を使用して、IP アドレスと同じホスト名を 無効になっている場合にシステム リゾルバが優先されます。

フレームワーク セキュリティの変更

Android 9 では、いくつかの動作変更により、 ただし、これらの変更は、アプリが API レベルをターゲットとしている場合にのみ有効になります。 28 以上。

デフォルトで有効になっているネットワーク TLS

Android 9 以降をターゲットとするアプリの場合、 isCleartextTrafficPermitted() メソッドはデフォルトで false を返します。アプリでクリアテキストを有効にする必要がある場合は、 cleartextTrafficPermittedtrue に明示的に設定する必要があります。 アプリのネットワーク セキュリティ 構成をご覧ください。

プロセスで分けられたウェブベース データ ディレクトリ

Android 9 では、アプリの安定性とデータの整合性を高めるために、アプリが 単一の WebView データを共有する ディレクトリと 複数のプロセス。通常、 このようなデータ ディレクトリには、Cookie、HTTP キャッシュ、その他の永続的な ウェブ ブラウジングに関連する一時的なストレージです。

ほとんどの場合、アプリには android.webkit パッケージ( WebViewCookieManager、いずれか 1 つのみ プロセスですたとえば、すべてのファイルを WebView を使用する Activity オブジェクト 同じプロセスに投入できます「1 つのプロセスのみ」をより厳密に適用できるルール 呼び出す disableWebView() インチ パフォーマンスが向上しますこの呼び出しにより WebView が初期化されません 依存関係から呼び出された場合でも、他のプロセスで誤って ライブラリです。

アプリで WebView を複数のプロセスで 各プロセスに一意のデータディレクトリサフィックスを WebView.setDataDirectorySuffix() メソッドを呼び出した後、そのプロセスで WebView の特定のインスタンスを使用します。この方法は 各プロセスのウェブデータをアプリのデータ内の個別のディレクトリに配置 されます。

アプリ別の SELinux ドメイン

Android 9 以降をターゲットとするアプリは、 簡単にアクセスできます。この変更により、 Android アプリ サンドボックス 特に、アプリがユーザーの責任において 個人データにアクセス可能 そのアプリでのみ可能です。

ファイルを他のアプリと共有するには、 プロバイダ

接続の変更

接続データのカウントとマルチパス

Android 9 以降をターゲットとするアプリ内では、 ネットワーク上のネットワーク トラフィック 現在のデフォルト以外のトラフィック(デバイスの電源が入っているときのモバイル トラフィックなど) あらゆるタイプの通信方法を提供します。 NetworkStatsManager クラスを使用してそのトラフィックをクエリします。

特に getMultipathPreference() は、前述のネットワーク トラフィックに基づいて値を返すようになりました。最初の一歩は Android 9 では、このメソッドはセルデータに対して true を返しますが、一定量を超えると 1 日のトラフィックが蓄積すると、false が返され始めます。実行中のアプリ Android 9 では、このヒントを尊重するために、このメソッドを呼び出す必要があります。

ConnectivityManager.NetworkCallback クラスが VPN に関する情報をアプリに送信するようになりました。この変更により、 同期イベントと接続イベントを併用することなく、接続イベントをリッスンできる 制限された API を使用しますまたこれは 情報転送は、デバイスが複数のネットワークに接続されている場合に、想定どおりに機能します。 Wi-Fi ネットワーク、または複数のモバイル ネットワークを同時に使用できます。

Apache HTTP クライアントのサポートの終了

Android 6.0 では、 Apache HTTP クライアントのサポートを削除しました。 Android 9 以降、このライブラリは bootclasspath が定義され、デフォルトではアプリでは使用できません。

Apache HTTP クライアントを引き続き使用するには、Android 9 以降をターゲットとするアプリ AndroidManifest.xml に以下を追加できます。

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

Apache ランタイム ライブラリを使用する代わりに、アプリは APK 内の org.apache.http ライブラリの独自バージョンこれを行うと、 ライブラリを再パッケージ化する必要があります( Jar Jar など)を使用して、クラスの互換性の問題を回避 ランタイムに用意されているクラスと置き換えます。

UI の変更

View のフォーカス

面積が 0 のビュー(幅または高さが 0)はフォーカス不可となりました。

さらに、アクティビティは、暗黙的に初期フォーカスを タップモード。その代わり、初期フォーカスを明示的にリクエストするか、 あります。

CSS RGBA 16 進値の処理

Android 9 以降をターゲットとするアプリでは、ドラフトを有効にする必要があります CSS カラー モジュール レベル 4 4 桁および 8 桁の 16 進数 CSS カラーを処理する場合の動作です。

CSS カラー モジュール レベル 4 サポートされてきましたが、 現在、WebView でこの機能が無効になります 既存の Android アプリが 32 ビットの 16 進数色コードを含んでいることが判明したため (ARGB)に配置されていたため、レンダリング エラーが発生していました。

たとえば、色 #80ff8080 は現在、 opaque としての WebView API レベル 27 以下をターゲットとするアプリの場合、明るい赤色(#ff8080)。業界をリードする コンポーネント(Android ではアルファ コンポーネントとして解釈されます)が 無視されます。API レベル 28 以降をターゲットとするアプリの場合、#80ff8080 は 透明度 50% の薄い緑色(#80ff80)と解釈されます。

ファイルの MIME タイプ スニッフィング: URI

Android 9 より前のバージョンの Android では、ファイルから MIME タイプを推測できました。 できます。Android 9(API レベル 28)以降のアプリは、 file: URI を WebView:

ファイルの内容から MIME タイプを推測すると、セキュリティ バグの原因になる可能性があります。 これは通常、最新のブラウザでは許可されていません。

ファイルに認識されているファイル拡張子(.html など)がある場合、 .txt.js、または .css。MIME タイプは拡張子によって決まります。 ファイルに拡張子がない場合や認識できないファイルの場合、MIME タイプは書式なしになります。 あります。

たとえば、file:///sdcard/test.html のような URI は、次のようにレンダリングされます。 HTML ですが、file:///sdcard/test のような URI は書式なしテキストとしてレンダリングされます。 HTML データも含まれます。

ドキュメントのスクロール要素

Android 9 では、ドキュメントのルート モジュールが 要素はスクロール要素です それより前のバージョンでは、スクロール位置は body 要素に設定されていましたが、 ルート要素のスクロール値が 0 だった。Android 9 では、 スクロール要素がルートである標準準拠の動作 要素です。

さらに、document.body.scrollTopdocument.body.scrollLeftdocument.documentElement.scrollTop または document.documentElement.scrollLeft 動作はターゲット SDK によって異なります。ビューポートのスクロール機能にアクセスするには document.scrollingElement を使用します(使用可能な場合)。

停止中のアプリからの通知

Android 9 より前では、停止中のアプリからの通知はキャンセルされていました。 Android 9 以降、停止中のアプリからの通知は、次の日付になるまで非表示になります。 アプリが再開します。