Skip to content

Most visited

Recently visited

navigation

Android 6.0 の変更点

Android 6.0(API レベル 23)には、新機能以外にもさまざまなシステムの変更や API の動作の変更が盛り込まれています。このドキュメントでは、アプリ開発において把握しておくべき主な変更点について説明します。

過去に Android アプリを公開したことがある場合は、これらのプラットフォームの変更がアプリに影響を及ぼす場合があることに注意してください。

実行時パーミッション

このリリースでは、アプリのパーミッションを実行時にユーザーが直接管理できる新しいパーミッション モデルが採用されました。このモデルによって、ユーザーに対するパーミッションの可視性と制御性が向上し、アプリ デベロッパーにとっては、アプリのインストールや自動アップデート プロセスの効率が向上します。ユーザーはインストール済みアプリのパーミッションを個別に付与したり取り消したりできます。

Android 6.0(API レベル 23)以上を対象としたアプリでは、必ずパーミッションを実行時に確認および要求するようにします。アプリにパーミッションが付与されているかどうかを確認するには、新しい checkSelfPermission() メソッドを呼び出します。パーミッションを要求するには、新しい requestPermissions() メソッドを呼び出します。アプリが Android 6.0(API レベル 23)を対象としていない場合でも、新しいパーミッション モデルでアプリをテストするようにしてください。

アプリで新しいパーミッション モデルをサポートするための詳細については、システム パーミッションの操作をご覧ください。アプリへの影響を評価する際のポイントについては、パーミッションのベスト プラクティスをご覧ください。

Doze とアプリ スタンバイ

このリリースでは、アイドル中の端末やアプリに対する新しい省電力の最適化機能が採用されています。これらの機能はすべてのアプリに影響するため、アプリをこれらの新しいモードでテストしてください。

これらの省電力機能の変更点については、Doze とアプリ スタンバイ用に最適化するをご覧ください。

Apache HTTP Client の削除

Android 6.0 リリースでは、Apache HTTP クライアントのサポートが削除されました。アプリでこのクライアントを使用していて、Android 2.3(API レベル 9)以上を対象としている場合は、代わりに HttpURLConnection クラスを使用してください。この API は透過的データ圧縮と応答のキャッシュによってネットワーク使用を軽減し、電源の消費を最小化するため、効率性が向上します。Apache HTTP API を引き続き使用するには、まず build.gradle ファイルで次のコンパイル時の依存関係を宣言する必要があります。

android {
    useLibrary 'org.apache.http.legacy'
}

BoringSSL

Android は、OpenSSL から BoringSSL ライブラリに移行しています。アプリで Android NDK を使用している場合は、libcrypto.solibssl.so など、NDK API の一部でない暗号化ライブラリにリンクしないでください。これらのライブラリは パブリック API ではなく、リリースや端末に対する通知なしで変更されたり、機能しなくなったりする可能性があります。また、セキュリティ上の脆弱性のリスクにさらされる場合もあります。代わりに、ネイティブ コードを変更して JNI 経由で Java の暗号化 API を呼び出すか、他の暗号化ライブラリに静的リンクします。

ハードウェア識別子へのアクセス

データをより確実に保護するために、このリリース以降では、Wi-Fi API や Bluetooth API を使用したアプリによる、端末のローカル ハードウェア識別子へのプログラムからのアクセスが削除されました。WifiInfo.getMacAddress() メソッドと BluetoothAdapter.getAddress() メソッドは定数値 02:00:00:00:00:00 を返すようになりました。

Bluetooth スキャンや Wi-Fi スキャンを介して近くの外部端末のハードウェア識別子にアクセスするには、アプリに ACCESS_FINE_LOCATION またはACCESS_COARSE_LOCATION パーミッションがある必要があります。

: Android 6.0(API レベル 23)を搭載している端末がバックグラウンドで Wi-Fi スキャンや Bluetooth スキャンを開始すると、その操作はランダムな MAC アドレスから開始されたものとして外部端末で認識されます。

通知

このリリースでは Notification.setLatestEventInfo() メソッドが削除されました。通知を作成するには、代わりに Notification.Builder クラスを使用してください。通知を繰り返しアップデートするには、Notification.Builder インスタンスを再利用します。build() メソッドを呼び出して、アップデートされた Notification インスタンスを取得します。

adb shell dumpsys notification コマンドは通知テキストを出力しなくなりました。通知オブジェクトのテキストを出力するには、代わりに adb shell dumpsys notification --noredact コマンドを使用してください。

AudioManager の変更点

AudioManager クラスで音量を直接設定したり、特定のストリームをミュートにしたりする方法はサポートされなくなりました。setStreamSolo() メソッドは廃止されたため、代わりに requestAudioFocus() メソッドを呼び出す必要があります。同様に、setStreamMute() メソッドも廃止されたので、代わりに adjustStreamVolume() メソッドを呼び出して、値に ADJUST_MUTEADJUST_UNMUTE を渡します。

テキストの選択

ユーザーがアプリ内でテキストを選択するとき、切り取り、コピー、貼り付けなどのテキスト選択のアクションをフローティング ツールバーに表示できるようになりました。個別のビューに対してコンテキスト アクション モードを有効にするにあるように、コンテキスト アクションバーに関するユーザー操作の実装も同様です。

