Share to: share facebook share twitter share wa share telegram print page

Android (オペレーティングシステム)

Android
Android 2023年版のロゴマークで、左側はアンドロイドの英文かつ黒文字、右端には黄緑色のマスコットキャラクターが描かれています。
Android 15 のスクリーンショット
Android 15 のスクリーンショット
開発者
プログラミング言語 C言語, Java, Kotlin
OSの系統 Unix系
開発状況 開発中
ソースモデル FOSS
RTM
製品出荷版 (GA)
最新安定版 Android 16 - 2025年6月10日 (3か月前) (2025-06-10)[1] [±]
最新開発版 なし [±]
リポジトリ ウィキデータを編集
対象市場
使用できる言語 日本語など100言語以上
アップデート方式 Over The Air(アップグレード後のダウングレードは一切出来ない仕様)
プラットフォーム ARM32ARM64MIPSx86x64
カーネル種別 モノリシックカーネル
ライセンス Apache 2.0、GPLv2、LGPLなど[2]
ウェブサイト www.android.com ウィキデータを編集
サポート状況
サポート中
テンプレートを表示

Android(アンドロイド)は、Googleが開発した汎用モバイルオペレーティングシステムである[3][4][注釈 1]Linuxカーネルオープンソースソフトウェアがベースで、主にスマートフォンタブレットなどのタッチスクリーンモバイルデバイス向けにデザインされている。PC用にはAndroid-x86、テレビ用にはAndroid TV、自動車用にはAndroid Auto、ウェアラブルデバイス用にはWear OS(旧:Android Wear)がある。世界で最もよく使われているオペレーティングシステムであり、2021年5月時点で30億台を超えるアクティブデバイスがある[7]iPhoneと区別する為に、Androidスマートフォンをさす呼称としても使われる[8]

概要

2003年アンディ・ルービン、リッチ・マイナー、ニック・シアーズ、クリス・ホワイトがアメリカカリフォルニア州パロアルトに携帯電話向けソフトウェアプラットフォームを開発するAndroid社を設立した。2005年にGoogleがAndroid社を買収[9]し、一時はGoogleが「gPhone」という独自の携帯電話端末の開発を進めているという憶測が流れた[10]。2007年11月5日、携帯電話用ソフトウェアのプラットフォームであるAndroidを、Google[11][12][13]、アメリカのクアルコム通信キャリアのT-モバイル(T-Mobile International)などが中心となり設立した規格団体「Open Handset Alliance」(オープン・ハンドセット・アライアンス、OHA)が発表した。

無償で誰にでも提供されるオープンソースオープンソースソフトウェア)であり[14]サードパーティーのベンダーが独自にカスタマイズしやすくすることを目的として、Apache License 2.0に基づいて配布されている。2008年10月からは対応する携帯電話が多数販売されている。

競合するモバイル向けプラットフォームは、AppleiOS/iPadOS/watchOS/tvOSがある。過去の競合にはマイクロソフトWindows Mobile/Windows Phone/Windows 10 MobileアクセンチュアSymbian OSクアルコムのBrew MP、ブラックベリーBlackBerryLinux FoundationTizenなどがあった。Googleはスマートフォンタブレット腕時計スマートウォッチ)以外にもゲーム機冷蔵庫といった領域にもAndroidを搭載させる考えである[15]

Android OSを搭載するスマートフォンとタブレットはベンダー各社から発売されており、それぞれベンダー固有のブランド名が付けられている。これらはAndroidスマートフォンやAndroidタブレットというような総称で呼ばれる[16][17][8][18][19]。主な競合はiOSあるいはiPadOSを搭載するiPhoneおよびiPadである。

特徴

この節では、Android Developersから発表されている標準のAndroid(AOSP)について記述する。サードパーティーが独自に追加(カスタマイズ)した機能は含まない。

ユーザーインターフェース

Androidのユーザーインターフェース

Androidのユーザーインターフェース(UI)はサードパーティーの端末メーカーによるカスタマイズが許可されており、通例メーカーごとに独自のUIが搭載されている。カスタマイズが施されていない標準のAndroidは通称AOSP版と言われ、Android Open Source Projectのソースコードから直接ビルドしたものを指す。また、メーカーやサードパーティーが開発したものはカスタムROMと言われている。

