jumble

アクセスカウンタ

zoom RSS Android ビルド

<<   作成日時 : 2011/02/13 15:21   >>

ブログ気持玉 0 / トラックバック 3 / コメント 0

Android ビルド


最近、Androidの大波が来ているようだ。
Java使いの自分としてもやらない訳にはいかない、ということで3・4ヵ月前から手を付け始めた。
ベースがJavaで、かつレイアウトとしてXMLを使うこともでき、なるほどアプリの開発はやりやすい。
が、コアとなるライブラリのバグには少々閉口している。
特にスクロールバー周りにかなりバグがある。
そもそも垂直方向と水平方向で個別で指定できる性質とできない性質があり、設計自体がおかしい気がする。
ということで、3件ほどAndroidの公式バグレポートに挙げておいた。
そのうちの1件はこれ
もう1件がこれ
これら2件は、すぐに修正し、将来のリリースでは解決されているという、"FutureRelease"になった。
これはテストすればすぐ出るし、開発者なら原因もすぐ分かるし、修正もすぐできるだろうという、超基本的なバグである。
まあそれはよかったのだが、あとの一件は"WorkingAsIntended"、いわゆる”仕様通り”にされた。
それがこれ
英語が苦手なのでうまく伝わらなかったのかもしれないが、ろくにテストもせずに判断しているとしか思えない。
頭に来たので、今度は画像もつけて再度投稿したのだが、今度はコメントなしでWorkingAsIntendedである。
それがこれ
忙しいからなんだろうが、感じ悪いね。
他の人のレポートを見ても、きちんとした対処をしていないものがかなり多い気がする。
romain...@android.com君、君はクビだ。物事を理解する力量がない。
上のバグレポートの内容は気が向いたら書くことにするが、今回はそれがテーマではない。
しつこいのだが、3件目についてはパッチを提出してやろうかと思う。
当然そのためにはAndroidのソースを取得して修正し、ローカルの環境でテストしなければならない。
よってビルドしなければならないのだ。
ソースコードを取得して読むだけならまだしも、ビルドしてテストとなるとすごく面倒なのは目に見えている。
何が面倒って、なかなかうまくいかないだろうから、調べるのに時間がかかるのだ。
その挙句、自分のマシンでは不可能だったりすると、精神的なダメージが大きい。
なのでやりたくなかったのだが、しょうがない。
覚悟を決めてビルドすることにした。
面倒臭いが、そういうことを乗り越えることで技術力は向上していくのだと思う。

OSの選択


現在の最新バージョン(?)のGingerbread(android 2.3)から、ビルドするためには64bit環境が必要らしい。
試しに32bit環境でやってみたら、やっぱりできない。
裏技でやる方法もあるみたいなのだがやめた。
情報が少ないし、何より遅いから64bit限定にしたと思われるから。
ということで、慣れていることもありFedoraの最新14の64bit版をインストールすることにした。
幸い、CPUは64bit対応だ。最近のはほとんどそうだと思うが。
今まではFedora 12を主に開発で使用していた。
まあまあ快適で、新しいのを入れようという気もおこらなかったのだが、いい機会だと思った。
ちなみにWindowsでのビルドは提供していないようだ。
自分は、開発は全てLinux上なので全く問題ない。
開発においては、WindowsよりLinuxのほうがはるかに便利である。
確かに、Windowsはダブルクリック1回で様々なソフトがインストールできるので一見便利だ。
ただし、最近のLinuxはyum(Red Hat系)やapt-get(debian系)があり、実はWindowsより便利、かつ無料。
Windowsは高い、遅い、(レジストリという邪悪な仕組みによって)ソフトの管理が自由にできない。
一見便利なダブルクリックによるインストールも、何回も繰り返して実行する場合は実は不便。
コマンドをshellとして記述できるLinux(Unix系を含む)の方がはるかに効率的だ。
ということでAndroidのビルドを機に、(少なくとも開発が出来るくらいの人は)LinuxでできるものはLinuxでやりましょう。
さて、Fedora 14のインストールだが12と大きく変わったこともなく、以前苦しんだキーボードやマウス周りの不具合もなさそう。
だったが、結局諦めた。
Googleはビルドは64bit限定にしておきながら、Android SDKは32bit用しか提供していないのだ。
おい!
ということで、通常の開発では32it用のライブラリが必要になる。
で用意しようと思ったのだが、そこで諦めた。
Ubuntuならapt-get install ia32-libs一発でOKらしい。
で、Fedoraもyumで簡単にできると思ったのだが、それができないのだ。
簡単な方法を探すことができなかった。
こんなページを見ると途端にやる気がなくなった。

