Android
読み:アンドロイド
外語:Android

 Googleが開発した、スマートフォン向けオペレーティングシステムおよびタブレットコンピューター向けオペレーティングシステム。
目次

概要
 Androidは、オペレーティングシステム(OS)としてLinuxカーネルを用い、この上にミドルウェア、主要アプリケーションを組み合わせて構成されている、スマートフォンタブレットコンピューター用のプラットフォームである。
 オペレーティングシステムとプラットフォームを分けて考える場合は、Androidはプラットフォームということになるが、一般的には周辺環境すべて含めてオペレーティングシステムと呼ばれることが多い。

情報

特徴

由来
 AppleiOSの対抗として発表された。
 元々は2003(平成15)年10月に発足した携帯電話向けソフトウェア開発会社であるアメリカの新興企業Android社が開発していたと見られるが、2005(平成17)年8月、創設間もないこの会社をGoogleが密かに買収した。買収金額は不明。
 このため様々な憶測が流れたが、2007(平成19)年11月、GoogleからOpen Handset Alliance(OHA)の設立、OHAからアンドロイド・プラットフォームがそれぞれ発表された。
 Androidとは具体的には、Linuxカーネル上で動作するアプリケーションフレームワークである。ただ、カーネル自体はLinuxだが、その上で動作するミドルウェア層との結合は弱く、比較的変更自由度が高い。例えばXperiaのカスタムROMでは、Linuxカーネルは純正カーネルではなくソニーエリクソン製のものが流用され、その上でAndroid 2.xが動作している。
 また、アプリケーションは全て「Java言語」で開発される。但しAndroidランタイムはDalvikという独自の仮想マシンを使用しており、一般的なJava環境とは異なる。Java言語は使用するが、通常のJVM環境ではない。

カーネル
 現時点でのAndroidのカーネルは、手軽に使用できたLinuxカーネルが採用されている。
 結果、AndroidはLinuxカーネルの上にミドルウェアが搭載された環境となっている。機器を制御するのにデバイスドライバーが必要になるが、このような環境であるため、どのレイヤーで開発するかで、次の二種類が存在する。
 しかしながら、Dalvikの仮想マシンが走ればカーネルは何でもよい(CPUすら何でも良い)という状況をGoogleは目指しており、これがある程度成功しているように見受けられる。
 機構上、理論上はカーネル差し替えが可能だが、しかし現時点でLinuxカーネル以外の選択肢はない。LinuxカーネルはGPLv2で、GPLv3ほどではないにせよGPLという問題点と欠点を抱えている。対して、例えばBSDライセンスFreeBSDのカーネルに差し替えることも不可能ではなく、成功すればより自由度が増す。
 そこで例えば、AndroidをBSDカーネル上で動作させようという移植プロジェクトは複数存在する/した。以下のようなものが知られるが、まだ成果が上がっていない。
 CPUがARMであるのでNetBSDなどの方が適しているように思われるが、実際にはユーザーが多いFreeBSD(のうちのFreeBSD/ARM)に移植しようとする人が多いようである。

CPU
 Androidは、アプリケーションはほぼ全て仮想計算機(仮想マシン)で動作する。このため、CPUは何でも良い。
 しかし現在、性能やコストなどから、ほぼ全てのAndroid端末はCPUにARMアーキテクチャを用いている。他の主力の選択肢としてMIPSx86などがあるが、主力にはなっていない。Googleは現在、MIPS対応にも力を入れている。
 モバイル分野でARMに完敗したIntelは現在、起死回生のためにx86で動作するAndroidと、組み込み向けのx86であるAtomに力を入れている。一方でAMDはx86を捨て、組み込み向けのAMD Fusion APUでARMコアを採用した製品を投入し始めた。
 またかつて国内ではSuperH対応という動きもあったようである。

仕様

iOSとの差異
 Androidは、誰がみてもiOSのパクリである。
 しかしながら、多くの企業が様々なアイディアを持ち寄って作っていることもあり、様々な人々の感覚(センス)が次々と導入された結果、Android独特の機能というものも数多く産み出されることとなった。
 結果として、Androidの機能をiOSがパクる、という状況にもなっている。

ボタン

ボタンの種類
 Androidスマートフォンでは、かつては操作用の物理的なボタンが3つ搭載されていた。Android 2.3までは「戻る」「ホーム」「メニュー」があり、Android 4.0以降は「メニュー」ボタンが廃止され、他の目的で使用されてるようになった。また一部の機種では物理的なボタンではなくセンサーを用いていることもあった。
 現在では、殆どの機種でOSの機能である画面最下段に基本3ボタンまたは一つ多い4ボタンを表示する「仮想ボタン」機能を用いており、ボタンといえども画面タップと何も変わらなくなっているが、いずれにせよこの3つの基本的なキーを「Androidキー」という。
 この他に機種により、音量増減のボタンや、電源のボタン、PTT用のボタンなどが付いている。つまり、合わせて6個程度が標準的であると言える。
 最大の問題は、このたった最小3個しか無いボタンも機種ごとに配置がバラバラだったことだが、仮想ボタン普及後はこれも統一されることとなった。

