Androidのソースをビルドする (cupcake)

2009年9月24日

システム3部鈴木です。

今後ソースに変更があった場合に対応できるよう、Androidをソースからコンパイルする方法を説明します。このエントリーではAndroid1.5(cupcake)を対象にしています。

開発環境の用意

Armadilloで動作するバイナリをビルドするには、@テクノが提供しているATDEという開発環境を使用します。
下記のサイトからダウンロードします。VMWareのイメージになっています。
Armadillo-500 FXダウンロード

ただ、このVMイメージはメモリが256MB、HDDが8GBなので、ビルドに時間がかかりますし、ソースを色々とDLすると、ディスクが一杯になってしまいます。
そこで、たとえばVMX Builderというツールを使用して、メモリの割り当てを増やし、ディスクを追加しておくと良いかと思われます。
VMX Builder Download
追加したディスクはext3でフォーマットし、/etc/mtabに追記しておくとマウントの手間が省けます。

セットアップは上記のサイトにある「FX液晶モデル – ソフトウェアマニュアル」というPDFファイルを参照してください。
「3.2. atmark-dist のビルドに必要なパッケージ」という項も確認して、必要なパッケージを最新にしておいてください。

なお、製品同梱のCDに含まれるファイルは上記のサイトのものよりだいぶ古いので、マニュアル中で「CDに入っている」と記載のあるものは上記サイトからDLしたもので代用するのが良いでしょう。

Androidユーザーランドをビルドしてみる

まず、Androidをビルドするために必要なパッケージを用意します。「開発環境の用意」で用意したDebianの環境で、下記のパッケージをインストールします。

# apt-get install flex bison gperf libsdl-dev libesd0-dev \
libwxgtk2.6-dev build-essential zip curl valgrind
# apt-get install unzip zlib1g-dev

次に、sun-java5-jdkをインストールするのですが、私の環境ではsoueces.listにnon-freeを追加してもsun-java6-jdkしか見つからなかったので、sunのサイトからダウンロードしました。
なお、sun-java6-jdkだとAndroidのソースのビルド中に警告が出て、続行できません。
Java SE ダウンロード – Previous Release – JDK 5
最新のJDK(現在はJDK 5.0 Update 20)をDLします。
プラットフォームはLinuxで、rpm形式のバイナリをDLしてください。
jdk-1_5_0_20-linux-i586-rpm.binをDLした事として、説明を続けます。

DLしたファイルに下記の操作を行い、jdk-1_5_0_20-linux-i586.rpmファイルを取り出します。

$ chmod +x jdk-1_5_0_20-linux-i586-rpm.bin
$ ./jdk-1_5_0_20-linux-i586-rpm.bin

できればDebianのパッケージ管理ツールで管理できるようにしたいので、.deb形式に変換します。
jdk_1.5.0_20-1_i386.debというファイルが出来上がります。

$ alien --scripts jdk-1_5_0_20-linux-i586.rpm

gdebiというツールでローカルのdebファイルをインストールできます。
アンインストールは「Synaptic パッケージマネージャ」など、標準的なツールで行えます。

# gdebi jdk_1.5.0_20-1_i386.deb

次はgit-coreです。既にインストールされているのですが、バージョンが古く、また、普通にapt-getで更新をかけても、1.5.4 以上になってくれません。
リポジトリにbackportsを追加する必要があります。
sources.listにリポジトリを追記して、インストールを行います。

# vi /etc/apt/sources.list
deb http://www.backports.org/debian/ etch-backports  main
deb-src http://www.backports.org/debian/ etch-backports  main
# apt-get update
# apt-get install debian-backports-keyring
# apt-get update
# apt-get -t etch-backports install git-core

次に、Androidのソースを取得し、ビルドします。
atmarkユーザのホームディレクトリで作業するものとして説明を続けます。

ソースを入手するために、repoというツールを~/binにインストールします。

$ mkdir bin
$ PATH=$PATH:/home/atmark/bin
$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo

ソースをDLするディレクトリを用意します。名前は自由に付けてください。

$ mkdir mydroid
$ cd mydroid

Android1.5(cupcake)のコードリストを取得します。
成功すると、YOUR NAME と Gmailアカウントを要求されます。
実在するGmailアカウントを入力してください。

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

ソースコードを取得します。2GB以上あり、時間がかかるので、気長に待ってください。

$ repo sync

makeの前に、取得したソースに対して、バッテリーの残量を調べるモジュールを修正します。
この作業を行わないと、Androidの起動直後にバッテリーの残量が無いと言われて、起動できません。
下記のサイトで詳しく解説して下さっていますので、「3.3.2 Batteryパッチ」の項に従ってファイルの修正を行ってください。
Android自社端末作成中 – ブリリアントサービス

修正が完了したらmakeします。

$ make

makeが完了したら、Armadilloに転送するためのファイルを作成します。
下記のディレクトリに移動して、中身を確認してください。

$ cd ~/mydroid/out/target/product/generic/
$ ls

rootというディレクトリがAndroidユーザーランドになります。
ただ、root/systemの中が空なので、…/generic/sysytem ディレクトリをコピーします。

$ cp -r ./system ./root/

キーレイアウト、キーマップのファイルのアクセス権を変更します。
これを行わないとボタンが効きません。全部backボタンのような動作をしてしまいます。
(keylayoutのほうは変更する必要が無いかもしれません)