Androidの基本操作はタッチインターフェースとなっており、指を使って直感的な操作ができるようになっている。表示されたボタン類を押すタップ、長押しタップ(つまむ)、画面端からタップスライドしてメニュー類を表示するスワイプ、マルチタッチによるピンチや回転などができるようになっている[20]。画面をタップした際に、ボタンを押したという感覚を起こさせるために、本体をバイブで振動させる機能を持ち合わせる。ジャイロスコープGPS加速度センサーなどのハードウェアをサポートしており[21]、アプリケーション側からそれらにアクセスして活用する事もある。ジャイロスコープは端末を縦向きから横向きに変更する際に使われる事が多い。ゲームの例ではレースゲームで車をハンドル操作する際、端末を傾けてハンドル操作に当てはめるものがある[22]

ホームスクリーン上には、パソコンデスクトップ画面のようにアプリケーションのアイコンが並び、アプリをインストールするとホームスクリーン上に自動的に配置される。また長押しタップでアイコンを移動したり、フォルダを作成して格納する機能を持つ。これに加えてウィジェットを配置できるようになっている。ウィジェットは、天気予報ニュースなどのライブ情報などがあり、ホームスクリーンから直接見ることができる。ホームスクリーンは画面外にも複数用意されており、画面を左右にスワイプすることで複数のホームスクリーン間を移動できる[23]

画面上部にはステータスバーが配置されている[24]。ステータスバーは、通知やシステムの状態情報を表示するためのシステムUIである[25][26]。ステータスバーには通信状態やシステムサービス(Google Mobile Serviceなど)の稼働状況、バッテリー残量、時刻などが表示される。ステータスバーを下方にスワイプすることでクイック設定パネルが表示され、頻繁に使われる機能や各種システム設定(例えばWi-Fi/Bluetooth/機内モード/画面自動回転のON/OFFボタンなど)に素早くアクセスすることができる。クイック設定パネルの下部には通知ドロワーが表示され、通知の詳細を確認したり、各通知からのアプリ操作につなげたりすることができる[27]。通知はステータスバーにもアイコンとして表示され、例えば新着のメールSMSを受信したりデバイスを接続したりしたときに、ユーザーに作業を中断させることなく知らせることができる。

画面下部には「戻る」ボタン/「ホーム」ボタン/「マルチタスク」(アプリケーションリスト)ボタンによる各操作を実行できるナビゲーションバーが、Android 3.x、および4.0以降から配置されている[28]。これ以前のバージョンでは、ハードウェアキー(物理ボタン)方式が主流であった。Android 9 Pieでは「ホーム」ボタンと「マルチタスク」ボタンが削除され、スワイプジェスチャーに置き換えられた[29]。ただし、端末メーカーによっては従来のナビゲーションバーを採用しているものや、設定によって従来のナビゲーションバーを利用できるようになるものもある。Android 10では「戻る」ボタンも削除された[30]

文字の入力

Androidには文字入力のためのIMEを搭載しており、テキストボックスや検索ボックスなどの入力エリアをタップするなどしてフォーカスを当てると画面上に仮想キーボードが表示される。この仮想キーボードを、タップやスワイプ操作することによって文字を入力できるようになっている。IMEはサービスアプリケーションとして動作し、エンドユーザーが自由にサードパーティー製のIMEをインストールすることも可能になっている。IMEとハードウェアが対応していれば、BluetoothUSB接続の外付けキーボードを接続して入力することができる。また発声によって文字入力を行う音声入力システムも備える。Googleあるいはサードパーティー製の手書き入力アプリを利用して、指やスタイラスペンなどで書いた文字を認識させることもできる。

なお2018年現在、Android OSには標準で日本語入力用のIMEが搭載されていない。そのため、日本語入力を行うには、Google 日本語入力ATOKなどのサードパーティー製IMEをインストールする必要がある。日本国内で販売されている端末は、最初から日本語入力できるようにiWnnPOBox TouchS-ShoinATOKFSKARENなどが、メーカーによって搭載されている。一部のAndroidデバイスでは、Google純正の新たなIMEであるGboardが最初から搭載されており[31]、また2017年11月にはGboardが日本語に対応し、追加の言語およびキーボードレイアウトをダウンロードするだけで日本語入力ができるようになった。

