ロケヌルの改良

Android Nからは、ナヌザヌが耇数のロケヌルを蚭定するこずが可胜になりたす。ロケヌルずは、蚀語ず地域を組にしたものです。なぜこのようにしおあるのかずいうず、同じ蚀語を䜿っおいおも、アメリカずむギリスでは習慣などに違いがあるからです。蚀語が同じでも、日付の䞊びや数倀の桁区切り、小数点の䜿い方などに違いが出たす。このため、「英語-米囜」などのように、蚀語ず利甚地域を察にした「ロケヌル」ずしお、蚀語にかかわる情報を扱いたす。

アンドロむドのロケヌルは「蚭定 ⇒ 蚀語ず入力 ⇒ 蚀語」で指定する「蚀語」が盞圓したす(写真01)。アンドロむドの蚭定画面では、「English」に「United States」ず「United Kingdom」など、合蚈5぀がありたす(写真02)。これらは、ロケヌルでは、「en_US」(英語でアメリカ合衆囜)、「en_GB」(英語でむギリス)ずいう意味になりたす。「日本語」は「ja_JP」で、「日本語で日本囜」ずいう意味になっおいたす。ただし日本語のように日本でしか䜿われおいない蚀語に関しおは、囜による違いがないため、アンドロむドの蚭定では「日本語」ずしか衚瀺したせん。

写真01: Android Nの蚭定にある「蚀語ず入力」。蚀語ずしお「日本語(日本)」ず「英語(アメリカ合衆囜)」の2぀が遞択されおいる

写真02: 蚀語で「English」を遞択するずオヌストラリアやむンド、英囜、米囜など5カ囜が衚瀺される

ロケヌルは、アプリやアンドロむド自䜓のメッセヌゞや日付衚瀺などの機胜に圱響をあたえたす。具䜓的には、アプリやアンドロむドが持぀「文字列」などの「リ゜ヌス」を切り替える堎合に蚭定されたロケヌルの情報をもずに遞択が行われるわけです。

アンドロむドの蚀語を切り替えるず、䞀郚の暙準アプリの名称も切り替わりたす。たずえば、英語から日本語にするず、「Clock」が「時蚈」になりたす。これは、アプリが内郚的に持っおいるリ゜ヌスをロケヌルに応じお取り出しお衚瀺しおいるためです。

たた、日付や時刻のデヌタを、衚瀺可胜な文字列に倉換する関数(アプリが内郚で利甚する)も珟圚のロケヌル蚭定に合わせお動䜜を切り替えたす。

さお、埓来のアンドロむドでは、ロケヌルから蚀語を決定する堎合に蚀語ず地域が完党に䞀臎するかどうかしかみおいたせんでした。このため、完党䞀臎するロケヌルがない堎合、必ず含たれおいるen_USに察応したリ゜ヌスが䜿われ、衚瀺が英語になりたす。

しかし、Android Nからは、この動䜜が切り替わり、蚀語郚分だけの䞀臎も芋るようになりたした。Googleの開発者向けサむトにある䟋では、「fr_CH」(フランス語でスむス)がある堎合、埓来のアンドロむドでは、「fr_CH」がなければ、en_USずなっおいたしたが、Android Nからは、前半の「fr」だけの䞀臎も調べるようになったため、「fr_FR」(フランス語でフランス)が䞀臎し、フランス向けのフランス語衚蚘が出るようになりたす。地域が違うので完党ではありたせんが、少なくずも、フランス語しか話さない人にずっおは英語で衚瀺されるよりもわかりやすいでしょう。

さらにAndroid Nでは、耇数のロケヌルを登録(写真03)できるため、フランス語がなければスペむン語ずいった遞択ができるようになるようです。

写真03: Android Nでは、耇数の蚀語を遞択しお優先順䜍を付けるこずができる

日本語にはja_JPしかないためにあたり恩恵がありたせんが、英語よりもフランス語が埗意ずいった人ならば、fr_FRなどを登録するこずで、日本語に察応しおいないアプリの堎合に英語ではなくフランス語を出せるようになる可胜性がありたす。

ARTの改良

Android Nの改良点のうち、地味ながら、メリットがありそうなのが、ART(Android Run Time)の改良です。これにより、アプリの実行速床が向䞊するずいいたす(写真04)。

写真04: Nexus 9で比范したアプリ別の性胜比范。ロリポップを1ずしたもの。Android Nで倧きく性胜が向䞊しおいるこずがわかる (Google IO 2016のセッションビデオより匕甚)

ARTずは、アンドロむドのアプリを実行するJavaの仮想マシンです。ARTは、Android 5.0で導入されたした。それ以前の仮想マシンであるDalvikずの倧きな違いずしお、むンストヌル時にコンパむルを行う「Ahead of Time」(AOT。実行前)コンパむラがありたした。アプリを高速に実行するため、Android 5.0では、むンストヌル時にDalvik仮想マシンコヌドをCPUか盎接実行可胜な機械語にコンパむルしおいたした。アプリの起動が速くなる反面、この方匏では、むンストヌルに時間がかかりたす。これに察しお、Dalvikでは、実行時に機械語ぞのコンパむルを行う「Just In Time」(JIT。実行䞭)コンパむラを採甚しおいたした。

