SlideShare a Scribd company logo
1 of 48
Download to read offline
オープンソースなAndroid
オ プンソ スなA d id
 ~ソースが公開されたAndroidを
   どのように活用するか~

   京都マイクロコンピュータ
      小林哲之

                      1
はじめに
      年
• 2008年10月22日についにAndroidのソース
  コードが公開されました。
• Androidに関してはさまざまなトピックがありま
  すが、今日はソースコードを主題とします。
  すが 今日はソ スコ ドを主題とします
• 内容は発表者個人の主観に基づいています。
• 正確性については「無保障」です。 ☺



                           2
Who am I?
               Who am I?
• 組み込み 筋 十年
  組み込み一筋N十年。
 – リアルタイムOS iTRON
 – 組み込み向けJava実行環境
 – 組み込み向けLinux
   組 込 向け
 – gcc クロスコンパイルツール
• ブログ 「組み込みの人 」
      「組み込みの人。」
 – http://d.hatena.ne.jp/embedded/
• 京都マイクロ ンピ
  京都マイクロコンピュータ 2008年3月入社
             タ     年 月入社
 – http://www.kmckk.co.jp/
                                     3
本日お話すること
    Androidの概要について
•
    ソースの概要について
•
    ソ
    ソースから読み取れること
            読 取れる
•
    ソースの活用方法
•
    まとめ
•



                     4
Androidの概要に いて
• Androidの概要について




                   5
Androidとは
        社が主導     た携帯電話
• Google社が主導で開発した携帯電話用ソフト
  ウェアプラットフォーム。
• 2008年11月にHTC社からAndroid搭載の携帯
  電話 “G1” が発売されました。
       G1 が発売されました




                                6
出典:
http://ja.wikipedia.org/wiki/Android_(%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0)
                                                                                                                  7
Androidプラットフォームの構造
                          ブラウザ
                            ラウザ
                         GoogleMAP
    各種アプリケーション             メール
                            ・・・

  Java仮想マシン(Dalvik VM)
                            libc
                          Webkit
     各種ミドルウェア             SQLite
                         OpenGL EL
                            ・・・
       Linux Kernel

      携帯電話H/W
Androidプラットフォームの構造
                               ブラウザ
         各種アプリケーション           GoogleMAP
Java                            メール
Code                             ・・・

       Java仮想マシン(Dalvik VM)
                                 libc
                               Webkit
          各種ミドルウェア             SQLite
ARM
                              OpenGL EL
Code
                                 ・・・
            Linux Kernel

        携帯電話ハードウェア
Androidプラットフォ ムの構造
   Androidプラットフォームの構造
             シミュレータの場合
                               ブラウザ
         各種アプリケーション           GoogleMAP
Java                            メール
Code                             ・・・

       Java仮想マシン(Dalvik VM)
                                 libc
                               Webkit
          各種ミドルウェア             SQLite
ARM
                              OpenGL EL
Code
                                 ・・・
            Linux Kernel

          QEMUシミュレータ
x86
Code
             Windows 
プラットフォームとしての特徴
• オ プンソ ス
  オープンソース
 – 殆ど全てのソースコードが開示されました
       カ ネルのみを使用
• Linuxカーネルのみを使用
 – libcやルートファイルシステムは、通常の組み込みLinuxで
   使われている物と異なる
• アプリケーションレイヤはJavaで開発
 – ネイティブコ ドで記述されたミドルウ アと 上位アプリ
   ネイティブコードで記述されたミドルウェアと、上位アプリ
   ケーションの分離
  QEMUシミュレ タの採用
• QEMUシミュレータの採用
 – PC上でARM CPUのバイナリ互換を実現
• ソースの概要について
  ソ スの概要に いて




               12
ソースのある場所
• ここ
 – http://source.android.com/
      p //                  /
• gitとそのラッパースクリプト(repo)を使用して
  ソースをダウンロードする。
  ソ スをダウンロ ドする
 – Googleのアカウント(GMAIL)が必要。無償。
• ブラウザで閲覧するならここ
 – http://git source android com/
   http://git.source.android.com/


                                    13
何が含まれている?
     d id S を再ビルドに必要なものが全て
• Android SDKを再ビルドに必要なものが全て。
• Linux カーネル、デバイスドライバ、標準Cライブラリ、
  コンパイラツールチェイン、Dalvik VM、2D/3Dグラフィッ
  コンパイラツ ルチ イン D l ik VM 2D/3Dグラフィッ
  クライブラリ、コーデック、アプリケーションフレーム
  ワ ク、webkit(WEBブラウザ)、
  ワーク webkit(WEBブラウザ) ....
• ただし、MAPアプリケーションは含まれていない。

    HTC G1のソース? (デフォルトではダウンロードされないがリポジトリに存
•
    在する。けっこう頻繁に更新。)
    – kernel/msm.git
    – platform/hardware/msm7k.git
    – platform/vender/htc/dream.git

                                         14
全てのソースがあるのか?
• コンパイラツールチェインと一部のライブラリ
  はバイナリで入っている。
 – $(TOP)/prebuilt 以下
• それらをリビルドするために必要なソ スの
  それらをリビルドするために必要なソースの
  ありかが明記されている。
 – 各ディレクトリのREBUILTというファイルに




                             15
全部で何行?
• ダウンロードしたファイルのうち、ファイル名の
  末尾が .c .h .cpp .S .java のものだけを選んで
              pp j
  wc –l でカウントすると 約1600万行。
• このうちLinux kernelのソ スコ ドを除くと
              kernelのソースコードを除くと
  約770 万行。
• 詳細は
 http://d.hatena.ne.jp/embedded/20081127/p1



                                              16
Androidでの新規ソースは?
              たくさ         プ     成
• Androidではたくさんのオープンソースの成果
  を利用している。
• では、Androidで新規に起こされたファイルは
  どのくらいの規模か?
• /Copyright.*Android/ というパターンのある
  ファイルだけを集計すると約160万行。
• 詳細
 http://d.hatena.ne.jp/embedded/20081130/p1

                                              17
ライセンス条件は?
• 基本
  基本はApache 2.0
• 多数のオープンソースの成果を利用している
  多数のオ プンソ スの成果を利用している
  ので、それはそれぞれのライセンス条件
• モジ
  モジュールごとに MODULE_LICENSE_*** とい
      ルごとに                *** とい
  うファイルがあり、簡単に確認できるように整
  備されている。
• また それぞれライセンス表示のための
  また、それぞれライセンス表示のための
  NOTICEというファイルがおかれている。

                               18
$ find . -name quot;MODULE_LICENSE_*“
./system/extras/showmap/MODULE_LICENSE_APACHE2
./system/extras/showslab/MODULE_LICENSE_APACHE2
./system/extras/librank/MODULE_LICENSE_APACHE2
./system/extras/procrank/MODULE_LICENSE_APACHE2
 /system/extras/procrank/MODULE LICENSE APACHE2
./system/extras/latencytop/MODULE_LICENSE_APACHE2
    ...

$ fi d . -name quot;
  find          quot;MODULE_LICENSE_*quot; | d ' ^ */
                                *quot; |sed 's,^.*/,,
' |sort |uniq -c |sort -r
    117 MODULE_LICENSE_APACHE2
     24 MODULE_LICENSE_BSD_LIKE
     11 MODULE_LICENSE_BSD
     10 MODULE_LICENSE_GPL
       9 MODULE_LICENSE_EPL
       7 MODULE LICENSE LGPL
         MODULE_LICENSE_LGPL
       4 MODULE_LICENSE_PUBLIC_DOMAIN
       4 MODULE_LICENSE_LGPL_AND_GPL
       2 MODULE_LICENSE_CPL
       1 MODULE_LICENSE_W3C
       1 MODULE_LICENSE_OSL1
       1 MODULE_LICENSE_MIT
       1 MODULE LICENSE HP
         MODULE_LICENSE_HP
       1 MODULE_LICENSE_AFL_AND_GPL
                                                    19
ちなみにGPLのものは
$ find . -name quot;MODULE_LICENSE_*quot; |grep GPL
./external/iptables/MODULE_LICENSE_GPL
./external/elfcopy/MODULE_LICENSE_GPL
./external/jdiff/MODULE_LICENSE_LGPL
./external/jdiff/MODULE LICENSE LGPL
./external/yaffs2/MODULE_LICENSE_GPL
./external/qemu/MODULE_LICENSE_GPL
./external/webkit/WebCore/MODULE_LICENSE_LGPL
./external/dbus/MODULE_LICENSE_AFL_AND_GPL
./external/dbus/MODULE LICENSE AFL AND GPL
./external/oprofile/MODULE_LICENSE_GPL
./prebuilt/windows/sdl/MODULE_LICENSE_LGPL
./prebuilt/windows/ccache/MODULE_LICENSE_GPL
./p ebu t/da w
./prebuilt/darwin-x86/sdl/MODULE_LICENSE_LGPL
                   86/sd / O U     CS      G
./prebuilt/darwin-x86/toolchain/i686-apple-darwin8-
4.0.1/MODULE_LICENSE_LGPL_AND_GPL
./prebuilt/darwin-x86/toolchain/arm-eabi-4.2.1/MODULE_LICENSE_LGPL_AND_GPL
./prebuilt/darwin-x86/ccache/MODULE_LICENSE_GPL
 /p       /          /      /
./prebuilt/darwin-x86/make/MODULE_LICENSE_GPL
./prebuilt/common/jfreechart/MODULE_LICENSE_LGPL
./prebuilt/common/swing-worker/MODULE_LICENSE_LGPL
./prebuilt/common/netbeans-visual/MODULE_LICENSE_GPL
 /p       /      /               /
./prebuilt/linux-x86/sdl/MODULE_LICENSE_LGPL
./prebuilt/linux-x86/toolchain/i686-linux-gnu-
3.4.6/MODULE_LICENSE_LGPL_AND_GPL
./prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/MODULE_LICENSE_LGPL_AND_GPL
 /p       /         /          /             /
./prebuilt/linux-x86/ccache/MODULE_LICENSE_GPL

                                                                             20
ビルドのしかた
        ( b t ) M OS(i t l)でのビルドがサポ トされ
• Li
  Linux (ubuntu), MacOS(intel)でのビルドがサポートされ
  ている。
  – http://source.android.com/download
  – 他に必要なライブラリ
     – sudo apt‐get install zlib1g‐dev libncruses5‐dev unzip

• 手軽な方法
  – VMWare 上にubuntu 8 04 i386をクリ ンインスト ル
                    8.04 i386をクリーンインストール
  – 無料のVMWare player利用可能
  – ビルド時間 40分くらい?
             0分くらい
• 困った時はネットで検索。☺
• make sdk でSDK一式が再ビルド。
                                                               21
ビルドのTips
                        ド   表
• make showcommands でコマンドライン表示
• ccache を使うためには環境変数
  ccache を使うためには環境変数
  USE_CCACHE=1
          環境ではデフ ルト設定が無難
• VMWare環境ではデフォルト設定が無難
  (512MBメモリ、プロセッサ1個)
• make sdk
 – JDK6でなくJDK5でないとjavadocでエラ になる
   JDK6でなくJDK5でないとjavadocでエラーになる


                                   22
移植性?
• タ ゲットCPUはARMのみだ たが 2008年12月のアッ
  ターゲットCPUはARMのみだったが
  プデートでx86向けのビルドが追加された。
 – armv5t (ARM926以降、Xscale)
   armv5t (ARM926以降、Xscale)
• パス名に’arm’を含むファイルが多いもの
     bionic
 –
     dalvik
 –
     external/opencore
 –
     external/sonivox
 –
     external/qemu
 –
     external/openssl
 –
• これらの移植に目途がつけば、他のCPUでもいけそう。

                               23
移植性?: Bionic
                移植性?: Bionic
• 標準ライブラリとランタイムロ ダ
  標準ライブラリとランタイムローダ
  – libc, libm, libdl, libthread_db, linker
• F BSD O
  FreeBSD, OpenBSD, NetBSDからのファイルをベー
               BSD N tBSDからのファイルをベ
  スにしているようだ。
• アセンブラで書いてあるのは
  – カーネルのシステムコール呼び出し部分
  – memcpyなどのアセンブラ版
• 現在はARM,x86用のものしかないが、同じように
  *BSDから持ってくれば他のCPU用のものも準備
   BSDから持ってくれば他のCPU用のものも準備
  できそう。

                                              24
移植性?: Dalvik VM
     移植性?: Dalvik VM
      ドのインタプリタが何種類か用意され
