Android 8.0 の新機能

このページでは、エンタープライズの Android に影響する、Android 8.0(API レベル 26)で導入された新しい API、機能、動作変更の概要について説明します。

新しい API と機能

プロファイル所有者とデバイス所有者の管理モードがより強力かつ生産的であり、プロビジョニングがこれまで以上に簡単になりました。また、完全管理対象デバイス上で仕事用プロファイルという、まったく新しいデプロイ シナリオも可能になりました。以下では、これらの機能とその他の機能について説明します。

完全管理対象デバイスの仕事用プロファイル

Android 8.0 では、完全管理対象デバイスに仕事用プロファイルを設定することもできます。これにより、企業はアプリとポリシーを分離しながら、両方のプロファイルの制御と可視性を維持できます。既存のデバイス所有者または別の Device Policy Controller(DPC)が、管理対象プロファイルを作成できます。

完全管理対象デバイスで仕事用プロファイルを使用することで、デバイス オーナーは次のことを行えます。

  • EXTRA_PROVISIONING_SKIP_USER_CONSENT を呼び出して、ユーザーの操作なしで管理対象プロファイルを作成します。
  • セカンダリ ユーザーまたは管理対象プロファイルが作成または削除されると、通知が届きます。コールバックは onUserAdded()onUserRemoved() です。
  • 他の DPC が DISALLOW_ADD_MANAGED_PROFILE を使用して管理対象プロファイルを作成できないようにします。この設定は、新しくプロビジョニングされたデバイスのデバイス所有者、または Android 8.0 にアップグレードしたデバイスの Android 8.0 のデフォルトです。
  • デバイス所有者は、DISALLOW_REMOVE_MANAGED_PROFILE を使用して、ユーザーが既存の管理対象プロファイルを削除できないようにすることもできます。

デバイス所有者とプロファイル所有者は同じ APK に属し、所有者が関連付けられている場合、相互に通信できます(下記のユーザーの関連付けを参照)。

この新しいデプロイ シナリオのサポートについて詳しくは、完全管理対象デバイスでの仕事用プロファイルに関する専用ページをご覧ください。

ユーザーのアフィリエーション

デバイス所有者とプロファイル所有者が同じ組織を表す場合:

  • デバイスとプロファイルのオーナーは、同じ APK 内で相互に通信できます。必要に応じて、ポリシーやステータスを共有できます(上記の完全管理対象デバイスの仕事用プロファイルをご覧ください)。

  • ロギングやロックタスク モードの許可リスト登録など、デバイス全体の機能は、関連ユーザーに適用されます。

アフィリエーション ID は、プロフィールまたはユーザーに付加され、組織を識別します。アフィリエーション ID が一致すると、そのユーザーはアフィリエーションされます。デバイス所有者とプロファイル所有者は、setAffiliationIds() を使用してアフィリエーション ID を設定します。長くて推測が難しい文字列 ID を使用して組織を表します。

関連付けられたユーザーの新しいアクセス

デバイスのすべてのセカンダリ ユーザーとプロファイルがデバイス所有者に関連付けられている場合、次の機能を使用できます。

以前は、セキュリティ ロギングとバグレポートは、シングル ユーザー デバイス、または 1 つのプロファイルと 1 ユーザーのみのデバイスでしか使用できませんでした。

ロックタスク モードは、setLockTaskPackages() でデバイス所有者と関連付けられているセカンダリ ユーザーと管理対象プロファイルが利用できます。ユーザーの関連付けの詳細については、関連付けられているユーザーをご覧ください。

カスタマイズされたプロビジョニングに関する免責条項

DPC は、プロビジョニング中にユーザーに独自の免責条項を表示できるようになりました。スタイル付きテキストの免責条項を指定するには、EXTRA_PROVISIONING_DISCLAIMERSEXTRA_PROVISIONING_DISCLAIMER_HEADEREXTRA_PROVISIONING_DISCLAIMER_CONTENT を使用します。DPC のカスタム免責条項は、折りたたみ可能な利用規約リストに表示されます。

セキュリティ

プロファイル所有者とデバイス所有者は、setRequiredStrongAuthTimeout() を使用して、指紋や信頼エージェントなどの二次認証方式でデバイスまたはプロファイルのロックを解除するためのタイムアウト時間を構成できます。タイムアウト期間が終了したら、ユーザーはパスワード、PIN、パターンなどの強力な認証方法を使用してデバイスまたはプロファイルのロックを解除する必要があります。

デバイス所有者とプロファイル所有者は、resetPasswordWithToken() を使用して、デバイスと仕事用プロファイルのパスワードを安全にリセットできます。ファイルベースの暗号化をサポートするデバイスの場合、DPC が暗号化に対応している場合、ユーザーがデバイスまたはプロファイルのロックを解除する前にこの API を使用できます。