アプリケーション

Googleの認可を受けた端末には、アプリケーションマーケットとしてGoogle Play(旧:Androidマーケット)がインストールされている[32]。多くの端末では、このGoogle Playからアプリコンテンツをダウンロードして使えるようになっている。2019年9月時点のGoogle Play内では、280万本を超えるアプリケーションが提供されている[33]

GoogleはGoogle Playを経由しないアプリ配布も認めており、APKファイルから直接インストールできるようになっており[34]、それらのアプリは野良アプリと呼ばれる。ただし一見普通のアプリに見える悪質なアプリ(マルウェア)も存在するため、公式マーケット以外からのダウンロードには細心の注意が必要である[35]

Androidで表示されるホーム画面を表示させるアプリケーションのことはホームアプリと呼ばれる。たくさんのアプリが公開されており、ユーザーは好きなものを選ぶことができる。別名、ランチャー(Launcher)とも呼ばれる。

構成

Androidは、カーネルからミドルウェア、ユーザーインターフェースウェブブラウザ、電話帳などの標準的なアプリケーション・ソフトウェア群までを1つのパッケージにして提供されている。

AndroidのカーネルにはLinuxが使われているが、その他の部分にはさまざまな技術が採用されている。たとえば、標準Cライブラリ(libc)にはGoogleがAndroid向けに開発したBionicが使われており、これはGNU C Library(glibc)とは異なり、メモリや処理能力が限られたデバイス向けに設計されている。BionicはFreeBSDNetBSDOpenBSDのコードと新たに書かれたコードを組み合わせて作られており、BSDライセンスのもとで提供されている。

Androidのアーキテクチャ[11]
機能
携帯電話網への対応 GSMUMTSCDMA2000EV-DOLTE3G4G5G
その他のネットワーク対応 Bluetooth無線LANNFC
各種ハードウェアへの対応 衛星測位システム加速度センサ磁気センサ、2D/3D描画支援ハードウェア(GPU)など
ウェブブラウザ Chromiumベースのブラウザが組み込まれている(4.3まではWebKitベース)。この機能は、他のアプリケーションからも利用可能である。
メール ショートメッセージサービス(SMS)及びマルチメディアメッセージングサービス(MMS)が利用可能である。
その他のアプリケーション Javaで作成されたアプリケーションを独自のDalvik仮想マシン/Android Runtime上で動かすことができる。Android 5.0以降では標準の仮想マシンがAndroid Runtime(ART)に変更された。Dalvik/ARTは通常のJava仮想マシンとは異なり、メモリの消費が低く抑えられているなど、モバイル向けに最適化された設計となっている。
アプリケーションマーケット Googleにより、Android用アプリケーションを配布、販売するGoogle Play Storeが運営されている。
マルチタッチ ネイティブに対応しており、HTC Heroなどの機種でサポートされている。ただし、Appleによる特許訴訟を避けるため、2010年2月までは、初期的にはカーネルレベルで無効化されていた[36]
データストレージAPI データ保存用にSQLiteが組み込まれている。
マルチメディアAPI Media Frameworkと呼ばれる映像と音声用のライブラリにより、H.263H.2643GPP/MP4コンテナ)、H.265MPEG-4 SP、WebMAMR、AMR-WB(3GPPコンテナ)、AACHE-AAC(MP4/3GPPコンテナ)、MP3MIDIVorbisWAVJPEGPNGHEIFGIFBMPWebPなどに対応している。
フォント FreeTypeフォントライブラリ[37]により、TrueTypeType1OpenTypeなどのフォント形式に対応している。
その他のライブラリ OpenGL ESVulkanOpenSL ESOpenMAX AL、Skia(SGL)、SSLzlib標準Cライブラリ(Bionic)、標準C++ライブラリ(libstdc++/libc++)など

プログラミング言語

