2010年9月22日水曜日

android ソースコード取得と参照

Eclipse から android のソースを参照できるようにしました。

その手順をメモしておきます。

ちなみに、環境は Windows Vista Ultimate SP2 32bit です。

android 2.2 のソースを参照できるようにしました。

  1. Cygwin 入手
    以下のサイトより、setup.exe をダウンロード。

    http://www.cygwin.com/

  2. Cygwin 導入
    setup.exe を実行。
    パッケージ選択画面で、以下の 9 つについて、Bin? 列にチェックを入れる。

    Archive > zip: Info-ZIP compression utility
    Devel > bison: A parser generator that is compatible with YACC
    Devel > flex: A fast lexical analyzer generator
    Devel > git: Fast Version Control System - core files
    Devel > gperf: Perfect fash function generator
    Devel > ruby: Interpreted object-oriented scripting language
    Python > python: Python language interpeter
    Util > gnupg: GNU's tool for secure communication and data storage
    Web > curl: Multi-protocol file transfer command-line tool

  1. repo スクリプトのダウンロード
    Cygwin を起動し、curl コマンド使ってダウンロードします。

    $ cd ~
    $ mkdir bin
    $ curl http://android.git.kernel.org/repo >~/bin/repo
    $ chmod a+x ~/bin/repo

  2. ダウンロードするバージョンを確認
    repo init コマンドの -b で指定する値を確認します。
    tags に欄にある名称が指定できるようです。

    http://android.git.kernel.org/?p=platform/manifest.git;a=summary


  1. repo init 実行

    $ cd ~
    $ mkdir android_src
    $ cd android_src
    $ ~/bin/repo init -u git://android.git.kernel.org/platform/manifest.git -b android-sdk-2.2_r2

    が、エラーとなりました。。

          3 [main] python 4860 C:\myprog\cygwin\bin\python.exe: *** fatal error - unable to
    remap \\?\C:\myprog\cygwin\lib\p
    ython2.6\lib-dynload\time.dll to same address as parent: 0x380000 != 0x3B0000
    Stack trace:
    Frame     Function  Args
    00229CC8  6102749B  (00229CC8, 00000000, 00000000, 00000000)
    00229FB8  6102749B  (61177B80, 00008000, 00000000, 61179977)
    0022AFE8  61004AFB  (611A136C, 6123FC1C, 00380000, 003B0000)
    End of stack trace
          3 [main] python 7144 fork: child 4860 - died waiting for dll loading, errno 11
    Traceback (most recent call last):


    いろいろとググってみた結果、
    以下の手順で回避できました。

    a. 全ての Cygwin を停止。
    b. コマンド・プロンプトを起動し、以下を実行。
    > cd <Cygwin導入フォルダ>\bin
    > ash.exe
    $ /usr/bin/rebaseall


    再度、repo init 実行。
    途中に、メールアドレスの入力が求められます。
    それと、カラー表示の有無が問われるので、Y と答えておきました。

    実行が完了すると、.repo ディレクトリが作成されています。

    $ ls -la
    total 8
    drwxr-xr-x+ 1 xxxx None    0 2010-09-22 18:23 .
    drwxr-xr-x+ 1 xxxx None 4096 2010-09-22 18:40 ..
    drwxr-xr-x+ 1 xxxx None 4096 2010-09-22 18:40 .repo

    $

  2. ソースコード取得
    .repo ディレクトリが存在する場所で、repo sync を実行します。

    $ cd android_src
    $ ~/bin/repo sync

    ソースのダウンロードが開始されます。
    完了するまでに相当かかりますので、気長に待ちましょう。

  3. sources 作成
    ダウンロードしたソースは、ばらばらに配置されているので、ひとまとめにします。

    development/ide/eclipse/.classpath というファイルの中を見ると、
    <classpathentry kind="src" path="packages/apps/AccountsAndSyncSettings/src"/>
    といった行が複数あるので、このなかで kind="src" となっている path のディレクトリを
    ひとまとめにすればよいようです。

    但し、path が out/~ で始まるものはサンプルのソースだったりするようなので、
    これは除外するようにします。

    ということで、Cygwin で以下を実行します。

    $ cd android_src
    $ mkdir ../sources
    $ awk '{if($2=="kind=\"src\""){print $3}}' development/ide/eclipse/.classpath | awk -F\" '{print $2}' | grep -v ^out | while read SRC
    do
    if [ -d $SRC ]; then
        echo "copy $SRC/* --> ../sources"
        cp -R $SRC/* ../sources
    fi
    done
    $
    

    作成された sources ディレクトリを丸ごと、
    <android導入フォルダ>\platforms\android-8 に移動します。

    これで Eclipse からソースが参照できるようになります。

  4. 確認
    Eclipse が起動していたら、再起動します。

    試しに、あるソース・ファイルから、ListActivity を選択して、
    F3 (Open Declaration) を押すと、ソースが見られるようになりました~