Android_(オペレーティングシステム)
[Wikipedia|▼Menu]
□記事を途中から表示しています
[最初から表示]

端末シェアの多くはARMv7とARMv8が占めているが、日本においては2014年3月に大手家電量販店のビックカメラが自社ブランド製品としてIntel Atom搭載のタブレットを発売[41]するなど、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アプリケーションを動作させることもできる[42]

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

この節の加筆が望まれています。

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

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

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

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

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

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

仮想マシン

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ベースになった[56]

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アプリケーションを開発することができる[57][58]

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

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

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

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

アプリケーション開発用にはAndroid SDK(Software Development Kit)が、ランタイムとライブラリの開発用にはAndroid NDK(Native Development Kit)が無償提供されている。SDKとツール類は後述のAndroid Studioに含まれているほか、単独のコマンドラインツールも利用可能である[65]


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:233 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef