毎年5月頃になると、Googleからアンドロイドの新しいバージョンの発表があり、新しいコードネームが発表されます。また、アンドロイドのアップデートには、「ビルド番号」と呼ばれる記号が表示され、同じバージョンであっても、新しいものと前のバージョンなどを区別することができます。これらについては、前にも書いたのですが、いろいろと変化もあり、再度きちんと解説しておくことにします。

アンドロイドの開発は、およそ1年の期間をかけて大きな改良が行われます。こうした改良(メジャーアップデート)には、「お菓子」にちなんだコードネームがあり、Android 5.0からは、バージョン番号が5.0、6.0、7.0と1つづ上がっていくようになりました。

しかし、アンドロイド自体は、できたらそれで終わりではありません。ユーザーが利用できるようにリリースを行ったあと、さまざまな不具合の報告などが行われ、日々、これらが修正されていきます。また、場合によっては、リリースに間に合わなかった機能を、あとから追加することもあります。こうした修正のうち、比較的大きなものがあれば、バージョン番号が変更されます。たとえば、最新のAndroid 7.0では、7.0.0、7.1.0、7.1.1というバージョン番号があります。さらに、細かな修正がいくつかまとまれば、同じバージョン番号でも改訂版が出ることがあります。

こうした改訂のあと、ソースコードからハードウェアにインストールできようなバイナリ形式が作られます。これを「ビルド」といいます。ビルドされたものは、それぞれを区別するために「ビルド番号」が付けられます。また、ビルドの元になったソースコードも、保存されます。というのはあとでバグを修正する場合にソースコードが必要になるからです。実際には、開発はまだ継続して、さらにバグやセキュリティ対策の修正が行われることがあります。しかし、あるビルドを作ったソースコードは、それを修正するためにはきちんと保存しておく必要があります。これを図にしてみると、枝わかれするように見えることから、「ブランチ」といい、それぞれのブランチを区別する名前を「ブランチタグ」や「ブランチ番号」などといいます(図01)。アンドロイドでは、バージョン番号とリリース番号を組みあわせたものが使われます。

図01: ブランチとは、ソースコードを2系統に分けてそれぞれで作業を進めることをいう。別のブランチに対して行われた修正を、他のブランチに適用することを「マージ」という。特に新しいバージョンから古いバージョンへのマージを「バックポート」ということがある

こうしたソースコードは、「ソースコード管理ソフトウェア」で管理され、ブランチは、その機能に対応する用語です。もう1つ、ソースコード管理ソフトウェアでは、開発がある段階に達したときや特定の条件を満たした場合に「マイルストーン」というブランチを作ることがあります。ソフトウェアの完成までをいくつかの段階にわけ、それぞれの境目に「マイルストーン」が置かれます。マイルストーンは、開発における「目標」であり、なんらかの達成条件が課せられます。また、一定の水準を満たし、出荷などを行うことを「リリース」といいます。

アンドロイドの場合、ビルドは、特定の機種だけに行われる場合もあれば、複数の機種に対して同時に行う場合もあります。各ビルドには、それぞれを区別する「ビルド番号」が付けられます。このビルド番号は、同じアンドロイドのバージョンでも、なんらかの違いがあることを示します。

ビルド番号は、5文字または6文字のアルファベットと数字の組合せからできています(図02)。先頭の1文字は、アルファベットで、これは、アンドロイドの「マシュマロ」や「ロリポップ」といったコードネームの元になったアルファベットです。最新のAndroid 7.xこと「Nougat」では「N」です(表01)。

図02: ビルド番号は、5または6つの文字から構成されている。このうち、同日のビルドを区別する最後の文字は使われない場合もあるが、Lollipopなど最近のバージョンでは必ず付けられている

表01
文字 コードネーム バージョン
A (Alpha) -
B (Beta/Base) 1.0~
C CupCake 1.5~
D Donut 1.6~
E Eclair 2.0~2.1
F Froyo(Frozon Yogurt) 2.2~
G GingerBread 2.3~2.3.7
H Honycomb 3.0~3.2
I Ice Cream Sandwich 4.0~4.0.4
J Jelly Bean 4.1~4.3
K Kit Kat 4.4~4.4.4
L Lollipop 5.0~5.1
M Mashmallow 6
N Nougat 7.0~
O
P
Q
R
S
T
U
V
W
X
Y
Z