カーネルとライブラリ、ランタイムはほとんどがC言語またはC++で記述されているが、2021年から新規コードのデフォルト言語をRustにしており[38]、2022年12月現在では新規コードのRustの占める割合が21%に達している[38]。アプリケーションとアプリケーション・フレームワークは、Google独自に構築した仮想マシンであるDalvik仮想マシンまたはAndroid Runtime(ART)上の「Java Platform, Standard Edition(Java SE)のサブセット+Android拡張」環境で記述する[39]プリインストールされたアプリ、エンドユーザーが後からインストールするアプリを問わず、共通の仮想マシンおよびフレームワークを使用する。

対応CPU

Googleが公式サポートしているCPUはARM(ARMv5以降)、MIPSx86である。ARM以外の環境はAndroid 2.3から対応した。端末シェアの多くはARMv7とARMv8が占めているが、日本においては2014年3月に大手家電量販店のビックカメラが自社ブランド製品としてIntel Atom搭載のタブレットを発売[40]するなど、x86による製品もあった。

ChromeOSにはAndroidアプリケーションの実行環境としてAndroid Runtime for Chrome(ARC)が搭載されており、x86ベースやARMベースのCPUを搭載するChromebook端末上でAndroidアプリケーションを動作させることもできる。

Microsoft Windows 11では、専用のAndroidサブシステム(Windows Subsystem for Android:WSA)をインストールすることで、x86ベースやARMベースのCPUを搭載するWindows PC上にて、Amazon Appstore経由で入手したAndroidアプリケーションを動作させることもできる(2025年3月5日にサポート終了に伴い非推奨になっている)[41]

Androidアプリケーションのパッケージ(APK)には、各種プロセッサのアーキテクチャ固有命令を含むネイティブライブラリを複数含めることができる。エミュレーションにより、x64プロセッサ上でARM32/ARM64ネイティブライブラリのみを含むAndroidアプリケーションを動作させることもできるが、オーバーヘッドを伴う。

カーネル

AndroidのカーネルではLinuxカーネルに独自パッチ[1]を当てたAndroid共通カーネル(ACK)が使われている[42]

ACK 5.4より前は各プロセッサーベンダー毎にACKを派生したベンダーカーネルがあり[43]、製品メーカーは製品毎にベンダーカーネル派生のプロダクトカーネルを用意していた[43]が、ACK 5.4以降は外部モジュールを読み込むためのカーネルモジュールインターフェース(KMI)を提供する汎用カーネルイメージ(GKI)となり[43]、各プロセッサーベンダーはベンダーモジュールを提供する形となった[43]

種類 カーネルのURL
Android共通カーネル(ACK) https://android.googlesource.com/kernel/common/
CodeLinaroのカーネル関連コード
Code Aurora Forumの後継[44]
https://git.codelinaro.org/clo/la/kernel/

ハードウェア寄りでは開発組織 Linaro英語版がベンダー固有コードの本家Linuxカーネルへの還元(アップストリーミング)を続けている[45]

またAndroid共通カーネルも少しずつ本家Linuxカーネルへの還元が進んでおり、本家Linuxで受け入れられなかった独自機能もだんだん標準機能やユーザー空間への置き換えが進んでいる。

