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
を返します。アプリでクリアテキストを有効にする必要がある場合は、
cleartextTrafficPermitted
を true
に明示的に設定する必要があります。
アプリのネットワーク セキュリティ
構成をご覧ください。
プロセスで分けられたウェブベース データ ディレクトリ
Android 9 では、アプリの安定性とデータの整合性を高めるために、アプリが
単一の WebView
データを共有する
ディレクトリと
複数のプロセス。通常、
このようなデータ ディレクトリには、Cookie、HTTP キャッシュ、その他の永続的な
ウェブ ブラウジングに関連する一時的なストレージです。
ほとんどの場合、アプリには
android.webkit
パッケージ(
WebView
、
CookieManager
、いずれか 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.scrollTop
、document.body.scrollLeft
、
document.documentElement.scrollTop
または document.documentElement.scrollLeft
動作はターゲット SDK によって異なります。ビューポートのスクロール機能にアクセスするには
document.scrollingElement
を使用します(使用可能な場合)。
停止中のアプリからの通知
Android 9 より前では、停止中のアプリからの通知はキャンセルされていました。 Android 9 以降、停止中のアプリからの通知は、次の日付になるまで非表示になります。 アプリが再開します。