Androidの最新バージョンが搭載されるNexus系のデバイス(リードデバイスと呼ばれることもあります)用のAndroidには、細かいバージョンの違いとそれぞれに「ビルド番号」が付けられています。
同一のバージョン番号でも、セキュリティなどの重要な修正があれば、別のビルド番号でのアップデートが行われます。このようにビルド番号は、バージョンが同一でも、違うものになります。
バージョン番号は、おもにソフトウェアの機能や修正などをベースにした通し番号で、バージョンを見れば、機能について推測することが可能です。もちろん、開発者側からは、バージョン番号と搭載されている機能の対応は明確です。
一般にソフトウェアの開発では、ソースコードと呼ばれるプログラムを記述した「ファイル」を作り、これをコンパイルなどして実行可能な「バイナリイメージ」を作ります。これを「ビルド」といいます。ビルド番号とは、個々のビルド作業を区別する番号です。
大規模なソフトウェアでは、ソースコードは多数のファイルに別れています。それぞれに担当者がいて、バグを修正したり、機能の追加や改良などを行います。Androidの場合、すべてをGoogle内で作っているのではなく、いわゆる「オープンソース」プロジェクトと呼ばれる外部のコミュニティや企業、組織などが作ったソフトウェアを利用しています。これらは、それぞれのタイミングでソフトウェアのバージョンアップを行いリリースをおこなっています。
このため、Google内でなにも修正がおこなわれなくても、バグが修正されるなどで、コンポーネントが新しいものになることもあります。
このため、個々のソースコードが修正された日付と作成されたバイナリの間には、ソースコードの修正が時間的に前になるという原則があります。このため、ビルドの作業をきちんと区別して記録しておかないと、バイナリイメージがどの時点のソースコードを元に作られたのかがわからなくなってしまうのです。
Androidのビルド番号とは、「イメージ」データを作った時に付けられる通し番号で、同一日時であっても別のタイミングで作られたものであれば、違うビルド番号が付くようになっています。Nexus系デバイスの場合、ビルド番号は、アルファベット3文字+数字2桁+アルファベット1文字のパターンが使われます。これには、法則性があります。
まず、最初の文字は、メジャーバージョンのコードネームの1文字目です。たとえば最新のKit Katならば「K」が使われます。Androidのコードネームはアルファベット順にお菓子の名前になっているため、メジャーバージョン間で1文字目に重複することはありません(表01)。
| ■表01 | ||
| 文字 | コードネーム | バージョン |
|---|---|---|
| A | - | |
| B | (Base) | 1.0~ |
| C | CupCake | 1.5~ |
| D | Donut | 1.6~ |
| E | Eclair | 2.0~ |
| F | Froyo(Frozon Yogurt) | 2.2~ |
| G | GingerBread | 2.3~ |
| H | Honycomb | 3.0~ |
| I | Ice Cream Sandwich | 4.0~ |
| J | Jelly Bean | 4.1~ |
| K | Kit Kat | 4.4~ |
| L | ||
| M | ||
| N | ||
| O | ||
| P | ||
| Q | ||
| R | ||
| S | ||
| T | ||
| U | ||
| V | ||
| W | ||
| X | ||
| Y | ||
| Z | ||
2文字目は、「ブランチ」を表します。簡単にいうと、ブランチとは、マイナー、メジャーのアップデートに対応しています。本来は、ソフトウェア開発時のソースコードの扱いについての言葉ですが、開発者外の立場で見た場合には、バージョンアップのリリースに対応していると思っていいでしょう。このブランチは、メジャーバージョンアップの最初のリリースでは必ず「R」を使い、その後、ブランチが行われる(マイナーアップデート)たびに文字が割り当てられます。このときR以外のアルファベットがどう選ばれるのかは内部的なルールなのでわかりません。たとえば、android 4.1ことJelly Beansでは、Rの次にZ、O、D、W、S、Lという文字が使われました。ビルドには、Google外の特定の開発者などにのみ提供されるものもあるので、これ以外の文字が使われた可能性もあります。ただし、新規のハードウェアが追加されるタイミングではいつもブランチが作られるようです。
3文字目は、後の数字2桁と合わせて、ビルドが行われた「日付」を表します。3文字目は、1年を4つにわけた「四半期」(クオーター)に対応しており、Aは、2009年の第一クオーター(1月1日から3月31日)に対応します(表02)。さらにその次の2桁の数字は四半期内の位置(四半期の始まりからの日数)になっています。四半期は、3カ月なので、最大でも92日であり、2桁で指定が可能です。つまり、このアルファベット1文字と数字2桁で具体的な日付を表しているのです。現在は2013年の第4四半期で文字は「T」です。このままいくと2015年の第2四半期でZに到達してしまいますが、おそらくその前にルールが変わることになると思います(1文字目が違い、いまさらAndroid 3.x以下になることはありえないので、またAから繰り返しという可能性もあります)。また、この方式では、次の四半期の最初の日を前の四半期を使っても表現できてしまいます。
| ■表02 | |
| 文字 | 対応四半期 |
|---|---|
| A | 2009年01月1日 |
| B | 2009年04月1日 |
| C | 2009年07月1日 |
| D | 2009年10月1日 |
| E | 2010年01月1日 |
| F | 2010年04月1日 |
| G | 2010年07月1日 |
| H | 2010年10月1日 |
| I | 2011年01月1日 |
| J | 2011年04月1日 |
| K | 2011年07月1日 |
| L | 2011年10月1日 |
| M | 2012年01月1日 |
| N | 2012年04月1日 |
| O | 2012年07月1日 |
| P | 2012年10月1日 |
| Q | 2013年01月1日 |
| R | 2013年04月1日 |
| S | 2013年07月1日 |
| T | 2013年10月1日 |
| U | 2014年01月1日 |
| V | 2014年04月1日 |
| W | 2014年07月1日 |
| X | 2014年10月1日 |
| Y | 2015年01月1日 |
| Z | 2015年04月1日 |
最後の文字は、同じ日に行われた複数のビルドを区別するためのものです。なお、最初のビルドは、アルファベットを付けません。このため、いくつかのアップデートではビルド番号が数字のところで終わっています。
これまでに行われた主要なビルド番号とAndroidのバージョン、そして対象機種をまとめたのが(表03)です。
現在は、NexusシリーズのうちNexus 4/5/7/10とGalaxy Neuxsに対してアップデートが提供されており、最新は、KOT49Hと呼ばれるビルド番号をもち、バージョンはandroid 4.4.2になります。しかし、実際には直前に4.4.1であるKOT49Eがリリースされ、配布が始まりましたが、すぐに4.4.2に切り替わってしまいました。おそらく、4.4.1には、なんらかの重大な問題があり、緊急に4.4.2に置き換えたのだと思われます。それは、ビルド番号がどちらも「KOT49」となっていて同一日のビルドを示しているからです。つまり、最初KOT40Eとして作られたものには問題が発見され、その日のうちに修正が行われてビルドが再度作られたために、両者は日付部分までが同じなのです。また、KOT49EとKOT49Hの間にはFとGがあったはずですが、これは、なんらかの理由(たとえばテストをパスしなかったなど)でリリースされていません。
本稿は、2013年12月27日にAndorid情報のWeb専門誌「AndroWire」に掲載した記事を再構成したものです。