Android Developers Blogにてアナウンスされた今後のセキュリティとパフォーマンスの向上について

[Improving app security and performance on Google Play for years to come | Android Developers Blog](https://android-developers.googleblog.com/2017/12/improving-app-security-and-performance.html) にてAndroidアプリのセキュリティとパフォーマンス向上のためのアナウンスがされました。これは今までにもあった”新しいAPI Levelから導入されます、使いましょう”という内容とは主旨が異なり、これからのアプリに対して最新のAPI Levelに対応を求める内容になります。

日本語訳記事も投稿されました: [今後の Google Play でのアプリのセキュリティおよびパフォーマンスの改善について | Google Developers Blog Japan](https://developers-jp.googleblog.com/2017/12/improving-app-security-and-performance.html)

# はじめに
意訳：Google Playは一年間で数十億のインストールとアップデートをおこなっています。**わたしたちは誰もが好きなアプリやゲームを見つける有意義な体験を保証するために、セキュリティとパフォーマンスを重視しています。**Android Developer達に3つの変更点とその目標、目標までのサポート予定、変更の理由、どのようにしてAndroid Deviceにて長期間セキュリティとパフォーマンスを向上させるかの勧告をおこないます。
> Google Play powers billions of app installs and updates annually. We relentlessly focus on security and performance to ensure everyone has a positive experience discovering and installing apps and games they love. Today we're giving Android developers a heads-up about three changes designed to support these goals, as well as explaining the reasons for each change, and how they will help make Android devices even more secure and performant for the long term.

# 1. Target API level requirement from late 2018
## 概要
- 2018年後半からGoogle Playにアプリをアップロードするとき、アプリのTargetを最新のAPIレベルとする必要がある
- 新規アプリは2018年8月から、既存アプリの更新は2018年11月から対応が必要となる
- セキュリティとパフォーマンスが最適化された最新のAPIをアプリに保証させることが目的

## 理由
最新のAPIに対応することでセキュリティとプライバシー保護が強化され、セキュアなアプリ開発を通してマルウェアからユーザを保護できるようになります。
このような機能はマニフェストの`targetSdkVersion`を通して最新のAPIをサポートしているアプリに適用されます。
`targetSdkVersion`を23以上するとRuntime Permission対応できるように、最新のAPIに上げることでバッテリーやメモリのリソースが誤って過度に使用されることを防ぐユーザエクスペリエンスの改善が含まれています。

意訳：このように可能な限りユーザに最高の体験を提供するために、アプリは最新のAPIレベルに対応する必要があります。

## 案件への影響
- アップデートするつもりのない既存アプリは影響なし
- 新規アプリもしくはアプリ更新する際に影響あり  
  ※ 現在のAPI Levelと機能によって対応内容が異なるため対応工数はアプリ次第。目安としてアカウント情報を扱ったりカメラやGPS等のセンサ使用、バックグラウンドで処理を走らせるなどセキュリティやパフォーマンスに関連した機能に心当たりがあれば覚悟してください。
- `minSdkVersion`は今まで通りで問題ないため、古いOSを搭載した端末へのサポートには影響なし

## 実装への影響
- Context::bindServiceにて暗黙的Intentを指定できなくなる: [Android 5.0 changes](https://developer.android.com/about/versions/android-5.0-changes.html?#BindService)
- Runtime Permissions: [Android 6.0 changes](https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-runtime-permissions)
- オレオレ証明書を信用させる方法: [Android 7.0 changes](https://developer.android.com/about/versions/nougat/android-7.0.html#default_trusted_ca)
- アカウントアクセスの許可: [Android 8.0 changes](https://developer.android.com/about/versions/oreo/android-8.0-changes.html#aaad)
- 列挙しきれないため [Android Developers](https://developer.android.com/about/index.html)
 にて各バージョンのAPIs, Changes参考

## 予定
| 時期 | 対象と対応内容 |
| ---  | --- |
| 2018年8月から | 新規アプリのTarget API Levelを8.0以上とする |
| 2018年11月から | 既存アプリ更新のTarget API Levelを8.0以上とする |
| 2019年以降 | 毎年必要な`targetSdkVersion`を上げてくからよろしくな！ |

## 将来
- API Levelだけを目標とせずパフォーマンスやセキュリティをに悪影響を与えるアプリも制限していきます。
- アプリのエコシステムの断片化を予防しつつ、セキュリティとパフォーマンスを確保しつつ、十分な期間と周知によってこれからの指針をDeveloper達に伝えていきます。
- _今年は最高に安全でパワフルなOreoをリリースしたのでよろしくな！最新のリリースが端末に届くよう支援していくのでAndroid 8.1 Oreoでアプリをつくっていきましょう！_

# 2. 64-bit support requirement in 2019
## 概要
- プラットフォームとしてはAndroid 5.0から64bitをサポートしており、現時点で40%以上のAndroid Deviceが64bitに対応している（32bitの下位互換を保ちつつ）
- アプリがNative Librariesを使っている場合だと、レジスタや命令の追加によって64bitコードのパフォーマンスがかなり向上する
- Google Playは32bitのアプリとAndroid Deviceをサポートし続ける

## 実装への影響
- 32bit対応のライブラリを含んでいるアプリは64bitの対応が必要になる  
  ※ 1つのAPKで32bit, 64bit両方を対応するか、[Multiple APK Support](https://developer.android.com/google/play/publishing/multiple-apks.html) 対応するか
- Native Libraryを含まないアプリは影響なし

## 予定
- 2019年8月から対応予定
- 32bit→64bit移行のため事前通知中
- 今後は64bit Native Libraryのパフォーマンスの利点等について投稿する。NDK向けの  [CPUs and Architectures](https://developer.android.com/ndk/guides/arch.html) ガイドもあわせて確認してほしい

## 将来
- 将来的にはAndroid Deviceは64bitコードのみサポートし、Google Playで配布するアプリは32bitに加えて64bitのサポートを必須とする

# 3. Security metadata in early 2018
- Google Playから配布されたアプリであることを証明するためにApkにSecurity Metadataが追加される
- アプリ容量として気になる程の容量にはならず、アプリに影響はない
- Developer達は何もしなくてよい
- 将来的にGoogle Playのエコシステムの改善に使われる。  
  ※ 新しい配布タイミングの追加や、アプリのアップデート配信の改善など

# 所感
- 何のためにアカウント情報をみているのかよくわからないアプリや、画面外で極端に端末のリソースを消耗しているアプリの抑制につながるので、このような方針が示されたことは嬉しい。
- ~~誤認識すると影響が大きいので [Google Developers Blog Japan](https://developers-jp.googleblog.com/) に素晴らしい日本語訳記事きてほしい~~  
日本語訳記事きました [今後の Google Play でのアプリのセキュリティおよびパフォーマンスの改善について | Google Developers Blog Japan](https://developers-jp.googleblog.com/2017/12/improving-app-security-and-performance.html)
- 対応していきたいのでPixel2売ってほしい