$ chmod 0777 ./root/system/usr/keychars/* ./root/system/usr/keylayout/*

起動スクリプト等を変更します。
Android1.5を動かしてみる」でDLしたAndroidユーザーランドのtarファイルを展開し、作成されたディレクトリ直下に、起動スクリプトファイルがあるので、root直下にコピーします。
ここでは、展開後のディレクトリを~/androidとします。

$ cp ~/android/init.rc ./root

rootディレクトリをアーカイブして完成です。
(rootディレクトリを適当なところにコピーして、名前を変更したほうがいいかもしれません。cupcake等)

$ tar czf mydroid.tar.gz ./root

後は「Android1.0を動かしてみる」を参考に、
AndroidユーザーランドをArmadilloに展開してください。
wgetではなく、FTPでArmadilloにファイルを転送・展開すると良いと思われます。

Android1.5を動かしてみる

2009年9月24日

システム3部鈴木です。

1.5についても、下記のサイトでビルド済みのAndroidユーザーランド、Linuxカーネルを提供してくださっています。個人サイトさんですが、現状問題なく動作しています。
Armadillo-500 FX に Android ( cupcake ) をのせる その2
Armadillo-500 FX に Android ( cupcake ) をのせる その3
上記の「その2」で配布しているカーネルには問題があるようなので、「その3」のカーネルをDLしてください。

Atmark Distユーザランドは上記「Android1.0を動かしてみる」でフラッシュメモリに書き込んだものをそのまま利用します。
フラッシュメモリへの書き込み方法などは、上記の「Android1.0を動かしてみる」を参考にしてください。
ファイルのアドレスを読み替えて適用できると思います。

これでAndroid1.5が起動するのですが、
この段階では電源・HOMEボタンが効かないので、同サイトの下記のエントリにしたがって修正を行います。
Armadillo-500 FX に Android ( cupcake ) をのせる その4

要約:
Androidが起動したら、コンソールから下記の手順でDBに設定を加えます。

# cd /data/data/com.android.providers.settings/databases
# sqlite3 settings.db
sqlite> INSERT INTO secure (name, value) VALUES ('device_provisioned', 1);
sqlite> .quit
# sync
# reboot

Armadilloにシリアル接続してコンソールを操作している場合は、Armadillo起動後はそのまま Armadillo のシェルが叩けます。
プロンプトが出ていない場合はエンターキーを叩いてみてください。

Android1.0を動かしてみる

2009年9月24日

システム3部鈴木です。

下記のArmadillo開発者サイトで、Android1.0をArmadilloに乗せる方法を解説しています。
Armadillo-500 FXでAndroidを使ってみる | Armadillo 開発者サイト

解説どおりに作業を行えば、Android1.0を動作させることができます。
なお、あらかじめArmadilloで有線LANの設定をしておく必要があります。
下記のサイトから「FX液晶モデル – スタートアップガイド」をDLして、参照してください。
Armadillo-500 FXダウンロード

Armadillo-500 FXのタッチパネルを改造(1)

2009年9月24日

システム3部鈴木です。

わたくしは、アットマークテクノ社製のパネルコンピュータ、Armadillo-500 FXへのAndroidポーティングに関するTipsを紹介していきます。

さて、研究チームでは、デモアプリ制作の都合上、タッチパネルを大きくする必要があり、アルマジロを購入したコアスタッフさんに依頼して、Armadillo-500 FX のタッチパネルをWVGAサイズに換装してもらいました。

Tipsでは無いですが、割とインパクトのある姿になって帰ってきたので、最初のネタとして紹介したいと思います。机の上がごちゃついているのはご容赦下さい。

全体像

上カバーを外して、元のボードと直交するようにタッチパネルが取り付けられています。HOME画面の壁紙が640×480のサイズなので両端が切れています。

全体像・裏側

裏側。白い四角い物はマジックテープです。USBモジュールを差して無線LANにしています。

タッチセンサーのズレ

画面の端に沿ってボールペンの頭を動かしたときのポインタの軌跡。画面中央に向かってズレています。ソフトウェアキーボードを誤射しまくりです。

タッチセンサーのケーブル

おそらくタッチセンサーの信号を伝えるケーブル。華奢な上に外側にむきだしなので、SDカード挿抜時にぶっちぎりそうで怖いです。ボードにちょうどいい穴が開いていないので、外を通すしかないとのこと。

センサーケーブル変換部分

タッチセンサーのケーブルが底面に張り付いたボードでUSBケーブルに変換されてます。

タッチパネルが張り出していますね。コネクタの挿抜が若干しづらくなりました。

その他・拡張部分1
その他・拡張部分2
その他・拡張部分3

その他、拡張部分のアップでした。以上の改造のお値段が約¥95,000です。パネル代と、いろいろ苦労してつなげていただいたことを考えれば安いのでしょうか。

なお、このタッチパネルは、本来予定していた品物の在庫が無かったために間に合わせで装着したもので、近々付け替えていただくことになっています。ケーブルも改善されるとのことです。

Hello world!

2009年9月10日

こんにちは、SYLC開発blogへようこそ!

このblogでは、SYLC(株式会社システムサイエンス研究所)の開発部門で起きたしょうもない出来事から、Tips、技術情報などを節操無く取り上げていく予定です。どうぞお付き合いください。