Raspberry Farad このページをアンテナに追加 RSSフィード

2009-05-07

Android のビルド

私のマシンでフルビルドが2時間弱、これは早いのだろうか??

Cygwin での Android ビルドにはまだ対応していないらしい。


コンパイル開始】

makefileダウンロードされているディレクトリで行う。

$ cd ~/mydroid

$ make


コンパイルに失敗した場合は以下。

$ make -clean

$ make


=>ビルドに成功すると、

 ~/mydroid/out/

 にファイルが生成される。

 また、

 ~/mydroid/out/target/product/generic/

 にイメージファイル「ramdisk.img」「system.img」「userdata.img」

 が生成される。これらを Android-SDK

 ~/platforms/android-1.5/images/

 にある同名のイメージファイルと差し替えることで、

 コンパイルしたバイナリエミュレータ上で使用することが出来る。


※もしも、ビルドエラーが出てしまうのなら、

 以下のライブラリを追加してみてほしい。


$ sudo apt-get install zlib1g-dev libncurses-dev


Windows ( Cygwin ) で Android ソースを取得

詳しくは前回の記事 Linux 版ソース入手方法を参照してほしい。


【1. Cygwin + Gitインストール

http://www.cygwin.com/

Cygwin インストーラの Category 中「Devel」に Git があるので、

忘れずにインストールすること(Git は 1.5.4 以上が必要)。


【2. Repo のインストール

$ mkdir /cygdrive/c/android/bin

$ cd /cygdrive/c/android/bin

$ curl http://android.git.kernel.org/repo > /cygdrive/c/android/bin/repo

$ chmod a+x /cygdrive/c/android/bin/repo


【3. Repo の初期化

$ mkdir /cygdrive/c/android/mydroid/

$ cd /cygdrive/c/android/mydroid/

$ /cygdrive/c/android/bin/repo init -u git://android.git.kernel.org/platform/manifest.git


YourName と Gmail アカウントを入力。

もしくは無入力でも構わない(Enter で次へ)。

これらの情報はソースのコミット時に必要となる。

後で以下のコマンドでも登録が可能だ。


$ git config --global user.email "XXX@gmail.com"

$ git config --global user.name "Xxx Xxx"


【4. Android ソースの取得】

$ cd /cygdrive/c/android/mydroid

$ /cygdrive/c/android/bin/repo sync


これでソースの取得が出来た。


Android ソースの入手

その前に、Linux コマンドは以下が分かりやすい(かも)。

http://www.k-tanaka.net/unix/


【1. Gitインストール

$ sudo apt-get install git-core gnupg


Git

 Linux カーネル用分散バージョン管理システム

 Android のソースは Git で管理されている


【2. JDKインストール

既にインストールされていれば飛ばしてもらって構わない。

Java のバージョン確認は「$ java -version」


$ sudo apt-get install sun-java6-jdk


【3. Androidビルドに必要なパッケージ類のインストール

$ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev


flex:字句解析器

bison:構文解析

gperf:一部から完全ハッシュ関数を作るツール

curl:対話的なウェヴコンテンツ用のプログラミング言語

build-essential:gcc や make などの基本開発ツール

...


【4. Valgrind のインストール

$ sudo apt-get install valgrind


※ Valgrind:

メモリリークスタック汚染、配列オーバーなどの

メモリ周りのバグをチェックする為のツール


【5. Repo のインストール

ダウンロードディレクトリを作成し、そこへダウンロードが完了したら、

Repo に実行可能権限を付与する。


$ mkdir ~/bin

$ cd ~/bin

$ curl http://android.git.kernel.org/repo > ~/bin/repo

$ chmod a+x ~/bin/repo


※ Repo:

Git を補完するツール(スクリプト)、複数の Git レポジトリを管理する

(普通は、メインレポジトリに対して外部レポジトリを追加するが、

 Repo は初めから複数を管理することが出来る)


【6. Repo の初期化

作業用ディレクトリを作成し、そこで Repo を初期化する。


$ mkdir ~/mydroid

$ cd ~/mydroid

$ repo init -u git://android.git.kernel.org/platform/manifest.git


「repo initialized in /mydroid」と出力されたら初期化成功。

YourName と Gmail アカウントを要求される。

が、無入力でも構わない(Enter で次へ)。

これらの情報はソースのコミット時に必要となる。

後で以下のコマンドでも登録が可能だ。


$ git config --global user.email "XXX@gmail.com"

$ git config --global user.name "Xxx Xxx"


【7. Android ソースの取得】

Repo を初期化した作業用ディレクトリへ移動し、ダウンロードを開始する。


$ cd ~/mydroid

$ repo sync


これで Android のソースが手に入った。


※もしも、この後のビルドでエラーが出てしまったら、

 以下のライブラリを追加してみてほしい。


$ sudo apt-get install zlib1g-dev libncurses-dev


Intent のコンストラクタ

■ Intent のコンストラクタ

[1] Intent();

[2] Intent( Intent o );

[3] Intent( String action );

[4] Intent( String action, Uri uri );

[5] Intent( Context packageContext, Class cls );

[6] Intent( String action, Uri uri, Context packageContext, Class cls );


■ Intent 利用のサンプル ■

Action/Data で Intentを構成して Activity を起動するスタイルは、

とても分かりやすく、プログラム的にもやさしい。

Data 部分の「Content URI」は、Android プログラミングの基本要素だ。


[1] 電話帳からピックアップする

Intent myintent = new Intent( Intent.ACTION_PICK, Uri.parse("content://contacts/people") );

startActivity( myintent );


[2] 電話帳の一人の情報を編集する

Intent myintent = new Intent( Intent.ACTION_EDIT, Uri.parse("content://contacts/people/1") );

startActivity( myintent );


[3] Google Map を表示する

String address = addressfield.getText().toString();

address = address.replace( ' ', '+' );

Intent myIntent = new Intent( Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=" + address) );

startActivity( myIntent );


[4] Web ページを表示する

Intent myintent = new Intent( Intent.ACTION_WEB_SEARCH, Uri.parse("http://www.google.co.jp/ig?hl=ja") );

startActivity( myintent );


[5] 同アプリケーション内の Activity 遷移

Intent i = new Intent( this, NoteEdit.class );

startActivity( i );


Intent i = new Intent( this, NoteEdit.class );

i.putExtra( NotesDbAdapter.KEY_ROWID, id );

startActivity( i );