ということで結局Ubuntuを使うことにした。
そもそも、Googleの公式サイトはUbuntuをターゲットにしているので、どう考えてもその方が楽そうだ。
今までdebian系はあまり使ったことがない。
Ubuntuもシェアがダントツなのは知ってたが、デザインもあまり好きじゃなかったし、何となく使ってなかった。
がデザインは後から変更できるし、特に嫌う理由もない。
実際使ってみると、使い勝手がLinux同士で大きく変わる訳でもない。
なかなか快適だ。ただ、ブート時にたまにマウスがストールする時がある。
Ubuntu君、治してね。
ダウンロードはここから。
バージョンは、Ubuntu 10.10の64-bit、ファイル名はubuntu-10.10-desktop-amd64.iso。
amdなんてついてるのでintel CPUだとダメなのかと思ってしまうじゃないか。
でもこれでOK。

Ubuntuはインストール時にスーパーユーザーのパスワードを決めることができない。
自分はいちいちsudoをつけての操作はいやなので、まずはsudo passwdでスーパーユーザーのパスワードを設定する。

スーパーユーザーでの準備


ここでの以下の操作はスーパーユーザーで。

Javaのインストール


Linux 64bit版のJDK 6をインストール。
具体的なやり方はここには書かない。
apt-getで簡単にできると思うが、自分はバイナリ展開から行っている。
ちなみに、Froyo(2.2)以前はJDK 5が必要らしい。
いまさらJavaをダウングレードしなければいけないのもやる気が起きない原因だった。
でもGingerbread(2.3)以降はJDK 6になりその分楽になった。
いまさらFroyo以前のビルドをやる気はないのでJDK 6だけを入れてある。

ライブラリのインストール


apt-get -y install ia32-libs
apt-get -y install git-core
apt-get -y install python
apt-get -y install gnupg flex bison gperf build-essential zlib1g-dev gcc-multilib g++-multilib
apt-get -y install libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev

apt-getを分けているのは特に意味はない。
上3つは役割が分かっているもので、それ以外はあまり知らない。
あまり長いと見にくいから分けただけ。
資料はここの前半あたり。

通常のアプリ開発のための準備


Eclipse、android-sdk、ADTをインストール。
ここには書かない。
ADTも、Eclipseでヘルプ > 新規ソフトウェアのインストール... からインストールする方法が広く紹介されている。
が、何回も失敗しながら繰り返す場合、実はこのやり方はかなり不便。
ADT_xxx.zipをダウンロードして、Eclipseのインストールフォルダに展開する方がはるかに早いし確実。
確かにWindowsだとshellが貧弱なのでそういうことがやりにくいかもしれない。
Linuxだとshellスクリプトを作れば一発でできる。
ようするに初回は苦労するが、次からがその苦労が酬われるのだ。
ADTについてはここ
後半のTroubleshootingにあるzipファイルを使う方が自分には合っている。

repoの準備


資料はここの真ん中あたり。
資料ではcurlを使って、一般ユーザーのホームディレクトリにファイルを落としている。
自分はwgetに慣れてるのでそれを使う。
かつユーザーごとにプログラムを分ける必要もないので、スーパーユーザーでpathが通っているところに置いておく。

cd xxxx # pathが通っているところ。
wget http://android.git.kernel.org/repo
chmod +x repo
curlを使うのはこのためだけのようだ。なのでcurlのインストールはしない。

一般ユーザーでの準備


gitの事前登録


gitでメールアドレスと名前を登録する。

git config --global user.email "xxx@xxx.xxx"
git config --global user.name "Xxx Xxx"

ソース格納用ディレクトリの準備


自分は~/android-src/gingerbreadとした。

cd
mkdir -p android-src/gingerbread
cd android-src/gingerbread

repoの初期化


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

-bの後ろはブランチ名。バージョンのコードネームか正式バージョンを指定できるようだ。
指定できるバージョンは、ここから確認できる。
ただし、詳しいことはよく知らない。

コードの取得


repo sync