次にはアルファベットか数字が来ます。これはバージョンを区別するためにつけるのですが、これに関してはほとんどルールが公開されていません。確実なのは、製品に搭載される最初のビルドには「R」(Releaseの略と思われる)が使われることだけです。また、過去には、アルファベットだけでしたが、Android 7.xからは、数字も使われるようになりました。

次の3文字は、アルファベットと数字2桁の組合せで、ビルドが行われた日付を表現しています(表02)。アルファベットは、1年を4つにわけた「四半期」(Quarter。クオーター)を表し、数字はそのクオーター先頭からの日数です。なお、この仕組みは2009年1月1日のAから始まっていて、2015年4月1日でZまで来てしまったので、Android 6.0(Marshmallow)以降は、2015年7月1日をAとして繰り返しているようです。

表02
対応四半期
文字 Lollipop以前 Marshmallow以降
A 2009年01月1日 2015年07月1日
B 2009年04月1日 2015年10月1日
C 2009年07月1日 2016年01月1日
D 2009年10月1日 2016年04月1日
E 2010年01月1日 2016年07月1日
F 2010年04月1日 2016年10月1日
G 2010年07月1日 2017年01月1日
H 2010年10月1日 2017年04月1日
I 2011年01月1日 2017年07月1日
J 2011年04月1日 2017年10月1日
K 2011年07月1日 2018年01月1日
L 2011年10月1日 2018年04月1日
M 2012年01月1日 2018年07月1日
N 2012年04月1日 2018年10月1日
O 2012年07月1日 2019年01月1日
P 2012年10月1日 2019年04月1日
Q 2013年01月1日 2019年07月1日
R 2013年04月1日 2019年10月1日
S 2013年07月1日 2020年01月1日
T 2013年10月1日 2020年04月1日
U 2014年01月1日 2020年07月1日
V 2014年04月1日 2020年10月1日
W 2014年07月1日 2021年01月1日
X 2014年10月1日 2021年04月1日
Y 2015年01月1日 2021年07月1日
Z 2015年04月1日 2021年10月1日

最後にさらにアルファベット1文字が付けられる場合があります。これは、同日に行われたビルドを区別するためのものと言われています。おそらく、作業チームが複数あり、同時並行的にNexusシリーズなどのハードウェアを分担して担当していて、同じ日に作られた別のビルドを区別しているのだと考えられます。最初に掲げた図01は単純なものでしたが、実際には、ブランチの後にさらにブランチするような複雑な構造になっているのかもしれません。

また、Lollipopからは、「セキュリティアップデート」が始まっていて、Androidの機能追加などは別に必要に応じて月に一回程度、Nexusシリーズのアップデートが行われています。セキュリティアップデートでは、機能の追加がないため、過去のビルドを修正したものを配布しているように見えます。ビルド番号の最後の文字は、これらを区別するためにも使われているようです。セキュリティアップデートに関するドキュメントでは、Lollipopのときには、ビルド番号でセキュリティアップデートが行われたかどうかを区別していました。

Marshmallowからは、セキュリティアップデート自体を示す情報ができたため、これをビルド番号とは別に表示できるようになったようです。セキュティアップデートの状態に関しては、アンドロイドの「設定 ⇒ 端末情報」の「Androidセキュリティパッチレベル」で確認できます。なお、セキュリティアップデートは、そのリリース日でそれぞれを区別しているようです。

最後に、関連する公式の情報ページを示しておきます。これまでNexusやPixel用にリリースされた主なビルド番号は、

Codenames, Tags, and Build Numbers
https://source.android.com/source/build-numbers.html

にリストがあります。また、セキュリティアップデートについては、以下に情報があります。

Android Security Bulletins
https://source.android.com/security/bulletin/index.html