Open11
これまでの Android リリースバージョンを追う
Android 5 Lollipop
- Delvik VM から ART に変更された
- Material Design をサポートするようになった
- アプリ上でスクリーンキャプチャとスクリーンシェアが実行できるようになった
- Camera2 API が導入された
- CameraX との違い
- Camera2 は低レベルの領域までカスタムできる一方で、CameraX はカメラ周りをより簡単に実装できる API を用意した Jetpack ライブラリ
- CameraX との違い
- JobScheduler が導入された
- JobInfo で定義したネットワーク接続環境や充電状態に合致したら、設定した Job を実行する
- 補足: WorkManger との違いについて
参考資料
Android 6.0 Marshmallow
- ランタイムパーミッションが導入された
- システムが dangerous 規制レベルと設定しているエリアに対するアクセスがアプリ実行中に発生する場合に必要な処理
- バッテリー消費量削減を目的に、Doze と StandBy モードが導入された
- Doze: 充電状態ではない端末の画面がオフになっている状態で一定期間経つと、Doze モードに入る。この状態ではネットワーク接続やCPU集中処理を遅延させ、定期的なメンテナンスモード時間中に遅延させた処理を実行させる
- App Standby: ユーザーがアプリを活発に使用していないとシステムが判断した場合に、App Standby モードに入る。システムはアプリをアイドリング状態にする。端末が充電状態ではない場合、ネットワーク接続を無効にし、同期やジョブを中断する
- Doze と AppStandby 中でも動作する Firebase Cloud Messaging を利用して、アプリとのメッセージのやり取りすることを推奨されている
- 通知作成処理として、Notification.Builder クラスが追加される
- テキスト選択(カット、コピー、ペースト)のツールバー表示が可能になった
参考資料
Android 7.0 Nougat
- マルチウィンドウをサポートするようになった
- スマホやタブレットにて、2 つのアプリケーションを左右/上下に画面を分割して同時に実行できるようになった
- 2 つのアプリケーション間で、ドラッグ・アンド・ドロップができる仕様
- 詳細な情報はこちら
- 通知デザインを変更されるなど、機能が強化された
- 通知テンプレートが更新された
- 通知上からSMSなどの返答ができる Direct Reply が追加された
- 詳細な情報はこちら
- ART に JIT(Just In Time)コンパイラが追加された
- ART はこれまで AOT(Ahead Of Time)コンパイラのみを使用していた
- JIT コンパイラの導入により、アプリ実行とともに動的に最適化されることで、アプリのパフォーマンスの向上、ストレージの節約、アプリやシステムアップデート速度の向上などの恩恵が生まれる
- AOT コンパイラによる最適化後のアプリやシステムアップデートに数分の時間がかかっていたものが、あっという間に完了するようになった
- Android 6.0 で導入された Doze が強化された
- Project Svelte(バックグラウンドの最適化)が進行する
- Android 5.0 から導入された
JobScheduler
やGCMNetworkManger
の拡張が行われている - 詳細はこちら
- Android 5.0 から導入された
-
SurfaceView
の導入-
TextureView
よりもバッテリーのパフォーマンスが良い - Starting with Android 7.0, we strongly recommend that you save power by using SurfaceView instead of TextureView.
-
- Data Saver モードの導入
- 設定画面で Data Saver モードの ON/OFF を切り替えられる
- Data Saver モードの場合、バックグランドでのデータ使用のブロックし、フォアグラウンドでのデータ使用の制限(ストリームのビットレート制限や画像の質を落とす、プリキャッシュの遅延など)を行う
-
ConnectivityMangaer
を利用して、データ使用制限の設定を確認できる - 詳細はこちら
- 3D レンダリング の Vulkan API が Android に導入された
- Quick Settings Tile API が追加された
- Quick Settings Tile をカスタマイズできる
- マルチローカルサポートが導入された
- Network Security Config が導入された
- 詳細はこちら
参考資料
Android 8 Oreo
- Android TV で導入されていた picture-in-picture(PIP)がモバイルにも導入された
- PIP モードに入ると、アプリのライフサイクルは
pause
状態になるが動画再生を続ける必要がある - この理由で、動画再生の中断は
onPause
ではなく、onPause
で中断し、onResume
で再開するように実装する必要がある
- PIP モードに入ると、アプリのライフサイクルは
- 通知デザインが変更された
- Notification Channel が追加された
- 通知ごとにユーザーが設定をカスタマイズできるようにする
- *all notifications must be assigned to a channel or they don't appear. *
- Notification dots が追加された
- 通知があった際にアプリアイコン上に表示されるバッジ
- システム側でバッジを表示するため、バッジ表示のための実装は必要なし
- バッジ表示はカスタマイズできる
- Notification Channel が追加された
- Autofill framework が追加された
- アカウント作成やログイン、クレジットカード決済情報の入力などで活用できる
- Font をリソースとして管理できるようになった
- Android 8.0以前では、フォントの管理は比較的制限されており、フォントファイルをアプリに含めるか、サードパーティのライブラリを使用する必要があった(ChatGPT情報)
- Font リソースの導入は、こちら
- Autosize Textview が導入された
- 横と高さに応じて、テキストサイズを柔軟にあわせてくれる
- Adaptive icons が追加された
- marginVertical や paddingHorizontal などが追加された
- App Category が追加された
- Activity 生成後にどの
View
がフォーカスを当てられるかを設定できるようになった- 画面表示時の検索バーにフォーカスを当てて、キーボード表示を実行できる
- https://developer.android.com/about/versions/oreo/android-8.0
参考資料
Android 9 Pie
- Wi-Fi RTT(Round-Trip-Time)がリリースされた
- 室内の位置情報をより精密に測定するための機能
- ディスプレイカットアウト(ステータスバーやんナビゲーションバー)のサポートが追加された
- 通知機能が強化された
- 通知からのメッセージ返信機能(Android 7.0 でリリース)が強化された
- Notification Channel(Android 8.0 でリリース)の設定項目が簡単になった
- 画像関係
-
ImageDecoder
が追加されて、画像のデコードが現代的になった - GIF と WebP のアニメーション画像表示を担当する
AnimatedImageDrawable
が追加された
-
- 端末のオリエンテーションを固定することができるモードが追加された
参考資料
Android 10
- Android 10 のリリースノートから、「Migrating your apps to Android 10」ページが表示されている
- 2 つのフェーズごとの手順がまとめらている
- Phase 1: Basic compatibility
- Phase 2: Build with Android 10
- 2 つのフェーズごとの手順がまとめらている
Behavior changes: all apps
- Gesture Navigation が導入された
- 画面左から右へスワイプする: Back ボタンが押下される挙動をする
- 画面下から上へスワイプする: Home ボタンが押下される挙動をする
- 導入された背景: https://android-developers.googleblog.com/2019/08/gesture-navigation-backstory.html
- Target API レベルが 22 以下のアプリの初回起動時に、警告ダイアログが表示されるようになった
- 2017 年より Google がセキュリティとパフォーマンスの向上を目的に TargetAPI レベル設定を要件と課すようになった
Behavior changes: apps targeting API 29+
- Foldable 端末のサポートが開始された
- マルチディスプレイモード上にスタックされて表示されているアプリは Resume された状態である
- ただし、
topmost resumed
されたアプリだけが focus を持っていることになる- ユーザーが最期に接触したアプリが
topmost resumed
として設定される -
onTopResumedActivityChanged()
コールバックで判定できる
- ユーザーが最期に接触したアプリが
- Learn about foldables: https://developer.android.com/guide/topics/large-screens/learn-about-foldables
Privacy changes in Android 10
- 外部ストレージに対するスコープアクセスが追加された
- アプリごとに作成されたディレクトリ内に設置されたファイルにのみアクセスできる
- スコープアクセスに対しては、ユーザーからのパーミッションをもらう必要はない
- バックグラウンド上のアプリが端末 GPS にアクセスする場合には、パーミッションが必要になった
- ACCESS_BACKGROUND_LOCATION
- WiFi を有効/無効にするアクションを制限するようになった
- WifiManager.setWifiEnabled() は非推奨となり、常に false を返すようになった
Android 10 for Developers
- Foldable 端末のサポートを開始した
- 5G ネットワークのサポートを開始した
- 通知に対して、スマートリプライ(返信の候補表示)機能が追加された
- システムにダークモードが追加された
- Gesture navigation が導入された
- Sharing shortcuts が導入された
参考資料
Android 11
Behavior changes: all apps
- プライバシーの制限に変更が追加された
- ワンタイムパーミッション
- ロケーションやマイク、カメラへの一時的なアクセスを許可するオプションがユーザーに付与された
- パーミッションへの度重なる拒否アクションは「Don't ask again」を意味するようになった
- ワンタイムパーミッション
- Exposure Notifications が追加された
- 新型コロナウィルスの拡大防止を支援する目的で作られた機能
- https://japan.googleblog.com/2020/08/update-exposure-notifications.html
- Android エミュレータに 5G のサポートが追加された
- Map v1 共有ライブラリが除去された
Behavior changes: Apps targeting Android 11
- Permission auto-reset
- ユーザーが数カ月間アプリを使用していなかった場合、システムがアプリのランタイム・パーミッションを自動でリセットする
- バックグラウンドから送られる Toast は表示されなくなった
- Media intent actions は事前にインストールされたカメラのみに対応する
- android.media.action.VIDEO_CAPTURE
- android.media.action.IMAGE_CAPTURE
- android.media.action.IMAGE_CAPTURE_SECURE
Privacy in Android 11
WIP
Features and APIs Overview
WIP
参考資料
android 12
Behavior changes: all apps
- ネイティブの
SplashScreen
API が追加された- 以前にカスタムスプラッシュスクリーンを使用している場合には、マイグレーションを実行する必要がある
- マイグレーションガイド: https://developer.android.com/develop/ui/views/launch/splash-screen/migrate
- 没入モード(immersive mode)時にシステムバーを隠しやすくなるコマンドができた
-
WindowInsetsControllerCompat
を使用する - 詳細: https://developer.android.com/develop/ui/views/layout/immersive#immersive-consolidated-behavior
-
- すべてのアプリがマルチウィンドウモード対象となった
-
android:resizeableActivity=false
に設定することで、システムが自動でマルチウィンドウモードに対応させないようにはできる
-
- GPS 機能でユーザーが大体のロケーション情報を提供するパーミーッションを許可できるようになった
- ルート Activity が表示されている状態でバックキーを押下しても、Activity は destroy されない仕様となった
Behavior changes: Apps targeting Android 12
- Activity などに
android:exported
を宣言することが義務化された
Features and APIs Overview
- Material You が導入された
参考資料
andriod 13
Behavior changes: all apps
- 通知一覧に Task Manager が表示されるようになった
- Task Manager 内でフォアグラウンドで起動しているアプリを停止できる
- Stop を押下すると、システムはアプリをメモリから削除し、アプリ全体が停止する
- Stop 押下時にシステムはアプリにコールバックを何も送信しない
- バッテリーの最適化運用に変更があった
- Restricted Buckets: 最も優先度が低いアプリが格納される bucket
- Android 12 で 45 日、Android 13 で 8 日間に渡りユーザーがアプリを操作しなかった場合に Restricted Bucket に格納される
- アプリ通知へのランタイムパーミッション
POST_NOTIFICATION
が必要になった- Andorid 13 からインストールされたアプリは、本パーミッションでユーザーから許可を受けないと、デフォルトでアプリ通知がオフに設定される
- 詳細はこちら
- マッチしない intent-filter がブロックされるようになった
Behavior changes: Apps targeting Android 13 or higher
-
PlaybackState
からメディアコントロールを反映して、リッチなコントロールコンポーネントを表示できるようになった - アプリ内のテーマカラーが自動的に WebView のコンテンツに反映される
- 広告IDを使用するためにパーミッションを追加する必要ができた
Features and APIs Overview
- Adaptive Icons が導入された
- 詳細はこちら
- アプリごとに使用言語を設定できるようになった
- Predictive Back Gesture が追加された
参考資料
android 14
Behavior changes: all apps
- SCHEDULE_EXACT_ALARM パーミッションがデフォルトで拒否となる
- targetSdkVersion が 23 以下のものはアプリがインストールできなくなる
- 写真や動画への一部のみにアクセスする許可を求めるダイアログを出せるようになる
- 対応方法はこちら
- READ_MEDIA_VISUAL_USER_SELECTED
- This permission will be automatically added to an app's manifest if the app requests READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, or ACCESS_MEDIA_LOCATION regardless of target SDK.
Behavior changes: Apps targeting Android 14 or higher
WIP
Features and APIs Overview
WIP