この作業が一番憂鬱。
早ければ1〜2時間で終わるが、遅いと1日あっても終わらないんじゃないかと思うときもある。
下手すると途中で異常終了する。
その時は、再度実行。

全プロジェクトにmasterブランチを作成


repo start master --all

あまりよく分かってないのだが、全プロジェクトにgit branch masterを実行しているのだと思う。

frameworks/baseに新ブランチを作成し、それに変更


cd frameworks/base
git branch mybranch
git checkout mybranch

frameworks/baseが主に修正したいJavaコードが含まれるプロジェクトのようなので、そこに移動する。
先ほど作成したmasterブランチとは別のブランチを作成した方がいいと思われる。
今回"mybranch"という名前にしているが、これでいいかは定かではない。
そもそもgitやrepoについてはよく知らないからな。
資料は一応ここ
が、ほとんど読んでない。
ブランチが"mybranch"の状態で修正しても、masterブランチはもとのまま復活できるはず。

Eclipseからビルド用コードを編集できるようにする


cd ~/android-src/gingerbread
cp development/ide/eclipse/.classpath .

以下Eclipseから
新規 > Java プロジェクト > デフォルト・ロケーションの使用のチェックをOFF > ロケーションを~/android-src/gingerbreadに

資料はここ
最初これが何を目的とした作業なのかよく分からなかった。
Eclipseが一部日本語のせいなのか記述通りにはいかない気がする。
要するに、コアライブラリの修正などをEclipseから行えるようにする作業だ。
ただ、最初自分はテキストエディタで修正したのでこれは不要だった。
簡単な修正だったので。
ただし、複雑な修正になると確かにこの作業も必要だな。

修正・テスト・コミット


ここの作業は繰り返すことになる。もちろん一般ユーザーでOK。

ソースコードの修正


テキストエディタでもEclipseからでもOK。
ただし、テキストエディタで修正した場合は、Eclipseからリフレッシュが必要。

ビルド


cd ~/android-src/gingerbread
. build/envsetup.sh # (1)
lunch # (2)
make

資料はここの最後あたり。
(1)と(2)は2回目以降は不要かもしれない。よく分かってない。
すごく時間がかかることを覚悟したが、回線に左右されない分、ソースを取得するよりましだ。
makeのとき、次のようなメッセージが出てくる。
find: `frameworks/base/frameworks/base/docs/html': そのようなファイルやディレクトリはありません
・・・
・・・
よく似たメッセージが数行。
これは何だろう?
まあ、今のところ問題なさそうだが。

テスト


実はテストの方法が一番分からなかったところだ。
いろんな資料にはmakeまでは書いてあるが、その後の説明がないものが多い。
要はビルドした結果を反映しているエミュレータをどうやって起動し、テストするかだ。
通常のアプリ開発と同じようにやっても、起動されるエミュレータがビルドの結果できた環境を使うはずがない。
ビルド結果を反映したエミュレータは次のように起動する。

cd ~/android-src/gingerbread
. build/envsetup.sh # ※
lunch 1 # ※
out/host/linux-x86/bin/emulator &
※ 2011-02-20 追加

言われてみれば当たり前だが、ビルドの結果できたエミュレータを使用する。
だが、最後のところがAndroidの公式サイトには見つからない。
探し方が悪いんだろうか?
エミュレータ起動時にいろんな引数を指定して調節ができるようだ。
詳しくはここ
といってもほとんど読んでない。

あとは起動したエミュレータでアプリを実行する。
その際、Eclipseのプロジェクトで実行時に手動でAVD(仮想端末)を選択するようにしておく。
以下、Eclipseで、
プロジェクトを右クリック > 実行 > 実行の構成 > Targetタブ > Manualを選択

コミット


テストがうまく行ったらgitでコミットする。
cd ~/android-src/gingerbread
cd frameworks/base
git commit -a -m "xxx xxx ..."

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(3件)

タイトル (本文) ブログ名/日時
プラダ トート
Android ビルド jumble/ウェブリブログ ...続きを見る
プラダ トート
2013/07/07 17:38
プラダ 店舗
Android ビルド jumble/ウェブリブログ ...続きを見る
プラダ 店舗
2013/07/08 13:00
エアマックス 95
Android ビルド jumble/ウェブリブログ ...続きを見る
エアマックス 95
2013/07/09 23:03

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
Android ビルド jumble/BIGLOBEウェブリブログ
文字サイズ:       閉じる