Android N Developer Previewの変更点ざっくりまとめ

去る3/10(木)、Android N Developer Previewが唐突に発表されたので動作変更点をざっくりまとめてみました。意訳が多分に含まれるので「ここ間違ってんぞオラァ!」というところがあればご指摘いただけると幸いです。

Android Nでの動作変更点(Behavior Changes)のまとめとなります。

一通り目を通しましたが細かいところは省いています。大きいところはやはりJava8対応と省電力化でしょうか。

特に省電力周りに関しては今後も積極的に取り組んでいくと明言していることから、かなり本気で取り組んでいることが見て取れます。

スポンサーリンク

パフォーマンス改善

  • Dozeが強化された。
  • Marshmallowでは、端末が 1)非充電中 2)静止中 3)スクリーンオフの状態がしばらく続いた場合Dozeされるが、Android Nでは 2)の静止中という条件が緩和される。例えば端末をポケットに入れて移動している場合にもDozeされるようになる。
  • Dozeの状態は2段階ある。
  • 端末が電源に繋がっていない状態でしばらくの間スクリーンオフになると、第1段階のDozeに入る。この状態になるとネットワークの利用が不可となり、アプリ内の処理(バックグラウンド処理とか)の実行は延期される。
  • 端末が第1段階のDozeになってから、しばらく端末を静止した状態にすると第2段階のDozeに突入する。第2段階のDoze状態になるとネットワークだけでなくWakelock、AlarmManager、GPS、Wi-Fiスキャンなどの機能も制限される。
  • いずれのDoze状態になっても、一定間隔でネットワークアクセスや延期されたジョブが実行される。
  • スクリーンオンまたは電源接続でDozeが解除される。

Project Svelte

  • Android Nでは以下の3つの暗黙的インテントが廃止された。
    1. CONNECTIVITY_ACTION
    2. ACTION_NEW_PICTURE
    3. ACTION_NEW_VIDEO
  • これらを廃止する理由は、多くのアプリが上記のブロードキャストに対するレシーバーを登録していることで、これらのブロードキャスト受信時に多くのアプリのプロセスが起動してしまい、一斉にCPUが使用されることにより大量に電力が消費されてしまうからである。
  • 接続状態の変化は頻繁に発生するうえ多くのアプリがレシーバーを登録しているため、CONNECTIVITY_ACTIONを廃止する効果は大きい。
  • そういうわけでAndroid Nからはマニフェストに記載されていてもCONNECTIVITY_ACTIONを受信することはできない
  • CONNECTIVITY_CHANGEはフォアグラウンドのアプリのみ引き続き使用できる。
  • ACTION_NEW_PICTUREとACTION_NEW_VIDEOは送信も受信もできない。これはAndroid N向けのアプリのみではなく全てのアプリで同様となる。
  • 将来的に他にも廃止される暗黙的インテントがあるだろう。今後はマニフェストでブロードキャストレシーバーを登録して暗黙的インテントを受けるような処理は避けた方がよい。
  • バックグラウンド処理がしたければ代わりにJobSchedulerを使うべし。

パーミッションの変更

  • Android Nではユーザアカウントと外部ストレージ書き込みのパーミッションに変更有り。
  • GET_ACCOUNTSはdeprecatedになった。Android N向けアプリではこのパーミッションは無視される。
  • ACTION_OPEN_EXTERNAL_DIRECTORYが追加された。このパーミッションが許可されるとACTION_OPEN_EXTERNAL_DIRECTORYインテントが使用できるようになる。このインテントによってシステムはアプリ用のディレクトリを作成する。
  • アプリはACTION_OPEN_EXTERNAL_DIRECTORYのインテントを受信するとユーザにパーミッションを求めるダイアログを表示する。ユーザが許可するとそのアプリ用のディレクトリに読み書きできるようになる。この時、STORAGEパーミッションは不要である。
  • Intentのリファレンスを更新したので詳細はそっち見てね。(http://developer.android.com/intl/ja/preview/setup-sdk.html#docs-dl)

アクセシビリティの改善

  • Android Nではアクセシビリティを改善した。
  • スクリーンサイズを拡大できるようにした。
  • API level23以下の場合、この機能を有効にするとアプリのバックグラウンドプロセスは一旦Killされる。フォアグラウンドプロセスではonConfigurationChangedが実行される。
  • 基本的にはほとんどのアプリでこの機能向けに何か実装しなければならないということはないが、画面横幅が320dpの端末でも正常に機能することをテストすべし。

Java8サポート!

  • Android NではJavaをOpenJDK8ベースに変更する。ついにAndroidにもJava8が。
  • Javaの内部実装に依存するような処理(privateなフィールド使ってたりとか)がある場合は影響を受ける可能性がある。例えばArrayListのprivateなフィールドarrayは削除されたので、これを使ってるとNoSuchFieldExceptionで落ちる。
  • Comparatorで自分自身を比較することができる。
  • Crypto security providerが無くなった。(なんだそれ)

NDK Apps Linking to Platform Libraries

  • Android Nでは、非公開APIの使用させないようにネームスペースを変更した。
  • NDK使ってる場合は公開APIだけを使うようにした方がよい。さもないとNが正式リリースされた時にクラッシュするかもよ。
  • Android N上で動いてるアプリで非公開API使ってたらlogcatにエラーログ出力するよ。ついでに画面上にもエラー表示するよ。
  • もし非公開APIを使ってるサードパーティ製のネイティブライブラリを使ってる場合、Android Nの正式バージョンで動かしたらクラッシュするから注意されたし。
  • アプリはNDKに含まれていないネイティブライブラリに依存すべきではない。もし古い端末でNDKに含まれていないネイティブライブラリを使用しなければならない場合、APIレベルに応じてロードするライブラリを変更すべし。

Android for Work

  • Android Nでは証明書インストール、パスワードリセット、secondary user management(端末アカウントの制御)、端末固有識別子へのアクセスなどに変更があった。
  • Android N向けの端末でDevicePolicyManagerの機能を使う場合DevicePolicyManager.setCertInstallerPackage()を実行する前にdelegated certificate installerがインストール済みでなければならない。さもないとIllegalArgumentExceptionが発生する。
  • パスワードリセットはDevice adminではなくProfile ownerで行うように変更した。Android NではDevice adminのアプリからDevicePolicyManager.resetPassword()しても、パスワード設定済みの場合は変更できないようになった。
  • Device ownerとProfile ownerのアプリは、たとえDISALLOW_MODIFY_ACCOUNTSの設定が有効になっていてもAccountManagementAPIからアカウント情報を変更できるようになった。
  • Device ownerは端末に新規のアカウントを追加することができる。
  • DISALLOW_ADD_USER設定が有効になっている場合、端末のユーザは新規のアカウントを追加できないが、Device ownerは追加できる。
  • CreateUser()とcreateAndInitial()メソッドはdeprecatedとなり、代わりにDevicePolicyManager.createAndManageUser()が使用できる。
  • Device ownerは端末固有識別子にアクセスできる。DevicePolicyManager.getWifiMacAddress()で端末のMACアドレスが取得できる。ただし端末で一度もWi-FiがONにされていなければnullが返る。
スポンサーリンク

シェアする

フォローする