• DXコードのインタプリタが何種類か用意され
  ている。
 – 高速版 (アセンブラで書かれている)
 – 移植用 (Cで書かれている)
       (
 – デバッグ用、プロファイル用
• それ以外のARM依存ファイルはABIを定義し
  ているファイルのみ。
• とりあえずC版インタプリタを使えば移植は簡
  単?
                           25
互換性テスト
• 各モジュールに単体テスト用のファイルらしき
 ものがあるが、システム全体に渡る互換性は
 ものがあるが システム全体に渡る互換性は
 どうなるのだろう... ?
 どうなるのだろう ?
• キラーアプリ、キラーデバイスによるデファク
  キラ アプリ、キラ デバイスによるデファク
 トスタンダード?
• サブセット化OK?

                          26
ここまでの感想
• 「本当に 全部のソ スが公開された
  「本当に」全部のソースが公開された。
 – iPhone との最大の違い。
• 扱いやすいライセンス。
• 用途は携帯電話に限定されない。
  用途 携帯電話 限定されな 。
• まさに、Google 太っ腹!ここから直接収益を上
  げることは全く考えていないようだ。「どうぞ、
  げることは全く考えていないようだ。「どうぞ
  使ってください」という感じ。
• 組み込みLinuxのメジャーなディストリビューショ
  組み込みLinuxのメジャ なディストリビュ ショ
  ンになるかも。

                              27
• ソースから読み取れること
  ソ スから読み取れる と




                 28
Bionic(標準Cライブラリ)
          制約事
• CAVEATS(制約事項)
 – $(TOP)/bionic/libc/CAVEATS
   $(   )/      //
 – 基本はPOSIX準拠だが...
 – C++の例外をサポ トしない 組み込みシステム
   C++の例外をサポートしない。組み込みシステム
   ではひどく遅いコードになるから。
      h dのキ ンセル機能はサポ トしない
 – pthreadのキャンセル機能はサポートしない。
 – ロケールやワイドキャラクタはサポートしない。国
   際化対応には代わりにICUを使う。


                                29
AndroidでのC++プログラミングの制限
• 例外は使用できない
  例外は使用できない。
 – newはmallocと同等。
 – メモリがないときはNULLを返す。
• 実行時型情報は使用できない。
 – type_info は空実装。
 – pure virtual functionは使用できない。
• STL(標準テンプレートライブラリ)は使用できない。
 – Vector.h, List.h はframeworks/base/include/utils にある。
• コンパイル時にはオプション –fno‐exceptions –
  fno‐rtti をつける。
                                                          30
libstdc++ の中身はたったこれだけ
libstdc++ の中身はたったこれだけ。
$ nm -C out/target/product/generic/symbols/system/lib/libstdc++.so |grep ' [TDRB] '
000019dd T type_info::type_info(type_info const&)
000019a5 T type_info::type_info()
           type info::type info()
000019dd T type_info::type_info(type_info const&)
000019a5 T type_info::type_info()
000019f5 T type_info::~type_info()
00001a19 T type_info::~type_info()
00001a19 T type_info::~type_info()
                i            i
000019bd T type_info::name() const
000019d9 T type_info::before(type_info const&) const
000019d1 T type_info::operator==(type_info const&) const
000019d5 T type_info::operator!=(type_info const&) const
00001a30 R std::nothrow
00002000 D vtable for type_info
0000192d T operator delete[](void*)
0000190d T operator delete[](void*, std::nothrow_t const&)
0000193d T operator delete(void )
                    delete(void*)
0000191d T operator delete(void*, std::nothrow_t const&)
00001965 T operator new[](unsigned int)
0000194d T operator new[](unsigned int, std::nothrow_t const&)
00001971 T operator new(unsigned int)
00001959 T operator new(unsigned int, std::nothrow_t const&)
                t       (  i    dit     td   th    t     t)
0000189d T __cxa_guard_abort
000018d9 T __cxa_guard_acquire
000018b5 T __cxa_guard_release
0000197d T __cxa_pure_virtual
           __   _    _
$

                                                                                      31
ダイナミックリンク
• linker
   – ld.so ではない。Android 新規設計。
   – libdlの機能はある。 dlsym, dlopen
• prelink (apriori)
  prelink (apriori) 
   – ライブラリを固定アドレスにマッピング
      • build/core/prelink linux arm map
        build/core/prelink‐linux‐arm.map
   – 実行ファイル(executable)はprelinkしてない
   – 起動高速化というより共有メモリの効率化のため?
• stripコマンドの代わりにsoslimコマンド
                                           32
各ライブラリの配置アドレス
$ cat build/core/prelink-linux-arm.map

#   0xC0000000   -   0xFFFFFFFF   Kernel
#   0xB0100000   -   0xBFFFFFFF   Thread 0 Stack
#   0xB0000000   -   0xB00FFFFF   Linker
#   0xA0000000   -   0xBFFFFFFF   Prelinked System Libraries
#   0x90000000   -   0x9FFFFFFF   Prelinked App Libraries
#   0x80000000   -   0x8FFFFFFF   Non-prelinked Libraries
                                          i      i     i
#   0x40000000   -   0x7FFFFFFF   mmap'd stuff
#   0x10000000   -   0x3FFFFFFF   Thread Stacks
#   0x00000000   -   0x0FFFFFFF   .text / .data / heap

# core system libraries
libdl.so                      0xAFF00000
libc.so                       0xAFE00000
libstdc++.so                  0xAFD00000
libm.so
libm so                       0xAFC00000
liblog.so                     0xAFBC0000
libcutils.so                  0xAFB00000
libthread_db.so               0xAFA00000
libz.so                       0xAF900000
libevent.so
lib     t                     0xAF800000
                              0 AF800000
libssl.so                     0xAF700000
libcrypto.so                  0xAF500000

     ....



                                                               33
Dalvik
• クラスライブラリはHarmonyプロジェクトの成
       ブ           プジ      成
  果。(既存のCLASSPATHプロジェクトだとGPL)
    (                       )
• アプリ起動時、zygoteというプロセスからfork 
  され、新しいプロセスのmainメソッドをDalvik 
  され 新しいプロセスのmainメソッドをDalvik
  VMのレベルでインボークされる。exec システ
  ムコールは使用していない。
  ム    は使用していない
 – なるべく多くの共有メモリをzygoteから引き継ぐ。
                 yg
 – アプリ起動時間の短縮にもなる。

                                34
DXコードインタプリタ
                             装備   な
• JIT(Just In Time compiler)は装備していない。
• 複数のインタープリタ実装
  複数のインタ プリタ実装
 – 高速版 (ARMのアセンブラで書いてある。)
 – デバ グ プロフ イル用
   デバッグ、プロファイル用
 – 移植用 (C言語で書いてある。)
• ARMアセンブラではFPU命令が使われてい
  ない。(ARM1136jf向けにチュ ンする余地)
  ない (ARM1136jf向けにチューンする余地)


                                        35
Linux Kernel
             Linux Kernel
• 2.6.27 
• Android特有の部分
 – binder
 – ashmem
• ユーザー空間デバイスドライバ?
    ザ 空間デバイスドライバ?
 – libhardware


                            36
binder
•ププロセス間通信
• OpenBinder org のものをベースにしてい
  OpenBinder.org のものをベースにしてい
  たが今は互換性はない。
• Androidのアプリケーションフレームワー
  クの根幹をなす。
  クの根幹をなす
• 上位層は AIDL につながっている。
          AIDL に ながっている。


                           37
ashmem
• Android / Anonymous SHared MEMory subsystem
• $(TOP)/system/core/cutils/ashmem.h
      int ashmem_create_region(const char *name, size_t size) → returns fd
  –
      int ashmem_set_prot_region(int fd, int prot)
  –
      int ashmem_p _region(int fd, size_t offset, size_t len)
                 pin g (         ,              ,            )
  –
      int ashmem_unpin_region(int fd, size_t offset, size_t len)
  –

• ‘pin’ していないメモリはカーネルが回収して再利用
• Javaの weak reference に似ている概念。キャッシュ
  の実装に便利。
     実装 便利。
• Javaから利用するときはandroid.os.MemoryFile

                                                                             38
• ソースの活用方法
  ソ スの活用方法




             39
ソースの活用方法
              大部分
• Androidのソースの大部分はApachライセンス
  で改変は自由。あらゆる活用方法が考えられ
    改変 自由。あらゆる活用方法 考 られ
  る。
 – 自分の製品にそのまま移植して アプリケーショ
   自分の製品にそのまま移植して、アプリケーショ
   ンをJava言語で開発する。
 – 分解して必要な部分だけ使用する
   分解して必要な部分だけ使用する。


• いずれにせよ、ソースから学べることは多い。

                            40
Androidを部分的に利用するとしたら
• 最小システムで使う
         使う
        カ ネル              , 標準 ライ ラリだけ
 – Linuxカーネルとinit, toolbox, 標準Cライブラリだけ
                 ,
 – グラフィックスやDalvik VMをはずしてしまう
• 最小システム + スクリプト言語
           スクリプト言語
 – 例えば ruby。 C言語で実装されているものならば
   移植は難しくない。




                                     41
Dalvik VMを他のOSに移植?
  Dalvik VMを他のOSに移植?
           自身は         があれば移植でき
• Dalvik VM自身はPOSIX APIがあれば移植でき
    lk
  そう。
• アプリケーションのフレームワークはbinderに
  強 依存
  強く依存している。binderはLinuxカーネルのド
              。
  ライバとして実装されていてGPLライセンス。
  Android独自のカ ネルドライバ
• Android独自のカーネルドライバ binderや
  ashmem をGPL以外のOSに移植するにはスク
  ラッチから互換性のあるものを作る必要があ
  る。

                              42
• まとめ




        43
Androidの強み:
      過去のしがらみがない
• 現在またはこの先利用できる技術を前提
 – メモリ, CPUはJavaを動かすのに十分ある。
   • アプリケーションは全てJavaで書く
     アプリケーションは全てJavaで書く。
   • アプリケーションフレームワークはJavaで統一されてネイティ
     ブアプリケーションとの競合を考慮しなくてよい。
     は     固定
 – OSはLinux固定。
   • 仮想メモリシステムを活用。
 – GPUによる高速3D描画
   GPUによる高速3D描画。
   • 2DグラフィックスもOpenGLで。そのため2Dと3Dの重ね合わ
     せの問題を考慮しなくてよい。
 – 無料
   無料のWiFi, 定額制の3Gパケット通信。
            定額制   パケ 通信
   • バックグランドでシームレスにネットワークの切り替え。


                                    44
Androidの強み:
    オープンソースであること
• 特別な契約なしで誰でもソースを見ることが
  できる。
• Apacheライセンスは商用利用で扱いやすい。
• 無償のツ ルだけでビルド環境を構築できる
  無償のツールだけでビルド環境を構築できる。

• このため世界中の優秀な技術者でにぎわう。
• にぎわう技術は急速に進歩する。
   ぎわう技術は急速 進歩する

                        45
Androidのインパクト
•組組み込みシステム開発にAndroidの与えるイ
                     与る
  ンパクトは少なくないだろう。
• 直接的インパクト
 – A d idを採用しての製品開発
   Androidを採用しての製品開発
 – Androidソースの部分利用
• 間接的インパクト
 – 他の組み込みプラットフォームもソース公開の流
   れに

                            46
オープンソース
• 組み込みソフト開発でもオープンソースを避
  けて通ることができなくなった。
• ソースは無償で入手できるが、それを読み解
  き、活用するためには技術力が必要。
  き 活用するためには技術力が必要

• 技術力の向上にはまず情報交換を。
• 日本A d idの会
  日本Androidの会
 – http://www.android‐group.jp/index.php?FrontPage

                                                     47
ご静聴ありがとうございました。




                  48

More Related Content

What's hot

技術トレンディセミナー JavaScriptフレームワーク活用
技術トレンディセミナー JavaScriptフレームワーク活用技術トレンディセミナー JavaScriptフレームワーク活用
技術トレンディセミナー JavaScriptフレームワーク活用
terada
 
【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう
【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう
【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう
devsumi2009
 
Namo Web Solution
Namo Web SolutionNamo Web Solution
Namo Web Solution
benson56
 
【13-B-3】 企業システムをマッシュアップ型に変えるには
【13-B-3】 企業システムをマッシュアップ型に変えるには【13-B-3】 企業システムをマッシュアップ型に変えるには
【13-B-3】 企業システムをマッシュアップ型に変えるには
devsumi2009
 

What's hot (20)

T2 Hacks
T2 HacksT2 Hacks
T2 Hacks
 
Andoroid入門 Open
Andoroid入門  OpenAndoroid入門  Open
Andoroid入門 Open
 
090601-dotplot
090601-dotplot090601-dotplot
090601-dotplot
 
alt属性考
alt属性考alt属性考
alt属性考
 
Google Androidの現在と近未来 ~マッシュアップにより変革するもの~
Google Androidの現在と近未来 ~マッシュアップにより変革するもの~Google Androidの現在と近未来 ~マッシュアップにより変革するもの~
Google Androidの現在と近未来 ~マッシュアップにより変革するもの~
 
Openlink Virtuoso v01
Openlink Virtuoso v01Openlink Virtuoso v01
Openlink Virtuoso v01
 
OpenSocial Panel Discussion (デブサミ2009)
OpenSocial Panel Discussion (デブサミ2009)OpenSocial Panel Discussion (デブサミ2009)
OpenSocial Panel Discussion (デブサミ2009)
 
技術トレンディセミナー JavaScriptフレームワーク活用
技術トレンディセミナー JavaScriptフレームワーク活用技術トレンディセミナー JavaScriptフレームワーク活用
技術トレンディセミナー JavaScriptフレームワーク活用
 
【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう
【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう
【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう
 
PHPUnit+SeleniumによるWebテスト
PHPUnit+SeleniumによるWebテストPHPUnit+SeleniumによるWebテスト
PHPUnit+SeleniumによるWebテスト
 
Windows Mobile de Hello World
Windows Mobile de Hello World Windows Mobile de Hello World
Windows Mobile de Hello World
 
勉強会カンファレンス2009 IT勉強会カレンダーと募集ツール
勉強会カンファレンス2009 IT勉強会カレンダーと募集ツール勉強会カンファレンス2009 IT勉強会カレンダーと募集ツール
勉強会カンファレンス2009 IT勉強会カレンダーと募集ツール
 
Introducing Intalio|BOP (Japanese)
Introducing  Intalio|BOP (Japanese)Introducing  Intalio|BOP (Japanese)
Introducing Intalio|BOP (Japanese)
 
About OSGeo.JP
About OSGeo.JPAbout OSGeo.JP
About OSGeo.JP
 
オープンソースからの高位合成によるORB-SLAM FPGA実装
オープンソースからの高位合成によるORB-SLAM FPGA実装オープンソースからの高位合成によるORB-SLAM FPGA実装
オープンソースからの高位合成によるORB-SLAM FPGA実装
 
Namo Web Solution
Namo Web SolutionNamo Web Solution
Namo Web Solution
 
「ローコード開発プラットフォームのトレンドとMicrosoft Power Platformの概要」
「ローコード開発プラットフォームのトレンドとMicrosoft Power Platformの概要」「ローコード開発プラットフォームのトレンドとMicrosoft Power Platformの概要」
「ローコード開発プラットフォームのトレンドとMicrosoft Power Platformの概要」
 
【13-B-3】 企業システムをマッシュアップ型に変えるには
【13-B-3】 企業システムをマッシュアップ型に変えるには【13-B-3】 企業システムをマッシュアップ型に変えるには
【13-B-3】 企業システムをマッシュアップ型に変えるには
 
Ubuntu オススメ・アプリケーション
Ubuntu オススメ・アプリケーションUbuntu オススメ・アプリケーション
Ubuntu オススメ・アプリケーション
 
34
3434
34
 

More from Tetsuyuki Kobayashi

Simple and efficient way to get the last log using MMAP
Simple and efficient way to get the last log using MMAPSimple and efficient way to get the last log using MMAP
Simple and efficient way to get the last log using MMAP
Tetsuyuki Kobayashi
 
ADB(Android Debug Bridge): How it works?
ADB(Android Debug Bridge): How it works?ADB(Android Debug Bridge): How it works?
ADB(Android Debug Bridge): How it works?
Tetsuyuki Kobayashi
 

More from Tetsuyuki Kobayashi (20)

some topic of ffmpeg
some topic of ffmpeg some topic of ffmpeg
some topic of ffmpeg
 
New VIdeo CODEC AV1
New VIdeo CODEC AV1 New VIdeo CODEC AV1
New VIdeo CODEC AV1
 
Try new transport protocol SRT (ver. 2)
Try new transport protocol SRT  (ver. 2)Try new transport protocol SRT  (ver. 2)
Try new transport protocol SRT (ver. 2)
 
Try new transport protocol SRT
Try new transport protocol SRTTry new transport protocol SRT
Try new transport protocol SRT
 
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
 
WebOS Open Source Edition を試してみた
WebOS Open Source Edition を試してみたWebOS Open Source Edition を試してみた
WebOS Open Source Edition を試してみた
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くLinuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書く
 
組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)
 
組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメ組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメ
 
Tricky implementation of Go ARM soft float
Tricky implementation of Go ARM soft floatTricky implementation of Go ARM soft float
Tricky implementation of Go ARM soft float
 
ARM 64bit has come!
ARM 64bit has come!ARM 64bit has come!
ARM 64bit has come!
 
Virtual memory 20070222-en
Virtual memory 20070222-enVirtual memory 20070222-en
Virtual memory 20070222-en
 
Simple and efficient way to get the last log using MMAP
Simple and efficient way to get the last log using MMAPSimple and efficient way to get the last log using MMAP
Simple and efficient way to get the last log using MMAP
 
Tips of Malloc & Free
Tips of Malloc & FreeTips of Malloc & Free
Tips of Malloc & Free
 
Basic of virtual memory of Linux
Basic of virtual memory of LinuxBasic of virtual memory of Linux
Basic of virtual memory of Linux
 
Patch101
Patch101Patch101
Patch101
 
ADB(Android Debug Bridge): How it works?
ADB(Android Debug Bridge): How it works?ADB(Android Debug Bridge): How it works?
ADB(Android Debug Bridge): How it works?
 
Tweaking Google TV emulator
Tweaking Google TV emulatorTweaking Google TV emulator
Tweaking Google TV emulator
 