テキスト選択にフローティング ツール バーを実装するには、既存のアプリに次の変更を加えます。

  1. View オブジェクトか Activity オブジェクトで、ActionMode の呼び出しをstartActionMode(Callback) から startActionMode(Callback, ActionMode.TYPE_FLOATING) に変更します。
  2. 既存の ActionMode.Callback の実装を、ActionMode.Callback2 に拡張します。
  3. onGetContentRect() メソッドをオーバーライドして、ビューのコンテンツの Rect オブジェクト(テキスト選択の四角形など)の座標を指定します。
  4. 四角形の位置が有効でなくなり、無効な要素がこれのみである場合は、invalidateContentRect() メソッドを呼び出します。

Android Support Library revision 22.2 を使用している場合、フローティング ツール バーに下位互換性はなく、デフォルトで appcompat が代わりに ActionMode オブジェクトを制御することに注意してください。このため、フローティング ツールバーが表示されなくなります。AppCompatActivityActionMode がサポートされるようにするには、getDelegate() を呼び出して、返された AppCompatDelegate オブジェクトで setHandleNativeActionModesEnabled() を呼び出し、入力パラメータを false に設定します。この呼び出しによって、ActionMode オブジェクトの制御がフレームワークに返されます。Android 6.0(API レベルl 23)を実行する端末ではフレームワークによる ActionBar やフローティング ツールバー モードのサポートが可能ですが、Android 5.1(API レベル 22)以前の端末では ActionBar モードのみがサポートされます。

ブラウザ ブックマークの変更点

このリリースではグローバル ブックマークのサポートが削除されました。android.provider.Browser.getAllBookmarks() メソッドと android.provider.Browser.saveBookmark() メソッドが削除されました。同様に、READ_HISTORY_BOOKMARKSWRITE_HISTORY_BOOKMARKS パーミッションも削除されました。アプリが Android 6.0(API レベル 23)以上を対象としている場合は、グローバル プロバイダからブックマークにアクセスしたり、ブックマーク パーミッションを使用したりしないでください。代わりに、アプリでブックマーク データを内部的に保存してください。

Android キーストアの変更点

このリリースでは、Android Keystore プロバイダによる DSA のサポートがなくなります。ECDSA は引き続きサポートされます。

停止時に暗号化を必要としないキーが、ロック画面の(ユーザーや端末の管理者などによる)無効時やリセット時に削除されなくなりました。停止時に暗号化を必要とするキーは、これらのイベント時に削除されます。

Wi-Fi とネットワークの変更点

このリリースでは、Wi-Fi API とネットワーク API の動作が次のように変更されました。

カメラ サービスの変更点

このリリースでは、カメラ サービスの共有リソースへのアクセス モデルが、以前の「先着順」モデルから「優先度順」に変更されました。このサービス動作の変更には、次のようなものがあります。

ランタイム

ART ランタイムで、newInstance() メソッドに対するアクセス ルールを正常に実装できるようになりました。この変更によって、以前のバージョンで Dalvik がアクセス ルールを正しく確認できなかった問題が解決しました。アプリで newInstance() メソッドを使用していて、アクセス チェックをオーバーライドしたい場合は、setAccessible() メソッドを呼び出して入力パラメータを true に設定します。アプリで v7 appcompat ライブラリv7 recyclerview ライブラリを使用する場合は、これらのライブラリの最新バージョンを使用するようアプリをアップデートする必要があります。アップデートしない場合は、XML から参照するカスタム クラスがアップデートされていて、クラス コンストラクタがアクセス可能であることを確認する必要があります。

このリリースでは、動的リンカーの動作がアップデートされました。動的リンカーでは、ライブラリの soname とそのパスの違いを認識でき(public bug 6670)、soname による検索が実装されています。以前動作していたアプリで間違った DT_NEEDED エントリを持つもの(ビルドマシンのファイル システムの絶対パスなど)は、読み込み時に失敗する場合があります。

dlopen(3) RTLD_LOCAL フラグは正常に実装されました。RTLD_LOCAL はデフォルトのため、RTLD_LOCAL を明示的に使用しない dlopen(3) への呼び出しは影響を受けます(アプリで明示的に RTLD_GLOBAL を使用している場合を除く)。RTLD_LOCAL では、dlopen(3) を後で呼び出すことによりロードされたライブラリで記号を使用できません(DT_NEEDED エントリによって参照された場合とは逆です)。

以前のバージョンの Android では、アプリがテキストの再配置を伴って共有ライブラリをロードするようにシステムに要求した場合、システムは警告を表示しましたが、ライブラリのロードは許可しました。このリリース以降では、アプリの対象とする SDK バージョンが 23 以上である場合、システムはこのライブラリを拒否します。ライブラリのロードが失敗したことを検出するには、アプリで dlopen(3) の失敗を記録し、dlerror(3) の呼び出しから返された問題について記述しているテキストを含めます。テキスト再配置の処理については、こちらのガイドをご覧ください。

APK の検証

プラットフォームでより厳しい APK の検証が行われるようになりました。APK がマニフェスト ファイルで宣言されているにもかかわらず、APK 自体に存在しない場合、その APK は破損しているとみなされます。コンテンツが一部でも削除された場合は、APK の再署名が必要になります。

USB 接続

USB ポートからデバイスを接続すると、デフォルトで充電専用モードに設定されるようになりました。USB 接続を介してデバイスとそのコンテンツにアクセスするには、ユーザーはそのようなインタラクションに明示的にパーミッションを付与する必要があります。USB ポートを介したユーザーとデバイスのインタラクションをアプリでサポートする場合は、そのインタラクションを明示的に有効にする必要があることに留意してください。

Android for Work の変更点

このリリースには、次のような Android for Work に関する動作の変更点が含まれています。

This site uses cookies to store your preferences for site-specific language and display options.

Hooray!

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.