ファイルベースの暗号化をサポートするデバイスで仕事用プロファイルをロックする場合、lockNow(int) は、必要に応じて FLAG_EVICT_CREDENTIAL_ENCRYPTION_KEY を使用して仕事用プロファイルの主暗号鍵を強制排除できます。ユーザーが仕事用プロファイルをオフにした場合も、暗号鍵は強制排除されます。

また、デバイス所有者は setNetworkLoggingEnabled() を使用して、会社所有のデバイスから開始された DNS クエリと TCP 接続のネットワーク ロギングを有効にできます。詳しくは、ネットワーク アクティビティ ロギングをご覧ください。

プロファイル オーナーは、仕事用プロファイルの通知を監視できるプライマリ ユーザーのパッケージを制限できます。setPermittedCrossProfileNotificationListeners() を呼び出して、NotificationListenerService を介してイベントを受信する許可リストに登録されたパッケージを設定します。許可されたリスナーを null(デフォルト)に設定すると、許可リストが無効になり、すべてのパッケージで通知をリッスンできます。イベントをシステム パッケージに制限するには、空の Set を渡します。仕事用プロファイルの通知にアクセスできないアプリを表示するには、[設定] > [アプリと通知] > [特別なアプリアクセス] > [通知へのアクセス] をタップします。

最後に、プロファイル所有者とデバイス所有者は、getPendingSystemUpdate() を使用して、デバイスで利用可能な保留中のシステム アップデートに関する情報を取得できます。

App Management API の委任

API 委任機能を使用すると、デバイス所有者とプロファイル所有者がアプリの管理を他のアプリケーションに完全にオフロードできます。DevicePolicyManager クラスには、デバイスとプロファイル オーナーがパッケージに付与できる委任スコープを管理するためのメソッドが用意されています。

  • setDelegatedScopes() メソッドを使用すると、デバイス所有者とプロファイル所有者は、他のアプリに対して特権 API へのアクセス権を付与できます。
  • getDelegatedScopes() メソッドは、パッケージに付与されたスコープを返します。
  • getDelegatePackages() は、スコープを持つパッケージを返します。

次の表は、DevicePolicyManager のさまざまなメソッドをスコープごとにまとめたものです。

表 1. スコープとデバイス ポリシー メソッドの対応

グループ メソッド
DELEGATION_CERT_INSTALL
DELEGATION_APP_RESTRICTIONS
DELEGATION_BLOCK_UNINSTALL setUninstallBlocked()
DELEGATION_PERMISSION_GRANT
DELEGATION_PACKAGE_ACCESS
DELEGATION_ENABLE_SYSTEM_APP enableSystemApp()

実行時間の長いバックグラウンド サービス

デバイスとプロファイルのオーナーは、DeviceAdminService をサブクラス化してバックグラウンド サービスを作成できます。Android システムは、ユーザーの実行中もサービスの実行を継続しようとします。定期的なタスクを実行する場合は、バックグラウンド サービスを作成する前に、JobScheduler の使用を検討してください。

バックアップ サービスの制御

デバイス オーナーは、DevicePolicyManager の新しいメソッドを使用して Android Backup Service を切り替えることができます。setBackupServiceEnabled() を使用してバックアップ サービスを有効または無効にする。isBackupServiceEnabled() を使用してバックアップ サービスのステータスを確認します。

Wi-Fi プロキシ設定

デバイス オーナーとプロファイル オーナーは、Wi-Fi ネットワーク用の HTTP プロキシ サーバーを構成できます。PAC ファイルまたは手動設定を使用して、Wi-Fi ネットワークごとにプロキシ サーバーを構成します。WifiConfiguration のプロキシを設定または削除するには、その setHttpProxy() メソッドを呼び出します。プロキシ設定を取得するには、getHttpProxy() を呼び出します。

管理者が無効にした機能の説明ダイアログ

アプリでは、管理者が無効にした機能を使用しようとしているユーザーに、有用な説明を表示する必要があります。すべてのアプリで、createAdminSupportIntent() を使用して、startActivity(Intent) に渡されたときに説明ダイアログを表示するインテントを作成できるようになりました。インテントには、無効化されたカメラ、無効化されたスクリーン キャプチャ、およびすべての UserManager 制限に関するカスタマイズされたローカライズされた説明が含まれます。

Bluetooth の制限

デバイス所有者は Bluetooth を無効にできます。これは、デバイス上のすべてのユーザーとプロファイルに影響します。Bluetooth をオフにするには、ユーザー制限 DISALLOW_BLUETOOTH を追加します。

デバイス所有者とプロファイル所有者は、DISALLOW_BLUETOOTH_SHARING を使用して、ユーザーが Bluetooth 経由でファイルを送信できないようにします。ファイルの受信は影響を受けません。デバイス オーナーによって設定されている場合、DISALLOW_BLUETOOTH_SHARING はデバイス上のすべてのユーザーに適用されます。Android 8.0 にアップグレードしたデバイスの新しいプロファイルと既存のプロファイルの場合、これが Android 8.0 のデフォルトです。

