********************************************************************** セッションS4-a チュートリアル テーマ :Androidとは?〜組み込み視点から〜 講師  :大石 亮介  (富士通研究所, 日本Androidの会)      嶋 是一   (日本Androidの会 幹事)      みずの みつお(サン電子, 日本Androidの会 組み込みWG) 日時  :2009/8/28 14:00〜15:20 参加人数:約40名(終了時) ********************************************************************** ■ はじめに 本チュートリアルの資料は,日本Androidの会のホームページにて 公開されています. http://www.android-group.jp/index.php?%B5%BB%BD%D1%BB%F1%CE%C1 ------------------------------  テーマ1:Androidとは?〜組込みの視点から〜  講師  :大石 亮介 (富士通研究所, 日本Androidの会)  時間  :約30分 ------------------------------ ■ Androidとは?〜組込みの視点から〜 ・Androidを聞いた事がない方はいらっしゃいますか? → 若干名,挙手 ・Androidの携帯電話を持っている/触れた事がある方は? → 10数名程度 ・SDKなどのツールを利用した事のある方は? → 少し減ったが10数名程度 ほとんどの方は,名前ぐらいは聞いた事があるけど,中身はよく知らないと 言う方が多い. その事を念頭に入れて進めていきます. ■ Androidは人気? 今話題のAndroid.いろんな所で話題にはなっているが果たして人気なのか? 実際皆さんの持っているかと言うと…そうでもない. では,実際のところどうなのか?と言うと…  ・2009年6月時点では…32カ国22キャリアで販売  → もしかすると,今(2009年8月時点)ではもう少し増えているかも  ・一番最初はアメリカのキーモバイルから販売  ・発売直後youtubeで大反響だったらしい  → ダウンロード,アップロード数が爆発的に伸びた のような状態らしい. あと,このセッションは組込み系のセッションであるので,携帯電話用の プラットフォームではあるが携帯以外にも多種多様なデバイスに搭載されている 点にも触れながら本セッションを進めます. ■ Androidの歴史 Androidは携帯電話用のプラットフォームなんですが,一応Google社が 提供している.その元を辿っていくと… 2005/07 Google社がAndroid社を買収した所からスタート     この時には,まだ大石氏もAndroidを知らなかった 2007/11 携帯のプラットフォームとしてAndroidを発表     この時から業界の関係者の間で話題になってきた     Android発表と同時に,Google社からOHA(Open Handset Alliance)が     と呼ばれるAndroidを開発する為の団体が設立されている 2008/10 アメリカのT-mobaile社より「T-mobaile G1」を発売     中身は台湾のHTC社のDreamと呼ばれる機種 2008/09 Androidの会が設立     大石氏は,その2ヶ月後よりAndroidの会に参戦 2008/10 Androidのソースコードが公開     これにより,実際のAndroidの携帯を使えるようになったと同時に,     Androidのシステムそのものを弄る事ができるようになった 2009/03 日本の組込みメーカー主導でAndroidを他の組込み製品にも移植しよう.     ってな流れができた 2009/04 Android1.5リリース     日本語を含む多言語環境に対応した点が,非英語圏の     人にとって大きかった 2009/06 AcerがAndroidのネットブックを出すと発表     が,その後音沙汰なし.どうなったのか?     この頃から,Androidを携帯電話以外の機器にも搭載するように     なってきた 2009/07 NTTドコモよりHT-03A発売     Hardware仕様に違いはあるが,Androidの動きは全く同じ 2009/08 (スライドには含めていませんが…)     チャイナモバイル社よりAndroid互換のOPhoneがリリース     DellとLenovoから端末を発売.その他,HTC,Samsungなども参入予定.     中国では,特殊なお国事情(情報統制など)によりAndoroidを改変した     上でのリリース.のようです ■ OHAの主要メンバー Androidは広がってきているけども,開発の核となるOHAにはどんなメーカーが いるのか? 通信キャリア,ソフトウェアベンダ,半導体メーカー,携帯電話メーカー… 携帯電話を取り巻く全てのメーカーが含まれています. 詳しくは,スライドP12を参照. ■ 携帯電話としてみたAndroid Androidを携帯電話としてみた時にどんな特徴があるか? → 「Androidはクラウド起点の端末である」 ■ Googleの各種サービス ぶっちゃげると,googleのサービスがそのまま使えます.  ・Gmail  ・Contacts  ・Youtube  ・Picasa  ・Latitude  などなど 各種データを従来のように携帯内に置くのではなく,サーバ上に置く事で PCからでも同様のデータを扱えます. こうすると,何が美味しいのか? → 元々,PCで提供されていたサービスなので…  ・Gmailで使っていたアドレス帳と同様のモノが携帯電話でも利用できる.  ・携帯電話で撮った写真や動画をYoutubeなどで容易に投稿できる.   共有する事もできる. 今までの携帯電話は,このような情報を携帯の中から出さないように出さない ようにしていたモノを,全く違った新しい視点で実現している. <便利な所>  ・自分が持っている情報を知り合いに流す  ・携帯電話でないPCとの連携が容易に取れる こんな所がAndroidの便利な所だと思っている. ■ Androidのハードウェア(Goldfish) 持っている機能としては…  ・携帯電話   −GSMまたは3G(CDMA)  ・ARMv5 ベースアーキテクチャ  ・Wireless LAN, Bluetooth  ・LCD(タッチパネル式)   −QVGAまたはHVGA  ・SDカード(microSD)  ・GPS  ・センサー   −傾き、加速度、地磁気 上記の機能は,今時の携帯電話にはついていそうな機能. これらの機能ががAndroidを動かす上で必須のHW要件かと言うと,必ずしも そうではない. これらとコンパチブルな機器を用意しておくとAndroidが使える事もある. ここら辺の話は,みずの氏より後で説明がある. ■ googleの各種サービス1 web版のGmailと同期が可能. フォルダの自動振り分けも共通設定. ■ googleの各種サービス2 Googleマップ. GPSとセンサを利用した位置情報の提供する事ができる. ただ,一部Googleマップの機能は有料. ■ googleの各種サービス3 Androidが一台あれば日常的なデスクワーク全てを持ち歩ける. (かもしれない) というのも,office系のツールが弱い点がネック. もし,WordやExcel相当のモノを使えるようになったら,このセッションを Android携帯電話で行う事ができるかも知れない. 他にも良い事があって,例えば…  ・携帯電話を落とした際の個人情報流失の対策に,Googleのアカウントの   パスを変更する対応が可能  ・新しい携帯電話への買い替え時に,電話帳や設定の引継ぎが容易に   実現可能 このような便利な機能が使える上に,さらに電話もできる!! ■ オープンソースとしてのAndroid1 サービス面に着目してきたが,一方でオープンソースの一面もある. オープンソースのAndroidの良い点としては…  ・apache2.0ライセンス(BSDベース)である   −GPLとは異なり配布されているソースコードを改変しても公開の義務が    無い(基本的には)  ・サードパーティによる拡張が容易   −例:OPhone(中国版)  ・拡張例の一つとして「勝手ケータイ」などもある   −同日と前日に,隣接会場で実施されていたポスターセッションにて    公開されていたwillcomのPHSにAndroidを搭載した事例など ■ オープンソースとしてのAndroid2 Androidのソースコードだけではなく,SDKのソースコードも公開されている.  ・開発環境そのものも流用が可能   −Eclipseベースである為,全ての開発環境をカスタマイズ可能  ・エミュレータはQEMUがベース   −エミュレータ自体も公開されている   −(Eclipse上のエミュレータでサンプルコードを実行しての実演)  ・カーネルなど,一部GPLのソースコードが適用  ・ソースコードは頻繁にアップデートされている   −新しいソースコードやバグ修正はは,結構早く取り込まれる ■ Androidのアーキテクチャ 大きく5階層で構成. スライドのP13を参照. ○ アプリケーションレイヤ 先ほどのエミュレータで見えたようなGUIの部分.  ・JavaとXMLで記述するのが原則.  ・J2MEではなくJ2SEベース   −floating pointが使える   −finalize()が使える   −PC向けライブラリの移植が容易    移植例:QRコードのエンコード/デコードのアプリケーションの移植  ・javaからネイティブコードを呼び出す為のNDKも用意されている   −2009/07時点ではARMv5のみに対応   −最近ではjava以外にもPythonやPerlなどのプラットフォームでも    始まっている. ○ アプリケーションフレームワーク javaで記述されたライブラリ.  ・プロセス管理   −javaのスレッドを用いたプロセス管理  ・データ管理  ・画面管理 ○ Androidランタイム  ・Dalvik Java VM   −Androidの為にGoogleが開発した新しいVM    ・SUNとかMicrosoftのとはちょっと違う   −モバイル機器向けの最適化  ・具体的には   −スタックを用いずレジスタベースの実装    ・これによりメモリの移動量を減らす事ができ,消費電力の削減を     図れる    ・floating pointが使えるようになっている為,アプリの開発は楽だが     その分パフォーマンスにもろに影響が出てしまう.     その為,トレードオフできるようにする為にあるのでは?と思う   −JITの廃止    ・コンパイル済みのアプリのみ実行可能     −PCに比べて低スペックな携帯電話での実行を意識して,このように      なっていると思う  ・アプリ開発者からすればVMの理解はほとんどいらない   −開発する際,ソースコードはAndroid特有のライブラリ以外はjavaでの    開発と同一であると思って良いと思う ○ ライブラリ  ・glibcを使わず、独自のbionicライブラリを実装   −ライセンス問題の回避(BSDライセンス)の為   −モバイル向け最適化の為  ・SQLite   −簡易SQLデータベースが搭載されている  ・Webkitブラウザ   −見た目はjavaアプリだけど…実際はCで書かれている   −Chrome やSafariと同じエンジン ○ linuxカーネル 一般的なlinuxカーネルに若干手を加えたモノ. 若干手を加えている部分は,実際にアプリケーションを開発する立場からすると 一般的なlinuxカーネルとほとんど同じと考えて良い. ■ 結局どうなの? ・基本的にはLinuxベースである  −一般向けのPCのディストリビューションとはかなり異なる  → JavaのVMが前提になっている点など ・でも携帯だけでなくPCでも動いたりする ・便利なクラウド端末と見る事もできる ・オープンソースのモバイル開発環境としても見る事が可能 ■ まとめ ・Androidは,モバイルの世界にイノベーションをもたらす  −今までのモバイルの世界とは違う ・Androidは毎日のように進化していく  −予稿集の締め切り後にも,どんどん新しい話が出てきたりしている ・Androidを使って新しい世界・新しいデバイスを作る事が容易に可能なのでは?  −大石氏の個人的な感想でもあり,期待でもある ------------------------------  テーマ2:Androidに見るUIの可能性  講師  :嶋 是一 (日本Androidの会 幹事)  時間  :約20分 ------------------------------ ■ はじめに 今日は,アンドロイドの話を20分ぐらいしたいと思います. 全然関係ないですが,先ほどメールでニュースが入ってきました. イギリスのGoogleのオフィスでBBQをして火事になったそうです. 全然関係なくまた思い出したんですが,つい先日,Androidの会のメンバと iPhoneのメンバでBBQ大会をしたんですが,このアンドロイドTシャツが 100m先からでも見えるほどで,凄い目立ちます. そんな事ばかりしているので,アンドロイドの会は少々宗教団体のように 思われてしまうんですが,けして「機械の身体になりましょう!!」とか 思っていないので安心して下さい. 以上ネタでした. では,本日はUIの話をさせて頂きます. ■ 嶋氏について 携帯電話のメーカーに勤めている. その為,アンドロイドを用いて携帯電話を作る.とか,デバイスを作る側の 視点で話をさせて頂きます. ■ 使いやすい究極のUIとは? UIと言っても,なかなかアンドロイドのUIは難しい.  ・Androidは,OSであって製品でない  ・iPhoneは,製品でありOSである よって,アンドロイドの位置づけとしては,  ・携帯電話とOS  ・PCで言うところのDOS/VマシンとMicrosoftのWindows と考えると理解しやすいんじゃないかと思います. では,使いやすいUIってどんなもの?と言う話をした時に,究極のUIとは,  ・UIの存在を使っている人が意識しない  ・使っている感覚がなく,ダイレクトにデバイスをコントロールができる  ・思っている事が,そのまま伝わる 以上のような点が,求める究極のUIに関係すると思います. ■ Andy Rubinさん Andy Rubinさんに,昨年(2008年)に取材させてもらい,約20分ほど話を 聞きました. その際に「なんで"Android"と言う名前なの?」と質問したところ… → ものすごいAndroidを語りだしました. その話を要約すると,  ・Androidはロボットではない  ・Androidとは,人の形をして,そこにマシンとのインターフェースが無い.   そこがライトなんだ  ・つまり,日本のアニメに出てくるロボットと同じ.それがAndroidだ と言うお話をして頂けました.この話によっていろいろUIについて非常に 考えさせられました. ■ 使いやすいさとは 携帯電話を使っていて,操作系の使いやすさとは…  ・使い方に迷わない  ・メニューがすぐ分かる そう言った所に「使いやすい」を感じる. これは結局なにをやっているか?と言うと,一生懸命,仕様書を作って プログラミングをして…と,UIの話はこのような話になりがちになる. 実は,携帯電話は買ってから,使って,使い始めるまでは大変である. 使い方のコンセプトが変わると,非常に分かりづらい. この初めの「使いやすくなる」というハードルは非常に高い. 昨今,発売されたiPhoneはタッチパネルによって,このハードルを下げている. ココが,携帯電話におけるUIに対する1つの大きな改善点であり,問題点である. ■ PCのUIになってみて下さい 「ちょっとみなさんPCのUIになった姿を想像して下さい.」 (スライドP6参照) 想像して思うように,画面やキーボードを介しての意思疎通は,かなり難しい. ユーザと言葉でやりとりすればすぐ分かるが,選択した画面の座標とキーボード からの入力から情報を理解しなければならない. しかも,これら情報は時系列でパラレルで入ってくる. ■ Androidと人のパイプを太く なぜ,こんなにも難しいのか? それは,画面を通しての意思疎通では情報が多く得られないから. デバイス側とユーザインターフェース側を繋ぐパイプが画面やキーボードでは 細い. では,情報が少なかったら様々センサを付けて人の思っている事を,もう少し 理解できるようにしよう. と言わけで,人とAndroidのパイプを太くすればUIとしても使いやすく なるのでは!?と考えている. ■ AndroidのUIの可能性 そうとすると,Androidを搭載するT-Mobileには,様々なセンサが付いている. <T-Mobileについてるセンサ>  ・カメラ  ・電波  ・マイク  ・方位センサ  ・加速度センサ  ・GPS      などなど ■Androidのマッシュアップ センサを付けただけではあまり意味が無いが,このようなデバイスから様々な サービスを作り出す事ができる.このようなモノを「マッシュアップ」と呼ぶ. そんなマッシュアップの一例として「ストリートビュー」と呼ばれる アプリケーションがある. 元々あるGoogleのストリートビューのサービスがAndroidに対応して,  ・方位センサ  ・加速度センサ  ・GPS  ・Web と連携した. これによって,自分が携帯を持っている目線からの風景が見える. そして,東京タワーの下に行って,携帯を上に向けると加速度センサによって 傾きを検知して,東京タワーの上の方まで追従しながら見る事もできる. といった,なかなかインパクトのあるアプリケーションが生まれている. ■ 拡張するUI このように,センサを用いてUIの優れたサービスを実現する事ができる. Androidのこれからとしては,アイディアを駆使して様々な使い方を生み出したり, UIの拡張をしていかなければならないと思っている. ■ UIの要素 ・入力操作系(input)  −声の入力  −キーのイベント  −画面のタッチ ・表示系(output)  −画面の表示  −音が鳴る ・外部装置(outside)  −PCの外部装置  → 極端な例であれば,携帯電話のカメラ機能を利用してPCのマウスとしての    利用.などなど ■ 端末に関するデバイス/機能 HT-03AとiPhone 3GSを表に並べてみました.(スライドP12を参照) ハードウェア的には,あまり変わらない. ソフトウェア的には…  ・デバイス&ドライバ   −まず,入力系のデバイスを動かす為のドライバが必要  ・アプリケーションフレームワーク   −次に,画面のボタンなどを扱うフレームワークが必要  ・アプリケーション   −最後に,アプリケーション.   −アプリケーションは,ダウンロードして抜き差しが可能   −表示系のアプリケーションは抜き差しが出来ない ■ Androidの技術 Androidのアーキテクチャ(スライドP13を参照) ・抜き差しできるのがアプリケーション  −AndroidSDKを用いてアプリケーションを作成可能. ・製品であると抜き差し的ないのが…アプリケーション以下の部分  −iPhoneなどの携帯電話は,OS自体が非公開  −Androidの場合,ここの部分がオープンソース  −普通の携帯の場合,ここの部分は抜き差しできない  −Androidの場合,汎用環境と呼ばれるボードなどを用いると,ここの部分を   修正した「俺々Android」を作る事も可能  → 自分でOSを開発できる.修正できる. ■ 拡張できるUI OSS AndroidとiPhone 3GSを表に並べてみました.(スライドP14を参照)  ・デバイスドライバを自由に追加できる  ・ハードを追加すれば…さらに広がる自由度  ・それらを用いて表示系を改善できる ちょっとしたアイディアを個人・研究レベルですぐに試す事ができる. → 利用開始時の敷居を低くする仕組み ■ AndroidのUIの可能性 AndroidもiPhoneもデバイスドライバが付いている.  ・Androidの場合,様々なデバイスがくっつくので多様性.  ・iPhoneの場合,デバイスは決まっているので統一性. ■ デバイスマッシュアップ 時間が無い為,省略された. ■ 拡張するUI・問題点 UIを改善する際は「描画にまつわるもの」と「入力操作にまつわるもの」と 2つある. ・描画にまつわるもの  −画面のUI  −画面遷移,メニューなどの改善 ・入力操作にまつわるもの  −タッチパネルなどで,ハードウェアのハードル(使い初めの   敷居の高さ)を下げる iPhoneの場合,表示系と入力が主な改善対象. Androidの場合,全方位的に改善対象にできる. しかし,良い事ばかりではなく,新しい事をするとソフトウェアとハードウェア をコンセプトに沿った形で開発しなければ使えないと言った問題点はある. ■ Androidはブレークするか 「携帯は属人機」 人間が常に持ち歩く端末である為,センサ認知で人間の事をよく知っている, そして使いやすい端末になるべき. 人間の歴史で属人機は2つしかない.  ・腕時計  ・携帯電話 Androidは,そういった貴重な場所に位置する携帯電話を,人間にとってさらに 良くなるように改善するの為に使う事もできるし,新たなアイディアから作った 新しいデバイスが,3つ目の属人機として普及するかもしれない. Androidに対して,以上のような点に注目が集まっている. 嶋氏もAndroidの可能性を信じて宣伝・普及・布教?の活動をしている. ------------------------------  テーマ3:Android Porting  講師  :みずの みつお (サン電子, 日本Androidの会 組み込みWG)  時間  :約20分 ------------------------------ ■ はじめに 最後にPortingのお話をさせて頂きます. 本日は,Androidを組込みで使う時に実際どのようにして組込み機器に搭載する のか?と言う点を具体的かつ概略を述べたいと思います. ■ Hardware Androidに必要なハードウェアスペック.  ・プロセッサはArm v5   −先ほど説明があったようにArm v5プロセッサ   −それ以外のプロセッサでも動く    ・PXA, IXP, OMAP3, i.MX 31などなど  ・ROM,RAMが64MB以上必要   −組込み機器でもリッチな部類  ・これらに加えて表示機器が必要 上記に近い製品となると  ・SHARPのZaurus  ・Beagle Board 辺りがスペック的に使えそう. ■ Kernel ○ Linux Kernel  ・Linux kernel 2.6.24 - 2.6.30で動作を確認済み  ・Linux kernel 2.6.29だけは未確認 ○ Cross Compiler  ・Code Sourceryを使用 ○ Android Patch  ・KernelをAndroid用に移植しなければならない  ・移植方法は,結構原始的.   1.diff -urN vanilla android > android.patch    −vanilla:生のKernel    −android:公開されているAndroidのKernel    −この2つをdiffで差分を出して,patchとして取り出す   2.patch target < android.patch    −target:移植したいボード用のKernel    −取り出したpatchを移植したいボード用のKernelにpatchとして     直接当てる    −当てても沢山エラーがでるので,出たエラーを1つずつ潰していく   3.make config    −あとはconfigしてbuildする    −Android用に必要なオプションは下記のファイルに記述されている     ・Documentations/android.txt - except pmem ○ Android Drivers  ・AndroidのKernelのどこが変わっているのか?  ・大きく分けて3つDriverが追加されている   −ashmem    ・匿名で共有メモリを使えるようにしているDriver    ・Androidのシステムは,アプリケーション1つ1つにユーザIDがある    ・ユーザIDが異なるアプリケーション間でシェアメモリを使う時に     利用するDriver   −binder    ・プロセス間通信用のIPC Driver   −yaffs2    ・フラッシュROMのDriver    ・通常,組込みではjffs2を利用する    ・Androidのシステムが,ほとんどfile open,read/writeをメモリの     割り付け(mmap())で実現している    ・jffs2ではmmap()に対応していない    ・その為,mmap()に対応したyaffsを拡張してyaffs2として使用 ○ Staging driver 2.26.29以降のvanilla Kernelの中に,これらのデバイスドライバが 組み込まれている. StagingのオプションをイネーブルにするとAndroidのデバイスドライバが 出てくる. 将来的には,patchを当てるのではなく,Kernelのコンフィギュレーションで 設定してAndroidが動くKernelが出来上がる!!と言う野望になっているようです. ■ User Land いきなりAndroidを立ち上げても良いけども,一度普通に立ちあがるUserLandを 使った方が良いです.  ・Debian ARM   −みずの氏はDebian ARMのLandを使うのが好き   −Debian ARMだと様々なツールが使える  ・Angstrom   −Build tools, Toolchain, Kernel, User Landなどの    source treeを持っている   −各プラットフォーム用のpatchを管理している為,    ハードウェアごとへ最適化を図れる    ・ただし,buildに非常に時間がかかる(4〜6時間)  ・Busybox  ・BSP ■ Android 最後に,Androidのbuildが必要です  ・source.android.comでAndroidを入手して下さい   −ベースはmaster   −現在,cupcakeが最新   −次のverはdonut  ・make   −out/target/product/generic    ・root/    ・system/ --> root/system  ・Boot   −$ chroot android/ /init   −chrootを使わずにKernelからイニシャライズのコマンドを指定しても可    ・Kernel option - init=/init    ・大抵の場合,最初は上手くいかないので,最初はUserLandを用意すべき ■ Troubleshooting portingの際に,何か問題があった時にどうするか?  ・strace   −$ strace -ff -o log chroot android/ /init   −$ chroot android/ /initの前にstraceをする   −こうする事でinitプログラムが起動の際にOSに何を要求しているか?    どこでエラーになっているか?が分かる.  ・adb   −Androidにはadbという独自のデバッガシステムがある   −Android Debug Bridgeの略   −ネットワーク対応していて,リモートで利用可   −Eclipse環境で利用可 ■ Drawback オープンソース版の弱点.デメリット. → GoogleのAPIを利用する下記のサービスが使えない.  ・Google Map  ・Google Talk  ・Gmail  ・You Tube  ・Market これらの機能を使いたい場合は,Googleと契約をする必要あり. ■ Points of Interest ・android-embedded-japan  −質問があれば是非どうぞ!! ・android-porting  −xxx@android.comやxxx@google.comのアドレスを持った人が   質問に答えてくれる. ・labs.embinux.org ・ブリリアントサービス  −これらのサイトにBeagleboardについての情報が載っている ■ Any Questions? ・ repoによるソースコードのダウンロードがたまに重くなっている。 どうしていますか? → 重いときは時間をおいてやり直します。重いときが多いです。 ・dalvikを利用する事でプログラムをそのまま移植できるか? → 基本的にはできる.  基本的なプロセスの起動やプロセス間の通信はAndroid独自の  仕様になっているので,そこは変更が可能.  プラットフォームに依存しない部分はそのまま使える. ・JITへの対応は? → 対応しないと思う ・Androidに関する一次ソースは? → Android.comに記載されている情報が一次ソースと言えると思う. ・Dalvikの一次資料は? → 基本はソース見る事.   見やすい資料となると,過去にGoogleIOというイベントにて,   Dalvikについての講演があり,その資料が有用だと思われる.   Webで検索をかける事で見つける事は可能. 以上.