ホームボタン
 中央の画面に戻るか、または「ホーム画面切替」ツールの選択画面が表示されるキーである。
 Android 2.3では、ホーム画面中にホームボタンを長押しすると「最近使用したアプリケーション」と「タスクマネージャ」を起動するボタンが表示され、タスクマネージャで、不要な実行中アプリケーションを終了させることもできる。

電源ボタン
 電源ボタンを短く押すと、画面が消える。もう一回押すと画面が表示されるが、通常はロック画面となる。使用を終えたら電源ボタンで画面を消してからしまうと、省エネになるほか、誤作動も避けられ、またセキュリティ上もよい。
 ホームで電源ボタンを長押しすると、携帯電話オプションが表示される。内容は機種ごとに異なるが、マナー(サイレント)、公共モード、機内モードの各ON/OFFのほかに、電源を切ることも出来る。

パターンロック
 ロックされた画面から、ホーム画面に戻るためのセキュリティの一つが「パターンロック」である。
 3×3で計9個の点があり、これを4個以上9個以下で、好きな順序で点をなぞり記憶させておき、記憶させた順序でなぞれば利用者であるとして認証される技術である。
 単純に見えて、意外と強固なセキュリティらしい。ただ、画面は時々拭いて掃除しないと、なぞった跡を解析されてしまう可能性がある。

壁紙
 ケータイの場合「待ち受け画像」などと呼ばれていたが、Androidの場合はWindowsなどのパソコンと同様、壁紙という。
 この壁紙はホーム(詳細後述)と呼ばれるアプリケーションで使用され、左右2画面ずつ、計5画面程度にスクロールして表示される。

ホーム
 iPhoneなどの場合、ホームボタンを押せばアプリケーション一覧が表示され、右に左にと画面を切り替えながら目的にアプリケーションを「探す」。iPhoneは、何にしても「探す」作業が多い。
 Androidの場合、同様にアプリケーション一覧は存在するが、通常表示される画面は「ホーム」と呼ばれるアプリケーションである。左右含めて5画面程度に、色々なアプリケーションのショートカットやウィジェットを貼り付けたり、壁紙を付けたりといった作業ができるが、これは実はアプリケーションとして動作しているのである。
 従って標準の「ホーム」以外に様々なものを作ったり使ったりすることができ、Google Playにも様々なものが公開されている。
 一つしか「ホーム」を使っていないなら、ホームボタンを押せば真ん中の画面に戻るが、複数のホームアプリが導入されている場合、ホームボタンに「ホーム画面切替」ツールが割り当てられ、どのホームにするかを選択できる。複数のうち通常はどれか一つしか使わない場合、この「ホーム画面切替」ツールを停止することも可能。

通知バー
 Androidの画面上部にある、端末の状態や通知情報が表示される場所を、通知バーやステータスバーなどと呼ぶ。
 ここには、通信状態(3GやWi-Fi)、電池残量、現在時刻、などの情報が表示されるが、その他に様々な通知がここに表示される。メールが届いたりした場合、メーラーはここにアイコンを表示する。
 この領域の下中央に▼のアイコンがある。これを下にフリックすると、通知領域が現われる。メニューボタン→通知、でも同様の画面になる。この画面も機種ごと様々だが、例えばWi-Fi/Bluetooth/GPS、サイレントモードのON/OFFがワンタッチで可能な機種もある。

開発

ソフトウェア
 Androidのソフトウェア開発は、フリーソフトだけで、ただで出来る。
 USBケーブルでPCと繋ぐので、次のようなソフトウェアが必要。基本的には全てフリーで入手できる。
 インストール後、Android SDKのadbのあるフォルダーにパスを通しておくと、adb shellでAndroidにログインできるので便利である。
 機種によっては、USBデバイスドライバーのインストールが難しいものがある。

シェルログイン
 adb shellでログインすると、署名されてないapkファイルを自由に実行できる。また、rootになれればシステム内部に触れることもできる。
 但し通常は一般ユーザー権限であり、システム内部は変更できない。unameすらパーミッションが無いため実行できず、ましてや、システムに関するファイルを書き換えたり消したりなどは不可能で、特にカメラのシャッター音のファイルなどは簡単には削除できない。が、root権限を得て、それなりのUNIX知識を持っていれば、それも不可能では無い。

