こんばんは。kimukimuです。
今日は、Android Bazaar and Conference 2011 Summer(ABC2011s)に行ってきました!
ABC2011sとは、日本Androidの会主催の、日本でのAndroidの普及と発展を図る会です。
3000人以上が申し込んだ非常に盛況なイベントでした!
アンドロイドールのお姉さん方が浴衣着てたのにはちと驚きましたが、
とりあえず個人的に優先度は低いのでここは技術ブログなので、技術について書きます!
セッションは1つの時間帯で10個以上ありましたが、
私が参加してきたのは下記のセッションです。
時間 | 概要 | カテゴリ |
---|---|---|
10:00 〜 11:30 | 基調講演 | - |
13:00 〜 13:40 | Android is NOT just 'Java on Linux' | 開発2 |
14:00 〜 14:40 | Linuxカーネルから紐解くAndroid | 開発2 |
15:00 〜 15:40 | AndroidプログラマのためのARM概論。でも少しIntelの話も! | 開発2 |
16:00 〜 16:40 | 横浜PF部その1 Androidアーキテクチャ入門 Android におけるデバイスの認識について BC10でUSB wifiを使う |
開発2 |
17:00 〜 17:40 | 横浜PF部その2 dalvikのGCをのぞいてみた Deep in ADB - AndroidDebugBridgeの中級編資料 Android 2.3での変化点 |
開発2 |
見てわかる通り、全部アプリの開発とは直接関係ありません。
ひたすらAndroidが動作するプラットフォームとLinuxカーネルについてのセッションに参加してました。
とりあえず、ポイントについては下記の通り。
これまでAPIやAndroidバージョンの違いについては調べていましたが、
実際のAndroidアーキテクチャについては余り調べてこなかったので新鮮でした。
LinuxカーネルとAndroidの関係
Android=Linuxの一種であることは非常に有名です。
ですが、実際にどういう関係があるのか、については実はあまり分かっていませんでした。
今日聞いた内容をまとめると、こうです。
- 1. Androidが使用しているのはLinuxカーネルのみ。ユーザ領域は全く違う。
- 2. AndroidではJavaが中心に置かれて設計されている。デーモンプロセスも大部分はJavaで書かれている。
- 3. AndroidのJavaクラスライブラリはJ2SEとほとんど共通。但し一部独自クラスとなっている。
- 4. AndroidのJava実行環境であるDavlikVMはJavaバイトコードを更に一段階変換したDexコードを実行している。
- 5. AndroidにおけるプロセスのライフサイクルはJavaプロセスのライフサイクルが基本。 C/C++で書いたとしても、JavaのJNIを通して実行される。
一般的なLinux(Ubuntu)とAndroidの違い
一般的なLinux(Ubuntuを例として比較)とAndroidの違いは代表的なものは下記の4点でした。
- 1. セキュリティ
ユーザごとにユーザIDが割り振られるLinuxと違い、
AndroidではアプリケーションごとにユーザIDが割り振られる。
アプリケーション間でデータの操作などが行えないようにするため。
- 2. Linuxの一般的なIPCの代わりにAIDL/Intentを用いている
プロセス間通信の手段として、Linuxでは一般的なIPCではなく、AIDL/Intentを用いている。
セキュリティの事情にもある通り、Androidではプロセス同士の独立性を高める必要があるため。
- 3. 電源管理
モバイル機器を前提としているため、電力消費を極力抑える機構が組み込まれている。
結果、アプリが動作していない場合、CPU停止状態にして電力の使用を抑制する。
- 4. メモリ管理
Androidでは基本的に搭載しているメモリが小さい上に、Swapが存在しない。
そのため、新規アプリを起動する際、残メモリ量が少ない場合は
メモリの使用量が大きく、優先度が低いプロセスをKillするLowMemoryKillerが組み込まれている。
その他印象に残ったこと
あと、Android Bazaarも見て回ってきましたが、一番印象に残ったのはishidaも書いている、
AWSとAndroidとArduinoで飛行石を作ってみたでした。(ABC2011sにもいらしてました)
インパクトが半端なかったです。やはり。