すでにご存じの方も多いかと思いますが、Android O の Developer Previewが発表されました。(2017年秋頃に正式リリース??)

概要については、こちらのサイトで紹介されており、新機能やAPIは”Android O features”に記載がありますが、今回は注意点(変更点)について、いくつかピックアップして簡単に紹介します。

※今回すべての内容を記載しているわけではないので、詳細や他の項目については上記サイトの “Behavior Changes” を参照ください。

 

Apps targeting all API levels

APIレベルに関係なく、Android Oに適用される項目になります。

1. Background execution limits

Android Oにてバッテリー改善がキーになっていますが、それに伴い cached 状態に入るとwakelocksがシステムによってリリースされるようです。

2. Android background location limits
・こちらも同様にバッテリー改善に伴って、バックグラウンドでの位置情報の頻度が減るようで、具体的には以下のAPIに影響するとのことです。弊社でも位置情報を取得するアプリの開発があったりしますが、そのようなアプリでは注意が必要になりそうです。

Fused Location Provider (FLP)
Geofencing
GNSS Measurements
Location Manager

・NotificationManager.startServiceInForeground() によりフォアグラウンドサービスが開始されます。以前方法では動かなくなるようです。

3. Security
・SSLv3がサポートされなくなります。
・WebViewのオブジェクトが、マルチプロセスモードで動作するようになります。

4. Privacy
・Android_IDの管理が変更されました。
※Android_IDがアプリ単位になります。具体的には、パッケージ名/署名・ユーザー/デバイスの組み合わせででユニークな値になります。そのため、同じ端末で起動する2つのアプリではAndroid_IDが異なるため、Android_IDによる紐付けができなくなります。
※署名が同じであれば、アンインストール・再インストールで変更されることは無いようです。また、アップデートの場合も同様のようです。
・net.hostname のプロパティは、nullが返されるように変更されました。

5. Networking and HTTP(S) connectivity
HttpURLConnection接続時に、ホスト名や認証局名の後にスラッシュを追加します。たとえば、https://example.com の場合は https://example.com/ になります。仮に /がない前提でプログラムを組んでいる場合に影響があるかもしれません。

6. Android in the enterprise

DPC(デバイスポリシーコントローラー)のようなビジネス向けのアプリを作っている場合は、こちらを参考に修正を行う必要があります。(詳細は割愛)

 

Apps targeting Android O

Android Oをターゲットとしたアプリの場合に変更される点です。

1. Background execution limits

バックグラウンドで動作しているアプリは、バックグラウンドサービスへのアクセスが制限されます。詳細については、こちらを参照してください。

2.Security
・クリアテキストでの通信をオプトアウトしている場合は、HTTPSの通信が必須になります。iOSのATSと同じような話ですね。よりこの条件が厳しくなってくる可能性はあるかもしれないですね。

3. Privacy
・net.dns1, net.dns2, net.dns3, and net.dns4が使用できなくなります
・DNSなどのネットワーク情報を取得するためには、ACCESS_NETWORK_STATEが必要になるようです。

4.Permission
以前は、同じパーミッショングループに属するパーミッションがmanifestに登録されていると、同じグループのパーミションが間違って許可されていました。
例えば、例えば、READ_EXTERNAL_STORAGEとWRITE_EXTERNAL_STORAGEが設定されている場合に、READ_EXTERNAL_STORAGEが許可されたとします。その場合、システムは、WRITE_EXTERNAL_STORAGEも同時に許可していました。
しかしながら、AndroidOでは、READ_EXTERNAL_STORAGEのみが許可されるようになります。
この動き前提で実装しているアプリケーションがある場合は、気をつけたほうがいいですね。

5. Native libraries
書き込みと実行の両方が可能なロード セグメントが含まれているネイティブ ライブラリがロードされなくなります。
※書き込みおよび実行が可能なセグメントについてはこちらに説明があります。

6. Collection Handling
List.sort()をoverrideしているアプリでは、List.sort()でCollections.sort()を呼び出すと無限再帰呼び出しとなり、スタックオーバーフローが発生するようです。