スクリーンショットの撮影

Androidから
 Android 4.0以降は、標準でスクリーンショット撮影機能が搭載されたため、それ以前は必要だった撮影ソフトが不要である。
 方法は、音量を下げるボタンと電源ボタンを同時に長押しすることで動作する。撮影した画像は、標準でインストールされている「ギャラリー」ですぐに閲覧できるため、共有も簡単に行なえる。

PCから
 パーソナルコンピューター等からの操作でスクリーンショットを撮影する方法としては、Android SDKを用いる方法がある。他のツール無しで、Android端末すべての画面を、そのまま画像化できる。
 Android SDKインストール後、32ビットのWindows XPなら「C:\Program Files\Android\android-sdk\tools」、他のWindowsでも似たような所を開くと、中に「ddms.bat」というファイルがあるので、これを実行する。
 端末一覧が左にあるのでこれを選択し、しばし待つ。次に、メニューの「Device」→「Screen Capture」を選択すると、端末のスクリーンショットが表示される。ここで「Save」をクリックすれば、PNGでファイルが書き出される。

root
 Androidのroot権限を取る方法は存在するが、どの方法にしても、安全ではない。失敗すれば、二度と起動しなくなる「文鎮化」もありうる。全て自己責任で出来る技術者のみが、root権限を得ることを許されるのである。
 壊した場合でも責任は自分にあると断言出来る者は、DooMLoRD_v4_ROOT-zergRush-busybox-su.zipなどのRooting Toolkitを利用できる。
 但し、このインストールも、機種ごとに様々な手順が必要である。インストール前に一時的にrootを得る必要があり、その手法は機種ごとに様々である。

技術

階層構造
 Androidとはプラットフォーム全体を指す名であり、下はOSから上はアプリケーションまで、様々なものを含む。
 Androidの階層構造(上位→下位)は次の通り。
 JNI層以下はネイティブコード(非仮想コード)で記載されており、Linuxと同様の構成である。マルチプロセッサー構成では、REX-OSなど他のプロセッサー用コードが含まれる。

ライブラリ
 Androidで動作しているライブラリとしては、次のようなものがある。

単位
 Androidデバイスは様々なメーカーから、多種多様な画面サイズ、画面密度の機種が販売されている。
 これらに対応するために、物理的な単位のほか、抽象的な単位も用意されている。

対応メディアフォーマット
 Androidは、機種ごとにエンコーダーとデコーダーに差があり、「作成可能なデータ形式」や「再生可能なデータ形式」に意外と差がある。
 何に対応できるかは、そのAndroid端末のメーカーの気分次第とも言える。
 Androidで広く再生可能なメディア形式(デコーダーがあるメディア形式)は、以下のとおりであり、以下を選択すれば未知の機種であっても利用できる可能性が高い。
 大雑把な結論としては、音楽はOgg Vorbis、静止画はJPEGPNG、動画はMP4WebMが無難ということになる。

ヘッドホン類
 イヤホン・ヘッドホン・ヘッドセットなど呼称は様々あるが、接続方法も様々である。
 microUSBからの出力は、専用に対応した端末でないとイヤホンと同等には扱われない。
 欧州向け低コスト機では、ステレオミニ(3.5mm)もmicroUSBも対応せず、Nordic独自方式を採用する機種もある。

バージョンアップ
 Androidは不定期にバージョンアップされるため、既に発売されたスマートフォンなどでも新しいAndroidへの更新需要が生じる。しかし、これは難しいことが多い。
 Androidというシステムは、上位のAndroid層から下位のLinuxカーネルまで広範囲に及ぶが、AndroidはWindowsなどとは違ってデバイスドライバーを追加するような対応ではなく、各機種専用にプログラムを直接書き換えて機種専用のシステムを作り上げる。
 ゆえに、Androidが更新されたとなると、その間に書き換えたものを新しいAndroidに対して適用する必要があり、非常に手間隙が掛かってしまう。
 Androidの開発では一般的にGitが使われているので、その間にコミットしたものを新しいAndroidのクリーンな環境に対してgit cherry-pickするのがバージョンアップの主たる作業になるが、仕様が変わっていたりコンフリクトが発生したりするため、単純作業では終わらない。
 このため、古い機種や、不人気機種では、新しいAndroidに更新されないということがしばしば発生することになる。

リリース

APIレベル
 Androidは、アプリケーションにAndroid APIを提供する。
 バージョンの細かい違いではAPIに変化がないこともある。そこで、実際のAPIの違いごとに、APIレベルと呼ばれる番号が振られている。