Inter-process communication of Android
Inter-process communication of AndroidInter-process communication of Android
Inter-process communication of Android
 
Android is NOT just 'Java on Linux'
Android is NOT just 'Java on Linux'Android is NOT just 'Java on Linux'
Android is NOT just 'Java on Linux'
 

Opensource Android

  • 1. オープンソースなAndroid オ プンソ スなA d id ~ソースが公開されたAndroidを どのように活用するか~ 京都マイクロコンピュータ 小林哲之 1
  • 2. はじめに 年 • 2008年10月22日についにAndroidのソース コードが公開されました。 • Androidに関してはさまざまなトピックがありま すが、今日はソースコードを主題とします。 すが 今日はソ スコ ドを主題とします • 内容は発表者個人の主観に基づいています。 • 正確性については「無保障」です。 ☺ 2
  • 3. Who am I? Who am I? • 組み込み 筋 十年 組み込み一筋N十年。 – リアルタイムOS iTRON – 組み込み向けJava実行環境 – 組み込み向けLinux 組 込 向け – gcc クロスコンパイルツール • ブログ 「組み込みの人 」 「組み込みの人。」 – http://d.hatena.ne.jp/embedded/ • 京都マイクロ ンピ 京都マイクロコンピュータ 2008年3月入社 タ 年 月入社 – http://www.kmckk.co.jp/ 3
  • 4. 本日お話すること Androidの概要について • ソースの概要について • ソ ソースから読み取れること 読 取れる • ソースの活用方法 • まとめ • 4
  • 6. Androidとは 社が主導 た携帯電話 • Google社が主導で開発した携帯電話用ソフト ウェアプラットフォーム。 • 2008年11月にHTC社からAndroid搭載の携帯 電話 “G1” が発売されました。 G1 が発売されました 6
  • 8. Androidプラットフォームの構造 ブラウザ ラウザ GoogleMAP 各種アプリケーション メール ・・・ Java仮想マシン(Dalvik VM) libc Webkit 各種ミドルウェア SQLite OpenGL EL ・・・ Linux Kernel 携帯電話H/W
  • 9. Androidプラットフォームの構造 ブラウザ 各種アプリケーション GoogleMAP Java メール Code ・・・ Java仮想マシン(Dalvik VM) libc Webkit 各種ミドルウェア SQLite ARM OpenGL EL Code ・・・ Linux Kernel 携帯電話ハードウェア
  • 10. Androidプラットフォ ムの構造 Androidプラットフォームの構造 シミュレータの場合 ブラウザ 各種アプリケーション GoogleMAP Java メール Code ・・・ Java仮想マシン(Dalvik VM) libc Webkit 各種ミドルウェア SQLite ARM OpenGL EL Code ・・・ Linux Kernel QEMUシミュレータ x86 Code Windows 
  • 11. プラットフォームとしての特徴 • オ プンソ ス オープンソース – 殆ど全てのソースコードが開示されました カ ネルのみを使用 • Linuxカーネルのみを使用 – libcやルートファイルシステムは、通常の組み込みLinuxで 使われている物と異なる • アプリケーションレイヤはJavaで開発 – ネイティブコ ドで記述されたミドルウ アと 上位アプリ ネイティブコードで記述されたミドルウェアと、上位アプリ ケーションの分離 QEMUシミュレ タの採用 • QEMUシミュレータの採用 – PC上でARM CPUのバイナリ互換を実現
  • 12. • ソースの概要について ソ スの概要に いて 12
  • 13. ソースのある場所 • ここ – http://source.android.com/ p // / • gitとそのラッパースクリプト(repo)を使用して ソースをダウンロードする。 ソ スをダウンロ ドする – Googleのアカウント(GMAIL)が必要。無償。 • ブラウザで閲覧するならここ – http://git source android com/ http://git.source.android.com/ 13
  • 14. 何が含まれている? d id S を再ビルドに必要なものが全て • Android SDKを再ビルドに必要なものが全て。 • Linux カーネル、デバイスドライバ、標準Cライブラリ、 コンパイラツールチェイン、Dalvik VM、2D/3Dグラフィッ コンパイラツ ルチ イン D l ik VM 2D/3Dグラフィッ クライブラリ、コーデック、アプリケーションフレーム ワ ク、webkit(WEBブラウザ)、 ワーク webkit(WEBブラウザ) .... • ただし、MAPアプリケーションは含まれていない。 HTC G1のソース? (デフォルトではダウンロードされないがリポジトリに存 • 在する。けっこう頻繁に更新。) – kernel/msm.git – platform/hardware/msm7k.git – platform/vender/htc/dream.git 14
  • 15. 全てのソースがあるのか? • コンパイラツールチェインと一部のライブラリ はバイナリで入っている。 – $(TOP)/prebuilt 以下 • それらをリビルドするために必要なソ スの それらをリビルドするために必要なソースの ありかが明記されている。 – 各ディレクトリのREBUILTというファイルに 15
  • 16. 全部で何行? • ダウンロードしたファイルのうち、ファイル名の 末尾が .c .h .cpp .S .java のものだけを選んで pp j wc –l でカウントすると 約1600万行。 • このうちLinux kernelのソ スコ ドを除くと kernelのソースコードを除くと 約770 万行。 • 詳細は http://d.hatena.ne.jp/embedded/20081127/p1 16
  • 17. Androidでの新規ソースは? たくさ プ 成 • Androidではたくさんのオープンソースの成果 を利用している。 • では、Androidで新規に起こされたファイルは どのくらいの規模か? • /Copyright.*Android/ というパターンのある ファイルだけを集計すると約160万行。 • 詳細 http://d.hatena.ne.jp/embedded/20081130/p1 17
  • 18. ライセンス条件は? • 基本 基本はApache 2.0 • 多数のオープンソースの成果を利用している 多数のオ プンソ スの成果を利用している ので、それはそれぞれのライセンス条件 • モジ モジュールごとに MODULE_LICENSE_*** とい ルごとに *** とい うファイルがあり、簡単に確認できるように整 備されている。 • また それぞれライセンス表示のための また、それぞれライセンス表示のための NOTICEというファイルがおかれている。 18
  • 19. $ find . -name quot;MODULE_LICENSE_*“ ./system/extras/showmap/MODULE_LICENSE_APACHE2 ./system/extras/showslab/MODULE_LICENSE_APACHE2 ./system/extras/librank/MODULE_LICENSE_APACHE2 ./system/extras/procrank/MODULE_LICENSE_APACHE2 /system/extras/procrank/MODULE LICENSE APACHE2 ./system/extras/latencytop/MODULE_LICENSE_APACHE2 ... $ fi d . -name quot; find quot;MODULE_LICENSE_*quot; | d ' ^ */ *quot; |sed 's,^.*/,, ' |sort |uniq -c |sort -r 117 MODULE_LICENSE_APACHE2 24 MODULE_LICENSE_BSD_LIKE 11 MODULE_LICENSE_BSD 10 MODULE_LICENSE_GPL 9 MODULE_LICENSE_EPL 7 MODULE LICENSE LGPL MODULE_LICENSE_LGPL 4 MODULE_LICENSE_PUBLIC_DOMAIN 4 MODULE_LICENSE_LGPL_AND_GPL 2 MODULE_LICENSE_CPL 1 MODULE_LICENSE_W3C 1 MODULE_LICENSE_OSL1 1 MODULE_LICENSE_MIT 1 MODULE LICENSE HP MODULE_LICENSE_HP 1 MODULE_LICENSE_AFL_AND_GPL 19
  • 20. ちなみにGPLのものは $ find . -name quot;MODULE_LICENSE_*quot; |grep GPL ./external/iptables/MODULE_LICENSE_GPL ./external/elfcopy/MODULE_LICENSE_GPL ./external/jdiff/MODULE_LICENSE_LGPL ./external/jdiff/MODULE LICENSE LGPL ./external/yaffs2/MODULE_LICENSE_GPL ./external/qemu/MODULE_LICENSE_GPL ./external/webkit/WebCore/MODULE_LICENSE_LGPL ./external/dbus/MODULE_LICENSE_AFL_AND_GPL ./external/dbus/MODULE LICENSE AFL AND GPL ./external/oprofile/MODULE_LICENSE_GPL ./prebuilt/windows/sdl/MODULE_LICENSE_LGPL ./prebuilt/windows/ccache/MODULE_LICENSE_GPL ./p ebu t/da w ./prebuilt/darwin-x86/sdl/MODULE_LICENSE_LGPL 86/sd / O U CS G ./prebuilt/darwin-x86/toolchain/i686-apple-darwin8- 4.0.1/MODULE_LICENSE_LGPL_AND_GPL ./prebuilt/darwin-x86/toolchain/arm-eabi-4.2.1/MODULE_LICENSE_LGPL_AND_GPL ./prebuilt/darwin-x86/ccache/MODULE_LICENSE_GPL /p / / / ./prebuilt/darwin-x86/make/MODULE_LICENSE_GPL ./prebuilt/common/jfreechart/MODULE_LICENSE_LGPL ./prebuilt/common/swing-worker/MODULE_LICENSE_LGPL ./prebuilt/common/netbeans-visual/MODULE_LICENSE_GPL /p / / / ./prebuilt/linux-x86/sdl/MODULE_LICENSE_LGPL ./prebuilt/linux-x86/toolchain/i686-linux-gnu- 3.4.6/MODULE_LICENSE_LGPL_AND_GPL ./prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/MODULE_LICENSE_LGPL_AND_GPL /p / / / / ./prebuilt/linux-x86/ccache/MODULE_LICENSE_GPL 20
  • 21. ビルドのしかた ( b t ) M OS(i t l)でのビルドがサポ トされ • Li Linux (ubuntu), MacOS(intel)でのビルドがサポートされ ている。 – http://source.android.com/download – 他に必要なライブラリ – sudo apt‐get install zlib1g‐dev libncruses5‐dev unzip • 手軽な方法 – VMWare 上にubuntu 8 04 i386をクリ ンインスト ル 8.04 i386をクリーンインストール – 無料のVMWare player利用可能 – ビルド時間 40分くらい? 0分くらい • 困った時はネットで検索。☺ • make sdk でSDK一式が再ビルド。 21
  • 22. ビルドのTips ド 表 • make showcommands でコマンドライン表示 • ccache を使うためには環境変数 ccache を使うためには環境変数 USE_CCACHE=1 環境ではデフ ルト設定が無難 • VMWare環境ではデフォルト設定が無難 (512MBメモリ、プロセッサ1個) • make sdk – JDK6でなくJDK5でないとjavadocでエラ になる JDK6でなくJDK5でないとjavadocでエラーになる 22
  • 23. 移植性? • タ ゲットCPUはARMのみだ たが 2008年12月のアッ ターゲットCPUはARMのみだったが プデートでx86向けのビルドが追加された。 – armv5t (ARM926以降、Xscale) armv5t (ARM926以降、Xscale) • パス名に’arm’を含むファイルが多いもの bionic – dalvik – external/opencore – external/sonivox – external/qemu – external/openssl – • これらの移植に目途がつけば、他のCPUでもいけそう。 23
  • 24. 移植性?: Bionic 移植性?: Bionic • 標準ライブラリとランタイムロ ダ 標準ライブラリとランタイムローダ – libc, libm, libdl, libthread_db, linker • F BSD O FreeBSD, OpenBSD, NetBSDからのファイルをベー BSD N tBSDからのファイルをベ スにしているようだ。 • アセンブラで書いてあるのは – カーネルのシステムコール呼び出し部分 – memcpyなどのアセンブラ版 • 現在はARM,x86用のものしかないが、同じように *BSDから持ってくれば他のCPU用のものも準備 BSDから持ってくれば他のCPU用のものも準備 できそう。 24
  • 25. 移植性?: Dalvik VM 移植性?: Dalvik VM ドのインタプリタが何種類か用意され • DXコードのインタプリタが何種類か用意され ている。 – 高速版 (アセンブラで書かれている) – 移植用 (Cで書かれている) ( – デバッグ用、プロファイル用 • それ以外のARM依存ファイルはABIを定義し ているファイルのみ。 • とりあえずC版インタプリタを使えば移植は簡 単? 25
  • 26. 互換性テスト • 各モジュールに単体テスト用のファイルらしき ものがあるが、システム全体に渡る互換性は ものがあるが システム全体に渡る互換性は どうなるのだろう... ? どうなるのだろう ? • キラーアプリ、キラーデバイスによるデファク キラ アプリ、キラ デバイスによるデファク トスタンダード? • サブセット化OK? 26
  • 27. ここまでの感想 • 「本当に 全部のソ スが公開された 「本当に」全部のソースが公開された。 – iPhone との最大の違い。 • 扱いやすいライセンス。 • 用途は携帯電話に限定されない。 用途 携帯電話 限定されな 。 • まさに、Google 太っ腹!ここから直接収益を上 げることは全く考えていないようだ。「どうぞ、 げることは全く考えていないようだ。「どうぞ 使ってください」という感じ。 • 組み込みLinuxのメジャーなディストリビューショ 組み込みLinuxのメジャ なディストリビュ ショ ンになるかも。 27
  • 28. • ソースから読み取れること ソ スから読み取れる と 28
  • 29. Bionic(標準Cライブラリ) 制約事 • CAVEATS(制約事項) – $(TOP)/bionic/libc/CAVEATS $( )/ // – 基本はPOSIX準拠だが... – C++の例外をサポ トしない 組み込みシステム C++の例外をサポートしない。組み込みシステム ではひどく遅いコードになるから。 h dのキ ンセル機能はサポ トしない – pthreadのキャンセル機能はサポートしない。 – ロケールやワイドキャラクタはサポートしない。国 際化対応には代わりにICUを使う。 29
  • 30. AndroidでのC++プログラミングの制限 • 例外は使用できない 例外は使用できない。 – newはmallocと同等。 – メモリがないときはNULLを返す。 • 実行時型情報は使用できない。 – type_info は空実装。 – pure virtual functionは使用できない。 • STL(標準テンプレートライブラリ)は使用できない。 – Vector.h, List.h はframeworks/base/include/utils にある。 • コンパイル時にはオプション –fno‐exceptions – fno‐rtti をつける。 30
  • 31. libstdc++ の中身はたったこれだけ libstdc++ の中身はたったこれだけ。 $ nm -C out/target/product/generic/symbols/system/lib/libstdc++.so |grep ' [TDRB] ' 000019dd T type_info::type_info(type_info const&) 000019a5 T type_info::type_info() type info::type info() 000019dd T type_info::type_info(type_info const&) 000019a5 T type_info::type_info() 000019f5 T type_info::~type_info() 00001a19 T type_info::~type_info() 00001a19 T type_info::~type_info() i i 000019bd T type_info::name() const 000019d9 T type_info::before(type_info const&) const 000019d1 T type_info::operator==(type_info const&) const 000019d5 T type_info::operator!=(type_info const&) const 00001a30 R std::nothrow 00002000 D vtable for type_info 0000192d T operator delete[](void*) 0000190d T operator delete[](void*, std::nothrow_t const&) 0000193d T operator delete(void ) delete(void*) 0000191d T operator delete(void*, std::nothrow_t const&) 00001965 T operator new[](unsigned int) 0000194d T operator new[](unsigned int, std::nothrow_t const&) 00001971 T operator new(unsigned int) 00001959 T operator new(unsigned int, std::nothrow_t const&) t ( i dit td th t t) 0000189d T __cxa_guard_abort 000018d9 T __cxa_guard_acquire 000018b5 T __cxa_guard_release 0000197d T __cxa_pure_virtual __ _ _ $ 31
  • 32. ダイナミックリンク • linker – ld.so ではない。Android 新規設計。 – libdlの機能はある。 dlsym, dlopen • prelink (apriori) prelink (apriori)  – ライブラリを固定アドレスにマッピング • build/core/prelink linux arm map build/core/prelink‐linux‐arm.map – 実行ファイル(executable)はprelinkしてない – 起動高速化というより共有メモリの効率化のため? • stripコマンドの代わりにsoslimコマンド 32
  • 33. 各ライブラリの配置アドレス $ cat build/core/prelink-linux-arm.map # 0xC0000000 - 0xFFFFFFFF Kernel # 0xB0100000 - 0xBFFFFFFF Thread 0 Stack # 0xB0000000 - 0xB00FFFFF Linker # 0xA0000000 - 0xBFFFFFFF Prelinked System Libraries # 0x90000000 - 0x9FFFFFFF Prelinked App Libraries # 0x80000000 - 0x8FFFFFFF Non-prelinked Libraries i i i # 0x40000000 - 0x7FFFFFFF mmap'd stuff # 0x10000000 - 0x3FFFFFFF Thread Stacks # 0x00000000 - 0x0FFFFFFF .text / .data / heap # core system libraries libdl.so 0xAFF00000 libc.so 0xAFE00000 libstdc++.so 0xAFD00000 libm.so libm so 0xAFC00000 liblog.so 0xAFBC0000 libcutils.so 0xAFB00000 libthread_db.so 0xAFA00000 libz.so 0xAF900000 libevent.so lib t 0xAF800000 0 AF800000 libssl.so 0xAF700000 libcrypto.so 0xAF500000 .... 33
  • 34. Dalvik • クラスライブラリはHarmonyプロジェクトの成 ブ プジ 成 果。(既存のCLASSPATHプロジェクトだとGPL) ( ) • アプリ起動時、zygoteというプロセスからfork  され、新しいプロセスのmainメソッドをDalvik  され 新しいプロセスのmainメソッドをDalvik VMのレベルでインボークされる。exec システ ムコールは使用していない。 ム は使用していない – なるべく多くの共有メモリをzygoteから引き継ぐ。 yg – アプリ起動時間の短縮にもなる。 34
  • 35. DXコードインタプリタ 装備 な • JIT(Just In Time compiler)は装備していない。 • 複数のインタープリタ実装 複数のインタ プリタ実装 – 高速版 (ARMのアセンブラで書いてある。) – デバ グ プロフ イル用 デバッグ、プロファイル用 – 移植用 (C言語で書いてある。) • ARMアセンブラではFPU命令が使われてい ない。(ARM1136jf向けにチュ ンする余地) ない (ARM1136jf向けにチューンする余地) 35
  • 36. Linux Kernel Linux Kernel • 2.6.27  • Android特有の部分 – binder – ashmem • ユーザー空間デバイスドライバ? ザ 空間デバイスドライバ? – libhardware 36
  • 37. binder •ププロセス間通信 • OpenBinder org のものをベースにしてい OpenBinder.org のものをベースにしてい たが今は互換性はない。 • Androidのアプリケーションフレームワー クの根幹をなす。 クの根幹をなす • 上位層は AIDL につながっている。 AIDL に ながっている。 37
  • 38. ashmem • Android / Anonymous SHared MEMory subsystem • $(TOP)/system/core/cutils/ashmem.h int ashmem_create_region(const char *name, size_t size) → returns fd – int ashmem_set_prot_region(int fd, int prot) – int ashmem_p _region(int fd, size_t offset, size_t len) pin g ( , , ) – int ashmem_unpin_region(int fd, size_t offset, size_t len) – • ‘pin’ していないメモリはカーネルが回収して再利用 • Javaの weak reference に似ている概念。キャッシュ の実装に便利。 実装 便利。 • Javaから利用するときはandroid.os.MemoryFile 38
  • 39. • ソースの活用方法 ソ スの活用方法 39
  • 40. ソースの活用方法 大部分 • Androidのソースの大部分はApachライセンス で改変は自由。あらゆる活用方法が考えられ 改変 自由。あらゆる活用方法 考 られ る。 – 自分の製品にそのまま移植して アプリケーショ 自分の製品にそのまま移植して、アプリケーショ ンをJava言語で開発する。 – 分解して必要な部分だけ使用する 分解して必要な部分だけ使用する。 • いずれにせよ、ソースから学べることは多い。 40
  • 41. Androidを部分的に利用するとしたら • 最小システムで使う 使う カ ネル , 標準 ライ ラリだけ – Linuxカーネルとinit, toolbox, 標準Cライブラリだけ , – グラフィックスやDalvik VMをはずしてしまう • 最小システム + スクリプト言語 スクリプト言語 – 例えば ruby。 C言語で実装されているものならば 移植は難しくない。 41
  • 42. Dalvik VMを他のOSに移植? Dalvik VMを他のOSに移植? 自身は があれば移植でき • Dalvik VM自身はPOSIX APIがあれば移植でき lk そう。 • アプリケーションのフレームワークはbinderに 強 依存 強く依存している。binderはLinuxカーネルのド 。 ライバとして実装されていてGPLライセンス。 Android独自のカ ネルドライバ • Android独自のカーネルドライバ binderや ashmem をGPL以外のOSに移植するにはスク ラッチから互換性のあるものを作る必要があ る。 42
  • 44. Androidの強み: 過去のしがらみがない • 現在またはこの先利用できる技術を前提 – メモリ, CPUはJavaを動かすのに十分ある。 • アプリケーションは全てJavaで書く アプリケーションは全てJavaで書く。 • アプリケーションフレームワークはJavaで統一されてネイティ ブアプリケーションとの競合を考慮しなくてよい。 は 固定 – OSはLinux固定。 • 仮想メモリシステムを活用。 – GPUによる高速3D描画 GPUによる高速3D描画。 • 2DグラフィックスもOpenGLで。そのため2Dと3Dの重ね合わ せの問題を考慮しなくてよい。 – 無料 無料のWiFi, 定額制の3Gパケット通信。 定額制 パケ 通信 • バックグランドでシームレスにネットワークの切り替え。 44
  • 45. Androidの強み: オープンソースであること • 特別な契約なしで誰でもソースを見ることが できる。 • Apacheライセンスは商用利用で扱いやすい。 • 無償のツ ルだけでビルド環境を構築できる 無償のツールだけでビルド環境を構築できる。 • このため世界中の優秀な技術者でにぎわう。 • にぎわう技術は急速に進歩する。 ぎわう技術は急速 進歩する 45
  • 46. Androidのインパクト •組組み込みシステム開発にAndroidの与えるイ 与る ンパクトは少なくないだろう。 • 直接的インパクト – A d idを採用しての製品開発 Androidを採用しての製品開発 – Androidソースの部分利用 • 間接的インパクト – 他の組み込みプラットフォームもソース公開の流 れに 46
  • 47. オープンソース • 組み込みソフト開発でもオープンソースを避 けて通ることができなくなった。 • ソースは無償で入手できるが、それを読み解 き、活用するためには技術力が必要。 き 活用するためには技術力が必要 • 技術力の向上にはまず情報交換を。 • 日本A d idの会 日本Androidの会 – http://www.android‐group.jp/index.php?FrontPage 47