KitKat開発者が語る、Android軽量化の裏話

写真拡大 (全2枚)

グーグルは最新のAndroidバージョンで高いデザインと性能を保ちつつ軽量化を実現していた。

Androidは熟成したOSとなった。グーグルでAndroid開発に関わってきたエンジニア達も、このOSが他のモバイルOS(特にアップルのiOS)に対する「機能パリティ(機能均衡)」を実現しており、どんな相手とも競争できるようになったと考えているようだ。

この機能均衡を達成してからの数年間、グーグルはAndroidOSのさらなる改良に取り組んできた。まず最初にJelly Bean 4.1のリリースでは「Project Butter(※)」と題したプロジェクトによって、Androidの信頼性の向上と高速化を計った。

※バターをパンに塗るときのような「なめらかな」操作感を目指しこの呼び名がつけられた。

グーグルは次に、高い機能性を維持したままAndroidの使用するメモリー領域を小さくすることに着手した。このプロジェクトは「Project Svelte(英語でスレンダーの意)」と呼ばれ、その結果はAndroidの最新バージョンとなる4.4 KitKatに実装された。

「これはよく言うジョークなんだが、私が最初に取り掛かったプロジェクトはシステムの動作をスムーズにするProject Butterだった。バターは食べすぎると太ってしまうだろう?だから次に私はProject Svelteで、今度はそれを減量して太った分をすべて落とすことになったんだ。これで結局私のAndroidへの貢献はプラマイゼロになってしまったように感じるよ。」とAndroidのエンジニアリング責任者であるデーブ・バークはReadwriteとのインタビューで語った。

Project Svelteにおいてグーグルは、Androidの持つ最新のデザインとハードウェア機能をどのメーカーが作る端末上でも動作させることを目的としている。Android KitKatは512MBのRAMしか持たないデバイスにおいても動作が可能で、これは問題視されていたAndroidの細分化を防ぐための一手でもある。これまではローエンドのスマートフォンはAndroid Gingerbread 2.3を使う以外に選択肢が無かったのだ。

関連記事:「グーグルはAndroid Gingerbreadをどう料理するつもりなのか?」

いかにしてAndroidチームはAndroid KitKatをこれほど広範囲のデバイスにフィットするように軽量化できたのだろう。それはすべて1台のNexus4から始まった。

「Project Svelteの目標はOSの使うメモリー容量を512MBまで減らすことだった。これまで公にしてこなかったが、これを実現するため我々はまず1台のNexus 4を改造し512MBだけで動くようにした。」とバークは語った。

続いてKitKatの動作解像度を下げ、4つ必要だったプロセッサーのコアを2つに変更した。クロック・スピードも下げられた。Androidのエンジニア達は彼らが作っているものに近いエクスペリエンスを得るため、自分自身で製品をテストできるよう、全員が常にこのスリムダウンされたNexus 4を使うことにした。

「解像度をqHD、960×540ピクセルに落とした。この解像度を選んだのはエントリーモデルのスマートフォンの多くがこれを使うからだ。」とバークは言う。「その後CPUも4つから2つに落とし、クロックも下げた。その制限されたデバイスを我々チームは個人の電話として毎日使ったのだ。最初は苦痛だったし、クラッシュしてばかりだった。」

Nexus4の性能を意図的に落としてからグーグルはAndroidの軽量化に関して次の4つの目標をたてた。

・システムのサイズを減らす。
・Google Experience デバイス(つまりNexus)上で動作するアプリのメモリー領域(使用メモリ)を減らす。
・メモリーが足りなくなった際のアプリの動作とクラッシュ後の動作を修正する。
・Android内で動作するアプリの測定・計測機能を強化する。これにより開発者が自身のアプリがどのくらいメモリーを使うのかを把握できる。

ちなみに最後の目標は「ProcStats(process stats)」と呼ばれており、KitKat搭載デバイスの開発者モードからアクセスできる。バークはこのprocess statsが開発者にとってどうのように動作するかを次のように説明している。

ProcStatsはユーザー向けの機能ではないが、Android KitKatを搭載したデバイスの開発者向けオプションから利用できる。これはprocess とstats(statistics)を合わせた造語で、動作中のアプリやサービスを監視し、動作頻度とバックグラウンドにおけるRAMの使用量を常にチェックしている。そして「重さスコア」とでも言うべき値を計算する。これはそのアプリやサービスがどれだけ「重たいか」を示しており、これをランク付けすることでどのアプリが多くのメモリを消費し、バックグラウンドで多くの処理時間を使っているかを実際に見ることができる。我々はこの機能が、グーグルの自社アプリの開発においても大変有用であることに気づいた。おかげで自社アプリの一部はメモリー効率があまり良くないということも発見できた。中には24時間連続でサービスを実行しているものさえあったのだ。ProcStatsはこういった分析をしてそれを改善するには最適のツールだ。

4つのうちの最初の2つの目標は、Googleチームが構築した特別なNexus4にAndroid機能を詰め込む形で実現された。アプリのメモリー領域を減らすという目標に対しては、Androidチームが一部のグーグルアプリ(Google Playストアやロケーションのサービスなど)を、Android OSから引き離しアプリとして独立させた点も貢献している。

続く2つの目標は、各アプリの動作状況とシステム側でのアプリの扱いを厳密にモニターすることで実現された。例えば特定のアプリが多くメモリーを消費し長時間実行されているようであればAndroidはそのアプリを終了する、といった具合だ。

結果として、NexusデバイスでAndroid KitKatにバージョンアップしたユーザーは、前Jelly Beanとの差をほとんど体感できず、最新版ではただ新しいメモリー関連のプロファイルと機能性を見つけるだけだろう。グーグルのAndroidチームはAndroidのエクスペリエンスや機能性を代償にすることなく見事に軽量化に成功したのだ。

つまりKitKatはAndroid開発者達によるこれまでにない快挙といえるのである。

Dan Rowinski
[原文]