Android 4.3については、以前、この連載でお伝えしましたが、その後、さらにアップデートが行われました。ですが、アンドロイドのバージョンは4.3のままです。こうしたアップデートは、主に重大な不具合やセキュリティ対策などで行われるもので機能追加を行うためのものではありません。このためにバージョンが変わらないわけです。
一般に、ソフトウェア開発では、ソフトウェアにバージョンを付けて管理します。しかし、大規模なソフトウェアでは、数多くのモジュールや付属アプリケーションなどがあり、そのそれぞれにバージョンが付けられます。
大規模なソフトウェアでは、こうして作られたバイナリコードファイルを集めて、1つの「パッケージ」にします。一般にアプリケーションなどの場合は、これを「パッケージ」(またはパッケージファイル)などといいますが、オペレーティングシステムでは、これを「イメージファイル」ということがあります。というのはパッケージは、一般にパッケージ管理システムというオペレーティングシステムの一部になっているソフトウェアが管理するのに対して、オペレーティングシステム自体のインストールなどは、ハードディスクやフラッシュメモリに対して、ファイルではなく、ファイルシステム全体を含む、記憶媒体のセクタなどに直接バイナリのデータとして書き込むことがあります。これを「イメージ」と呼び、イメージとなるバイナリデータを、配布などのためにファイル形式にしたものを「イメージファイル」といいます。これは、見かけ上はファイルなのですが、ハードディスクやフラッシュメモリに直接書き込むデータが保存されています。
こうした大規模なソフトウェアの開発で、最終的な成果物となる「イメージファイル」を作成することを「ビルド」といいます。ビルドは、作られた最終イメージを区別するためのものです。
そこで、内部的な区別として「リビジョン番号」や「リリース番号」という属性をさらにつけ、同一バージョンだけどリリース番号が違うという管理の仕方を行います。これは、開発者側の都合でどうするかを決めます。これに対して、ビルドが対応しますが、ビルド自体は作業と成果を対にして区別するためのものです。
端末、タブレット情報の表示
さて、アンドロイドでは、「設定」⇒「端末情報」、「タブレット情報」を見ると、アンドロイドのバージョンがあり、さらにビルド番号というものがあります。アンドロイドのバージョンは、簡単にいえば、そのスマートフォンやタブレットで「できること」を表しています。つまり、Android 4.3とAndroid 4.0では、できることが違うのです。これに対して、ビルド番号は、おなじAndroid 4.3のうち、どのインストールイメージが入っているのかを表します。なので、おなじ4.3でも、システムアップデートをしたかどうかで違うビルド番号になっていることがあります。
なぜ、バージョン番号とリビジョン番号を組み合わせているのかというと、バージョン番号とリビジョン番号では番号を振るルールが違うからです。
簡単にいうとバージョン番号は機能を表しているのに対して、リビジョンは、おなじ機能を持つアンドロイドのバージョンの中での違いを区別するためのものだからです。違いは、不具合の修正かもしれませんし、セキュリティ問題への対策かもしれません。
たとえば、おなじAndroid 4.3でも、Nexus 7(2012)とNexus 7(2013)のものは違います。しかし、アンドロイドのソースコードという点ではおなじで、そこから各機種用のビルドが作られていくからです。ですから、リビジョンが違っても、内部的な修正場所はおなじでアンドロイドとしては同等(だからおなじバージョンのままになる)ことがあるからです。
Android 4.3はいくつもある
さて、Nexus 7のAndroid 4.3ですが、実は、これまでにいくつものビルドが配布されました。しかし、バージョンはすべて4.3です。一応内部的には、それぞれをバージョン番号とリビジョン番号を組み合わせて管理していますが、これは、直接見ることはできません。しかし、Nexusシリーズであれば、ビルド番号で、「バージョン番号とリビジョン番号の組み合わせ」を特定することは可能です。
なお、ビルド番号は、メーカーによっても違います。各メーカーでは、自社のハードウェアに合わせたアンドロイドを作って、そのイメージを作成します。このビルド作業は各メーカーで個別に行われるため、ビルド番号はメーカーや機種で固有のものとなります。
表01は、最近のNexusシリーズのビルドとバージョン、リビジョンと配布対象になったハードウェアを表したものです。新しい機種が登場すれば、新しいリビジョンが作られます。そしてこれを元に新たにビルドが行われるわけです。また、アンドロイド自体も改良されてバージョンアップが行われ、これに対するビルドが作られます。
現在までにNexus 7用のandroid 4.3は2012年版向けだけで4種類のビルド番号があります。ただし、ユーザーがシステムアップデートの通知を受け取るタイミングで、すべてのビルド番号を見るとは限りません。あるビルドは、該当のユーザーに配布が行われる前に、次のビルドで置き換えられることがあるからです。
解っているNexus 7(2012)のビルド番号は、「JWR66Y」、「JWR66V」、「JWR66N」、「JWR66L」の4つあります。最新のものは「JWR66Y」です(表02)。
最初にレポートしたときのandroid 4.3は、JWR66Vでした。その後、Nexus 7(2012)はリビジョンが変わったJWR66Yへとシステムアップデートが行われたのです。
これに対して、新しいNeuxs7(2013)は、購入時はJWR66Nでしたが、その次のビルド番号はJSS15Jで、これは購入直後にすぐシステムアップデートが行われています。さらに、現在は、JSS15Qになっています。ビルド番号の先頭の3文字が変わったのは、最初のバージョンは、新旧2つのNexus 7用として作られたandroid 4.3からNexus 7(2013)用のイメージファイルをビルドしたものであったのに対して、その後、2012年版と2013年版のビルドを別作業して区別するようにしたからだと思われます。
Nexusシリーズのハードウェアとイメージ
Googleが提供しているNeuxs系のデバイスでは、イメージファイルが提供されており、必要に応じて、ユーザーがイメージを書き換えることができるようになっています。これは、おもに開発者向けの機能で、いち早く最新のバージョンや過去のバージョンでのテストを行うようなことを想定してのことです。
まず、すべてのNeuxsデバイスには、名称とは別にデバイスにコードネーム(あるいはボードコードネーム)が付けられています。たとえば、2012年版のNexus 7 Wi-Fiモデルは「grouper」といいます。Wi-Fiモデルには容量違いの製品があります。こうした区別を一般にSKU(Stock keeping Unit)といいます。アンドロイドの開発では、容量の違い/SKUの違いはWi-Fiモデルでは区別されません。しかし、3Gモデルは区別されていてこちらにはtilapiaというコードネームがあります。
さらに、Nexus 7に組み込まれているイメージファイルにもコードネームがあります。これは、同一のハードウェアに複数のイメージが提供されることがあるからです。たとえば、Galaxy Nexusは、ハードウェアとしてはUMTS(W-CDMA)対応とCDMA2000対応2機種の3種類あり、これらはデバイスのコードネームで区別されていて、3種類のハードウェアがあります(表03)。GSM/HSPA+対応のものが「maguro」、ベライゾン(米国の通信事業者)版CDMA2000対応が「toro」、スプリント(同じく米国の通信事業者)版CDMA2000対応が「toroplus」です。さらにmaguroには、OSイメージが2種類用意されました。これは、米国内で販売されたものと、米国外で販売されたもので、Google Walletの有無という違いがあったからです。この2つを区別するためmaguro用のOSイメージには「takju」と「yakju」の2種類があります。さらにこのtakju、yakjuには、それぞれ複数のアンドロイドのバージョンがあります。
また、前述のように同一のアンドロイドバージョンに対して複数のリビジョンがあって、それぞれがビルド番号を持っています。
ハードウェアは、製造時点でなんらかのオペレーティングシステムを搭載しなければならず、Nexus 7のように大量に販売が想定される製品は、販売を開始するまえに大量の製品を製造する時間が必要になります。このため、製造に必要な時間を見越して、その時点までに開発されていたイメージを製造用のマスター(俗にゴールデンマスターなどと呼ばれます。WindowsでいうRTMです)として製造を開始させます。Microsoftなどを見ていてもRTMから製品出荷開始までには1カ月以上の時間を取っています。これは、工場の製造ラインの体制を整え、販売開始時に十分な数をそろえるために必要な時間です。
しかし、製造を開始したあとでも、ソフトウェアのテストなどは継続するため、場合によっては改良が必要になります。改良が必要になった場合、新たなビルドを作り、出荷後の「システムアップデート」を行います。新しいNexus 7でいえば、「JWR66N」は、製造時の最新版、JSS15Jはマスターを作ったあとに発見、修正されて作られたビルドになります。
さらに、Nexus 7(2013)では、なんらかの問題に対策したため、新しいビルドJSS15Qが作られました。同じようにNexus 7(2012)も新しいビルドがあり、JWR66Vは、JWR66Yになりました。ほぼ同時期であったことから、android 4.3全般に関わる問題の対策であったと推測されます。