ACE合格への学習ノート (1)システムアーキテクチャ (Android技術者認定試験の要点整理)
Androidアプリケーション技術者認定試験・ベーシックの勉強メモ。
今回の範囲は(1)システムアーキテクチャ。
(1)システムアーキテクチャ
項目:
- システムアーキテクチャ概要
- ライセンス形態
学習リソース
Android技術者認定試験「ACE」ドリル(1):Androidのシステムアーキテクチャ 〜全体像を理解するために〜
http://monoist.atmarkit.co.jp/mn/arti...
Androidアプリケーション技術者認定試験ベーシックの試験対策Wiki
http://wiki.livedoor.jp/ace_study/
「Androidのアーキテクチャ」のまとめ
http://blog.flatlabs.net/20110522_104...
▼Androidメモ▼パッケージとアーキテクチャ要素
http://www.saturn.dti.ne.jp/npaka/and...
書籍・・・
インプレスジャパン,「徹底攻略 Androidアプリケーション技術者認定試験ベーシック」。
その正誤表:
お詫びと訂正:徹底攻略 Androidアプリケーション技術者認定試験ベーシック問題集
http://www.impressjapan.jp/support/af...
(1−1)システムアーキテクチャ概要
構成要素
階層順に:
- アプリケーション(開発者が作るもの。成果物。マーケットで流通するもの。)
- アプリケーションフレームワーク(開発者が覚えるべきもの。ミドルウェアをJavaで呼び出すための便利なAPI。Javaで実装されている)
- 下記の2つ:
- Androidランタイム(Dalvik VM。アプリの実行環境)
- ライブラリ(WebKitやSQLiteなどのミドルウェア)
- Linuxカーネル(2.6。各種ドライバ類を同梱)
これらの全階層を網羅して提供してくれている(=フルスタック)というのがすごい点。
この階層図の構成要素を答えさせる問題は,試験に頻出。
インサイドAndroid
http://itpro.nikkeibp.co.jp/article/C...
- Androidのソフトウェアスタックの図
簡略化すると:
- AP層:AP
- AP FW層:API
- ランタイム:VM
- ライブラリ層:エンジン類
- カーネル層:ドライバ類
Androidランタイム,Dalvik仮想マシン
特徴:
- レジスタベース(メモリ上のスタックを介さないので,スタックベースよりも省メモリ)
- Googleが開発
- Dalvikバイトコード(dexファイル)を利用
- .java>.class>.dex
Androidの仕組みを知る(2) Android Runtimeとアプリケーション・フレームワーク
http://itpro.nikkeibp.co.jp/article/C...
- メモリー上にスタックを確保しないのでメモリーのフットプリント(動作に必要なメモリー量)が小さい
Dalvik、Androidのバーチャルマシーンが激しい論議を巻き起こす
http://www.infoq.com/jp/news/2007/11/...
組み込み機器用ソフトウエア向けのJava開発・実行環境として
「J2ME」が存在するにも関らず,
あえてDalvikを作りなおしたというのが面白い点。
アプリケーションごとに,基本的な実行モデルは
- プロセス
- 仮想マシン
- LinuxユーザID
が別。
ユーザIDを共有すると,仮想マシンもプロセスも共有。
ランタイムは,仮想マシンのほかに「コアライブラリ」を含む。
これはJ2SEにほとんど準拠したJava言語のライブラリ。swingなどの一部機能が欠落。純正Javaではない。
「標準ライブラリ」とも。
わかった気になる気になるandroid
http://dev.ariel-networks.com/Members...
- Androidランタイム 標準ライブラリ
- 「javaで書かれたandroidのコアライブラリ」
上記サイトには「コアライブラリがJavaで実装されている」とあるが,
それは間違いだろう。
すべてのJava関数をピュアJavaで実装することはできない。(鶏と卵)
例えばソケットを扱うJava関数を実現したい場合,OSのカーネルAPIをコールするような機械語(もしくはバイトコード)が必要だ。
ライブラリ
- 2Dグラフィックエンジン:SGL
- 3Dグラフィックエンジン:3D ライブラリ
- 2D/3Dグラフィックスの統合をサポート:Surface Manager(※「Manager」と名前につくが,しかしアプリケーションフレームワークではない。間違えやすい。)
ミドルウェア達のこと。SQLite,SSLなど。
各種エンジン類。
「ライブラリ」と「コアライブラリ(標準ライブラリ)」の違いに注意。
単に「ライブラリ」といった場合は,ネイティブコードのミドルウェア層のことを指す。
ランタイムまわりの「コアライブラリ」と言った場合,Java言語を動作させるためのJ2SEクラスライブラリもどきのことを指す。
アプリケーションフレームワーク
アプリケーション開発に必要な機能を提供。
- Activity Manager(アプリケーションのライフサイクルを管理)
- Window Manager
など。
各種マネージャ。
アプリケーションは、基本的にはライブラリを直接使用するのではなく、
アプリケーションフレームワークを通して利用。
ミドルウェアを便利に利用するためのAPI。
アプリケーションフレームワーク層の存在は,デベロッパにとってありがたい。
ミドルウェアを直接呼び出そうと思ったら,JNIで頑張ってC++のコードを書く必要があるからだ。
でもこの層がJNIをラッピングしてくれるおかげで,ネイティブコードを意識せずに済み,言語はJavaだけで済む。
バージョン
- Androidのバージョン
- APIのバージョン
がある。
前者がマイナーバージョンアップ(+0.1)した場合であっても,後者は1ずつ増加する。
(1−2)ライセンス形態
Apache License 2.0
自由に改変して商用化できる。業務用に非常に使いやすい。
適用対象:
- アプリケーションフレームワーク
- 標準ライブラリ
- ランタイム
- 開発したアプリケーション
コピーレフトの考え方は存在しない。
GNU GPL
改変物の頒布者に対して,改変したソースコードを公開する義務あり。業務に使いにくい。
適用対象:
- Linuxカーネル部分とそのライブラリ
開発者であれば,LinuxのカーネルのライセンスがGPLになってくれている事に対して感謝すべきだろう。
LinuxがコピーレフトのGPLを採用しているおかげで,その商用改変物であるRedHatディストリビューションも強制的にGPLライセンスとなる。
そしてRedHatは頒布対象者である第三者に対してソースコードの公開義務を自動的に負い,改変を許可せざるを得なくなる。
そのおかげで,
RedHatのクローンであるCentOSやTurboLinuxといった派生物が生まれ,
それらの製品もGPLライセンス下でオープンに公開されることになり,今に至る。
つまり,いま無料のLinuxの定番であるCentOSを利用できるのは,
元をただせばLinuxのカーネルのライセンスがGPLである事のおかげなのである。
記事:オープンソースとレッドハットのメリット
http://www.jp.redhat.com/magazine/jp/...
- LinuxカーネルがGPLを採用しているため、それを利用しているRed Hat Enterprise Linuxも、もちろんGPL
特集:プログラマよ立ち上がれ! OSS開発者への道
http://www.catch.jp/oss/oss_license_sd/
- GPLでは、「派生物も同じライセンスで配布すること」という“コピーレフト”の考え方を適用しています。つまり、GPLのソフトウェアを改変したら、その改変版もGPLで公開する必要があります
BSD License
ライブラリ層の中のC言語の標準ライブラリは,Google独自の「Bionic libc」。
ライセンスはBSD Licenseで,とても緩い。
改変物のソースコードに公開義務がないし,改変物の頒布に際して初期開発者を意識する必要もない。
BSD License(Berkeley Software Distribution License)
http://ja.wikipedia.org/wiki/BSD%E3%8...
著作権表示、ライセンス条文、無保証の旨の三点をドキュメント等に記載さえしておけば、BSDライセンスのソースコードを他のプログラムに組み込み、しかも組み込み後のソースコードを非公開にできるため、再配布時のライセンス条件を制限するGPLに比べ、商用化及び標準規格の制定に利用しやすい
定番の「GNU libc」の利用を避けたのは,ライセンスがLGPLになってしまうのを避けるため。
※GPLとLGPLの主な違いは,
- プログラムの動的リンクに関する点。動的リンク対象がLGPLであっても,リンク元にはLGPLは適用されない。
- コピーレフトではない点
GPLやMITやCCなど主要ライセンスの内容と意味のまとめ
http://smkn.xsrv.jp/blog/2009/03/summ...
- GPLは何代にも渡っても「フリーソフトウェアであり続ける事」を可能にする
- LGPLはGPLライセンスの制約を若干緩めたもので、主にライブラリやモジュールみたいなものに使用されている
以上のAndroid関連のライセンスをまとめると,下記表のようになる。
ライセンス名 | Android中の 適用箇所 |
コピーレフト | 改変物配布時の ソース公開義務 |
---|---|---|---|
Apache License |
上位層の 大部分 |
無し | 無し |
BSD License |
Bionic libc | 無し | 無し |
GPL | Linux カーネル |
有り | 有り |
LGPL | Webkit等 (世間の代表は GNU libc) |
無し | 動的リンク なら無し |
補足
関連記事:
Androidアプリケーション技術者認定試験ベーシック(ACE) 資格制度の概要と,合格者に学ぶ学習法
http://language-and-engineering.hatenablog.jp/entry/20110923/p1