今日の朝、Pixel 5(Android11)でGoogle Play ストア(ストアバージョンは26.0.16-21[0][PR]381519797)を起動したらこんなポップアップが表示されました。
ユーザーの使用状況に基づき、Google Play のアプリのインストール、起動、実行がより速くなります。
インストール後に初めてアプリを起動した際に、アプリのどの部分を使用したかが記録されます。一定数のユーザーにご利用いただくことで、アプリのインストールがより速くなります。
アプリのインストールの最適化は自動的にオンになりますが、設定でオフにすることもできます。 詳細
とのことです。説明の通りなのですが、多くのユーザーが頻繁に使う画面を記録して、その情報をもとにアプリのインストールを高速化するらしいです。
条件
全てのアプリが対象ではないようです。多くのユーザーに使用されているアプリでないと情報不足になってしまうからでしょうか。具体的なアプリのダウンロード数は記載されていません。
ロジック
では条件を満たした場合どのようにしてGoogle Playでのアプリインストールを高速化するのでしょうか。あくまで推測ですが書いていきます。
まず、この機能をオンにしている一定数以上のユーザーがアプリを使用します。すると良く使う画面とあまり使われない画面の情報が取れます。公式の説明には"アプリのどの部分を使用したかが"とありますが恐らくActivity単位ではないかと思います。
Activityとは
Androidの画面のことです。大雑把に言えば。
ゲームでいうとタイトル画面は全てのユーザーが必ず通りますので、タイトル画面は今回の条件に該当する画面でしょう。設定画面は必ずしも全てのユーザーが遷移する(表示する)とは限らないのでユーザーがあまり起動しない画面とGoogleは認識するでしょう。
こうして一定の情報が集まったらそれが新規ユーザーに活用されます。
AndroidではAPKもしくはApp bundleと呼ばれる形式のファイル群をダウンロードして本体に書き込むことでアプリのインストールを実現しています。
ファイル群とは何か、それはアプリで使う画像だったりプログラムだったりします。ご存知かもしれませんがAndroidアプリの開発はjavaもしくはkotlinという言語で開発します。プログラマーは人間が読み書きできるjavaでプログラムを書いて、それをアプリに変換します(コンパイル)。ここでjavaはバイトコード(中間言語、.dexファイル)になります。
Androidは多くのデバイスで同じように動作する(互換性を確保する)ためにjavaを採用しました。javaはバイトコードをVM(ART VM)と呼ばれる存在が読み取ってプログラムを実行します。ただVMが実行するといっても演算はCPUに作業を委託します。CPU、つまり機械なのでVMが理解できるバイトコードから機械が理解できる機械語に更に変換して動作させます。
上でコンパイルと書きましたが、Androidは5.0でAOTコンパイルという手法を採用しました。プログラムを実行する前にあからじめコンパイルする方法です。思えば5.0〜6.0の時代はアプリのインストール時間が長かった気がします。ただそのおかげで実行中のパフォーマンスが向上しました。4.4まではJITコンパイルというプログラムの実行直前にコンパイルする手法を取っていたため、パフォーマンスの悪化やアプリ動作中のバッテリーの消費が激しかったわけです。実行直前にコンパイル、つまり変換作業という大仕事をしていたらそりゃ動作がもたつきますわな。
しかしやっぱりAOTコンパイルはインストールが長いということもありAndroid7.0からはJITコンパイルとAOTコンパイルを組み合わせることにしたのです。一部だけAOTコンパイルしておいてあとはJITコンパイルしようということですね。
ですがそれでも課題は残っています。組み合わせるといっても実際ユーザーがどの画面を使ってどの画面が使われないかは予想できないので、使いもしない画面をAOTコンパイルしたり、パフォーマンスが必要な部分でコンパイルされていなかったが故にJITコンパイルしてパフォーマンスが出ないということがあったのでしょう。
そこで今回の新機能で多くのユーザーに使われる画面と使われない情報を入手し、良く使う画面はAOTコンパイルで事前に読み込んでおく、あまり使わない画面はAOTコンパイルしない(使うときはJITコンパイルすればいい、たいして使わない機能ならJITコンパイルで別にいい)とすることでインストールを短縮化してかつパフォーマンスも向上という風ににしようとしているのでしょう。
Android7.0未満の場合はそもそも今回の新機能が使えるのか、また使えるとしてもどう動作するかはよくわかりません。
アプリインストールの最適化をオフにする方法
細かな個人情報は採取されないとはいえ、Googleに自分が触っているアプリの操作情報や良く開く画面のデータを取られたくないという人もいるかもしれません。でも安心してください。ストアの設定からオフにすることも可能です。
参考
https://developer.android.com/about/versions/android-5.0-changes?hl=ja
https://developer.android.com/about/versions/nougat/android-7.0?hl=ja#jit_aot