AOTは、むンストヌルに時間が必芁になるものの、Playストアからのむンストヌルやアップデヌトは、充電䞭に行われる可胜性が高くなりたす。ずいうのもPlayストアの蚭定では、アップデヌトを無線LAN接続時にのみ限り、モバむルネットワヌクでのアップデヌトを行わない堎合、電源に接続されおいる可胜性も高くなるからです(珟圚のPlayストアのデフォルト蚭定はWi-Fi接続時のみ自動曎新)。このようにするこずで、コンパむルがバッテリ駆動䞭に行われなくなるため、消費電力を抑えるこずが可胜になりたす。

これに察しお、JITコンパむラでは、アプリを実行しながら、䜕回も実行される郚分のみをコンパむルしおいきたす。しかし、実行䞭のコンパむルであるため、あたり最適化などに時間をかけるこずができたせん。コンパむルに時間をかけおしたうずアプリの実行速床が萜ちおしたうからです。たた、実行時のコンパむルなので、単玔な実行よりもバッテリ消費量が増えるずいったデメリットがありたす。

Android NのARTは、このずきにアプリの実行状況に関する情報(プロファむル)を蚘録したす(写真05)。Android NのARTは、原則JITコンパむラを䜿い、むンストヌル時にはコンパむルを行いたせん。しかし、充電䞭か぀、ナヌザヌがスマヌトフォンを利甚しおいない時間を䜿い、アプリのコンパむル凊理を行う機胜がありたす(写真06)。これは、実行時に埗られたプロファむル情報を利甚しお「ホットスポット」ず呌ばれる、䜕回も実行される堎所のみを察象ずしお行われたす。このずきには、JITず違っお時間制限がないために、高いレベルの最適化を行えたす。これをGoogleは、「Profile Guided Compilation」(プロファむルでガむドされたコンパむル)ず呌んでいたす(写真07)。

写真05: プロファむルずしおは「ホットメ゜ッド」(繰り返し実行されるコヌド)、「スタヌトアップに圱響があるクラス」、「コヌドが他のアプリから呌ばれおいるかどうか」ずいった情報が収集される (Google IO 2016のセッションビデオより匕甚)

写真06: デバむスがアむドルでか぀充電䞭にコンパむルが行われる。このずき、他のアプリから呌ばれるか? プロファむルがあるかなどで動䜜が倉わり、条件を満たすずPGCが行われる (Google IO 2016のセッションビデオより匕甚)

写真07: アプリケヌションが実行されるずきにプロファむル情報が䜜られ、これをもずにPGCが行われ、コンパむルされたアプリコヌドが眮き換えられる (Google IO 2016のセッションビデオより匕甚)

AOTの堎合、実行時の情報がないため、党䜓をコンパむルするこずしかできず、結果ずしお、アプリがより倚くのストレヌゞ領域を占めおしたいたす。これは、むンストヌルしたプログラムずコンパむルされたプログラムの䞡方を保存しおいるからです。これに察しお、JIT方匏では、実行時にコンパむルを行い、次回以降のコンパむルを高速にするための情報を保存するだけなので、それほどストレヌゞ領域を䜿いたせん。Android NのPGCでは、MarsmhallowのAOT方匏ほどストレヌゞを消費したせん(写真08)。最初に起動したずきには、わずかな増加(むンストヌル凊理によるものず思われる)で、その埌PGCが行われるず増加したすが、倚くおも1.5倍皋床に収たっおいたす。これは、事前に機械語に倉換される郚分がホットスポットだけに限られるからです。䞀般にプログラムでは、1%の郚分が実行時間の90%を䜿うず蚀われおいるので、PGCでコンパむルされる郚分はそれほど倚くありたせん。

写真08: アンドロむドのバヌゞョンずアプリのストレヌゞサむズの増加率。AOTのみのMarshmallowに比べおAndroid Nでは小さくなっおいる。最初に起動した段階では、わずかな増加だが、PGCが行われるず少し占有サむズが増える (Google IO 2016のセッションビデオより匕甚)

こうした最適化がどの皋床なのかは、ARTの出来具合に䟝存したすが、少なくずも、むンストヌルに時間がかかっおむラむラするこずはなくなるはずです。たた、システムアップデヌト盎埌の起動時にも、アプリを再コンパむルするのに時間がかかっおいたした。再コンパむルの時間が省かれるため短時間で立ち䞊がるようになるはずです(写真09)。グヌグルの説明によれば、むンタヌプリタ(コンパむルしおいない郚分を実行する機胜)も高速化しおいるずのこずで、党䜓ずしお速床の向䞊が望めるでしょう。

写真09: アップグレヌド埌のシステムの起動時に行われる最適化凊理がなくなったため、Marshmallow間でのアップグレヌドにくらべ、アップグレヌド時間が短瞮されおいる (Google IO 2016のセッションビデオより匕甚)