機能 過去のAndroidカーネル Androidカーネル 6.1現在(太字はAndroidカーネル独自機能)
プロセス間通信(IPC) Binder Binder(./drivers/android/内)
匿名共有メモリ ashmem ashmem(./drivers/staging/android/内)又は memfd
(ashmemは本家Linuxで削除された[46][47]もののアプリの一部で必要となる[48]
ログ Logger ユーザー空間デーモン(logd)
早期OOM low memory killer PSIモニター+ユーザー空間デーモン(lmkd)[49]
連続メモリアロケータ CMEM/NVMAP/PMEM
ION[50]
DMA-BUF[51]
データ使用量モニタリング xt_qtaguid eBPFベース[52]
ネットワーク権限 Paranoid network eBPFベース[52]
リモート操作(ADBのデバイス側) adb USB gadget[53] FunctionFS gadget+ユーザー空間デーモン(adbd)[54][53]

仮想マシン

Android 4.4以前のバージョンで動作するアプリケーションは、基本的にはDalvik仮想マシン(VM)上で動作する。DalvikはJavaのオープン実装であるApache Harmonyをベースとしているが、Java APIセットからはSwingAWTなどが除去され、Android専用のUIフレームワークや独自ライブラリなどが追加されている。Java CDCのAPIは、全てではないが、概ね含まれている。なお、オラクル(旧:Sun)Javaの互換性テストを通過していないため、正式なJavaではない。APIセットはJava Platform, Micro Edition(Java ME)とも異なる。Android 7.0 Nougat以降はJava APIライブラリの実装がOpenJDKベースになった[55]

Googleから提供されているソフトウェア開発キットでは、Javaプラットフォームによるプログラミング環境と、C/C++による開発がサポートされている。Java以外にも、Javaプラットフォーム向けの複数の言語(ScalaKotlin)で書かれたプログラムがDalvik/ART上で動作する。Java Native Interface(JNI)を利用して、JavaとC/C++間で相互運用することも可能である。Android 2.3以降ではNative Activityのサポートにより、使用可能なAPIの制約はあるもののC/C++のみでアプリケーションを開発することも可能になっている。また、.NET Framework互換環境の1つであるMonoもAndroidに対応しており、XamarinMicrosoft Visual Studioを利用することで、.NET言語(C#/F#)を使用してAndroidアプリケーションを開発することができる[56][57]

Android 4.4(KitKat)からは、デベロッパー向けに新たな仮想マシンAndroid Runtime(ART)が実装された。ARTは、Dalvikよりもアプリケーションの動作効率などを向上させることを目的に開発された[58]。Dalvikの場合、多様なハードウェアに対応できるよう、アプリを中間コードの状態で保管しておき、実行直前にネイティブコードに変換して動作させるJITコンパイル方式が採用されている。一方でART仮想マシンは、予め最初からネイティブコードに変換しておくため(ahead-of-time:AOT)、実行速度や動作速度が向上する[59]。Android 7.0以降のARTではAOTとインタープリタとJITをミックスしたハイブリッド手法が採用された[60]

なお、Android 4.4では依然としてDalvikが標準となっており、ARTを用いるためには開発者向けオプションで設定が必要である。ただし、アプリケーションによってはART上では正常動作しないものもあり、Dalvikとの完全互換は保証されていない[61]

Android 5.0からは、ART仮想マシンが標準となった。5.0に搭載されたバッテリー改善システムと、ARTの効率性の良さという組み合わせによって、バッテリー持続時間がAndroid 4.4と比較して1.37倍と大幅に伸びた[62]

ブートローダー

ブートローダー(bootloader)とは、デバイスの電源を入れた際にフラッシュメモリ上にインストールされたLinuxカーネルを読み込み、そこからAndroidを起動させるシステムである。パソコンで例えると、BIOSという部分に相当する。ブートローダーのインターフェースは、一部の端末でアクセス可能である。多くの場合は、電源ボタンと音量ダウンボタンを同時押ししながら電源を入れて起動させる事ができる。起動後に表示されるインターフェースは、fastbootモードとも呼ばれる[63]。ほとんどの携帯端末ではブートローダーにUbootが使用される。

開発環境

アプリケーション開発用にはAndroid SDK(Software Development Kit)が、ランタイムとライブラリの開発用にはAndroid NDK(Native Development Kit)が無償提供されている。SDKとツール類は後述のAndroid Studioに含まれているほか、単独のコマンドラインツールも利用可能である[64]。Android SDKに含まれる通信ツール「Android Debug Bridge」(adb)によって、Androidデバイス(携帯電話機/タブレットなど)とホストPCとをUSBで接続して、アプリケーションプログラムをデバイス上で実行しながらPC上でデバッグすることができる。Googleが有償で提供するSIMロックフリーの開発専用携帯電話機や他社の専用の携帯電話機エミュレータでないと、低レベルのランタイムとライブラリを書き換えることはできない[39]統合開発環境は、Android Studioが推奨されている。Android Studioの実行環境つまりホストとして対応しているOSは、Microsoft WindowsmacOSLinuxUbuntuなど)、ChromeOSである[64]Visual StudioIntelliJ IDEA