コードネーム
 Googleは、各コードネームに対応する像を、毎度毎度、Googleの本社前に建立している。
 なお、1.0がAstro(鉄腕アトム)、1.1がBender(フューチュラマのベンダー)などという根拠不明な噂が流布されているが、公式にこのような発表がされたことはない。仮説では、当初はAndroidという名前にふさわしくアンドロイドやロボットの名前を付ける予定だったが、商標などの問題を回避するため、あきらめてC以降はお菓子の名前にしてAとBは封印されたのだとされている。
 また、AはApple Pie、BはBanana BreadやButter Cookieなどの名前が噂されるようにもなっているが、これらも公式に発表されたことはない。
 最も有力な説では、そもそも1.0と1.1には名前がなく、1.0はAplha、1.1はBetaであり、正式版の1.5からCから始まるお菓子の名前を付け始めた、とされている。
 現在は洋菓子から取られている。途中で和菓子などが使われることがあるのか、あるいはZまで一巡したあとに使われ始めるのか、などは一切不明である。

バージョン
 開発コードネームを併記。頭文字がA〜Zの順で選ばれている。基本的にお菓子の名前だが、Honeycomb(蜂の巣)のように、とてもお菓子とは思えないものも。
 AとBに対応するAndroid 1.0と1.1のコードネームは発表されておらず不明。

Android 2.2(Frozen Yogurt)

Android 2.3 (Gingerbread)
 2010(平成22)年12月6日発表。
 初の対応機種は、Sumsung製造、Google自社ブランドで販売されるNexus Sである。

Android 3.x (Honeycomb)
 タブレット向けのUIを特徴とするバージョン。Fragmentと呼ばれるユーザーインターフェイスのコンポーネントが登場したのは、このバージョンからである。
 初の対応機種は「Motorola XOOM」、日本国内初のAndroid 3.0搭載機はNTTドコモから販売された「Optimus Pad L-06C」である。

Android 4.0 (Ice Cream Sandwich)
 スマートフォン向けUIとタブレット向けUIが統合されたバージョン。
 最初に発売された搭載機は、香港Ainol Electronicsの「NOVO7」という7型タブレットで、支那で2011(平成23)年12月5日に発売された。価格は99US$という意欲的な製品となっていた。

Android 4.1 (Jelly Bean)
 Android 4.0のUIで生じた問題点の改善を特徴とするバージョン。
 最初の端末は、ASUSのタブレット端末「Nexus 7 [2012]」と、Googleが開発した球形のメディアプレーヤー「Nexus Q」である。

Android 4.2 (Jelly Bean)
 様々な機能の改良を特徴とするバージョン。
 最初の端末は、サムスン製のハイエンドタブレット「Nexus 10」と、LG製スマートフォン「Nexus 4」である。

Android 4.3 (Jelly Bean)
 OpenGL ES 3.0やBluetooth Low Energyへの対応を特徴とするバージョン。

Android 4.4 (KitKat)
 多くの新機能追加と改良がなされたバージョン。システム全般のメモリー使用量削減も実施されている。
 また、インスタントメッセンジャー(IM)として「ハングアウト」を搭載した。

Android 5.0 (Lollipop)

Android 5.1 (Lollipop)

Android 6.0 (Marshmallow)

Android 7.0 (Nougat)

Android 7.1 (Nougat)

Android 8.0 (Oreo)

Android 8.1 (Oreo)

補足

Java
 Androidアプリのプログラムを書くための公式なプログラミング言語はJavaである。
 Javaにも様々なバージョンがあるが、どのバージョンまで使えるかはAndroid用のJava仮想マシンであるDalvikまたはARTの実装による。つまりAndroidのバージョンによる、とも言える。
 Android 4.0以降で考えると、概ね次までが利用できると言える。
 コンパイラー等により、Java 8の機能のうち、ラムダ式、メソッド参照、タイプ アノテーションについてはAPIレベル23以前でも利用できる(例えばAndroid Studio 2.4以降)。ただしこれは、desugarと呼ばれるツールによりJava 8の言語機能をJava 6水準のバイトコードに変換するため、古いOSでも動作を可能としているものである。
 この場合でもJava8言語APIつまり標準ライブラリー(stream、optional等)までは利用できないので、ここまでを求めるのであればAPIレベル24以降対応とせざるをえない。但しかなりユーザーを選ぶことになり、2018(平成30)年現在では、普及率を考えるとあまり現実的な選択とは言えない。
 なお、APIレベル24時点では、Java 8の全言語機能にはまだ対応できていない。今後Java 8の言語機能への対応が強化されることがあり、それを使いたいとなれば、その時はそのAPIレベル以上向けのアプリとせざるを得なくなるだろう。

派生品
 順不同。

再検索