動作の変更

DPC などのビジネス向けアプリを作成する場合は、Android 8.0 で行われた以下の動作変更を確認し、それに応じてアプリを変更する必要があります。

ユーザーの削除

デバイス所有者は、DISALLOW_REMOVE_USER が有効になっている場合でも、removeUser() を使用してセカンダリ ユーザーと管理対象プロファイルを削除できます。

セキュリティ

認証

DevicePolicyManager クラスで次の変更が有効になりました。

  • lockNow() メソッドは、別の仕事用チャレンジがアクティブな場合にのみ、仕事用プロファイルをロックします。
  • デバイス所有者またはプロファイル所有者として機能し、Android 8.0 をターゲットとする DPC は、resetPassword() メソッドを使用できなくなりました。呼び出されると、セキュリティ例外がスローされます。 代わりに resetPasswordWithToken() を使用する必要があります。

    注: Android 7.1.1(API レベル 25)以前をターゲットとする DPC やデバイス管理者権限のみを持つ DPC は、この変更の影響を受けません。

  • ファイルベースの暗号化をサポートするデバイスの場合、ユーザーが再起動後に初めてデバイスのロックを解除するまで、isActivePasswordSufficient() は使用できません。ユーザーがデバイスのロックを解除する前に呼び出されると、例外がスローされます。

ロックされた仕事用プロファイルからのデータ

Android 8.0 では、ロックされた仕事用プロファイルからデータを区別するためのユーザー インターフェースが変更されています。

  • 仕事用プロファイルのアプリの通知で、コンテンツが非表示になることがあります。 以前は、通知ドロワーにはロックされた仕事用プロファイルの仕事用アプリのコンテンツが表示されていました。
  • [履歴] 画面に、ロックされた仕事用プロファイルからアプリを実行するためのプレーンパネルが表示されるようになりました。カラーキー付きのシンプルなパネルには、アプリのアイコンと名前が表示されます。以前は、ロックされた仕事用プロファイルのアクティビティまたはタスクは履歴画面にプレビューが表示されていました。

デバイスの完全性

  • ENSURE_VERIFY_APPS フラグはグローバル ユーザー制限になりました。デバイス上のすべてのユーザーにこの制限がある場合、アプリの検証はデバイス上のすべてのユーザーに適用されます。たとえば、プロファイル オーナーが仕事用プロファイルに制限を設定した場合、ユーザーの個人用プロファイルでアプリの確認が行われます。
  • onSystemUpdatePending() メソッドがデバイス所有者に加えてプロファイル所有者に対しても呼び出されるようになりました。
  • SystemUpdatePolicy クラスを使用すると、セキュリティ パッチに延期ポリシーが適用されなくなるため、セキュリティ パッチを延期できなくなります。ただし、自動やウィンドウなど、他のポリシータイプの動作は影響を受けません。
  • デバイス所有者は、DISALLOW_FACTORY_RESET が有効になっている場合でも、wipeData() を使用して出荷時設定へのリセットをトリガーできます。

常時接続 VPN

Android 8.0 では、ユーザーが常時接続 VPN 接続のステータスを把握できるよう、ユーザー インターフェースが変更されました。

  • 常時接続 VPN 接続が切断された場合や接続できない場合は、閉じることができない通知がユーザーに表示されます。通知をタップすると、VPN 構成が表示されます。VPN に再接続するか、ユーザーが常時接続 VPN オプションをオフにすると、通知は表示されなくなります。
  • 常時接続 VPN を使用すると、デバイスを使用しているユーザーは、VPN を使用しないネットワーク接続をブロックできます。このオプションをオンにすると、設定アプリは、VPN に接続するまでインターネットに接続できないことをユーザーに警告します。設定を続行するかキャンセルするかをユーザーに尋ねる。

VPN アプリの VpnService は、起動後に startForeground() メソッドを呼び出す必要があります。Android システムは VPN アプリのサービスを直接開始するため、フォアグラウンドへの移行はアプリの責任となります。Android 8.0 では、VPN サービスをフォアグラウンドに移行しない VPN アプリはシャットダウンされます。

パスワード コールバック

DeviceAdminReceiver のパスワード変更コールバックに、パスワードが属しているユーザーまたはプロファイルを識別する user パラメータが含まれるようになりました。新しいメソッド シグネチャは次のとおりです。

新しいメソッドのデフォルト実装では、以前のバージョンが呼び出されます(user 引数が破棄されます)。Android 8.0 では、以前のメソッドのサポートが終了しました。

App Management API の委任

DevicePolicyManager クラスの次のメソッドは非推奨になりました。

また、1 つのスコープを複数のパッケージに委任できるようになりました。つまり、デバイス所有者とプロファイル所有者は、2 つの異なるパッケージに同じ一連の API へのアクセスを同時に許可できます。