コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

DalvikVMをデバッグしてみる (1)

Androidはソースが公開されているので、中身が自由に見れるし自分でソースの改良(改悪?)もできます。それじゃぁ、やってみたくなるのが人情です。
そこで、AndroidというかDalvikVMのデバッグ環境を作ってみようと思います。

ソースを取得する

今回、froyo(Android-2.2.2_r1)をデバッグしてみたいと思います。いろいろなところで説明されているように、repoを使ってAndroid-2.2.2_r1のソースを取得します。私のブログだとこの辺りに書いています。ブログはGingerbread(2.3.3_r1)を取得していましたが、2.2.2_r1に置き換えれば、froyoソースが取得できます。

makeする

froyoをmakeします。といっても、GingerbreadはJava-6でmakeできましたが、froyoはJava-5対応です。←何も考えないでmakeしたら怒られました・・・。そこで、Java-5をインストールします。

~$ sudo add-apt-repository "deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse"
~$ sudo add-apt-repository "deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse"
~$ sudo apt-get update
~$ sudo apt-get install sun-java5-jdk

つぎに、現状、Java-5とJava-6がインストールされているので、Java-5に切り替えます。
Javaの切替

~$ sudo update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                      優        Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-6-sun/jre/bin/java       63        auto mode
  1            /usr/lib/jvm/java-1.5.0-sun/jre/bin/java   53        manual mode
  2            /usr/lib/jvm/java-6-sun/jre/bin/java       63        manual mode

Press enter to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/lib/jvm/java-1.5.0-sun/jre/bin/java to provide /usr/bin/java (java) in manual mode.

Javacの切替

~$ sudo update-alternatives --config javac
There are 2 choices for the alternative javac (providing /usr/bin/javac).

  Selection    Path                                   優        Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-6-sun/bin/javac       63        auto mode
  1            /usr/lib/jvm/java-1.5.0-sun/bin/javac   53        manual mode
  2            /usr/lib/jvm/java-6-sun/bin/javac       63        manual mode

Press enter to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/lib/jvm/java-1.5.0-sun/bin/javac to provide /usr/bin/javac (javac) in manual mode.

確認は下記でできます。

~$ java -version
java version "1.5.0_19"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_19-b02)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_19-b02, mixed mode)
~$ javac -version
javac 1.5.0_19
javac: ソースファイルがありません。

froyoのフォルダに移動してmakeします。makeについても、いろいろなサイトで説明されていると思いますので、それらを参考にしてください。私のブログだとこの辺りに書いています。ブログはGingerbread(2.3.3_r1)をmakeしていますが、froyoも同じです。

Eclipseに読み込む準備

デバッグEclipseで行おうと思います。ただし、このブログを書いている時点で、デバッグできていないので、うまくいかないかもしれません。
とりあえず、Eclipseに読み込む準備として、froyoをmakeしたフォルダトップに、.classpathをコピーします。そして、Write可にします。

~/android-2.2.2_r1$ cp development/ide/eclipse/.classpath .
~/android-2.2.2_r1$ chmod u+w .classpath

Eclipse起動

Eclipseを起動します。説明していませんでしたが、操作は64ビット版-Ubuntu10.10上で行っています。
「新規」→「Java プロジェクト」を選びます。プロジェクト名は適当にして、「外部ソースからプロジェクトを作成」を選び、Android-2.2.2_r1をmakeしたフォルダを選びます。そして、「完了」を押します。

そうすると、ファイルを読み込み始め、終了すると3つエラーが出ます。どうも、ライブラリが無いようです。

ネットで調べると、これらのライブラリは、下記にあるjavalib.jarで代用できることがわかりましたので、入れ替えてみます。

out/target/common/obj/JAVA_LIBRARIES/android-common_intermediates/javalib.jar

今作成したfroyoプロジェクトのプロパティを開いて、「Javaのビルド・パス」の「ライブラリー」を見ますと、しっかり×が付いているので、この2つを除去します。

そして、「JARの追加」を選んで、上記のjavalib.jarを追加します。

「順次およびエクスポート」で、今追加したjavalib.jarにチェックを入れます。そして、「OK」します。

リフレッシュしてもいいですが、とりあえず、Eclipseを再起動します。
そして、「リフレッシュ」と「プロジェクトのビルド」をやってみます。もしかしたら、自動ビルドになっていて、既に下記のエラーが出ているかもしれません。しかし、警告の量が半端じゃない。

このエラーについても、ネットで調べてみると、下記の2つをそれぞれエラーの出ているリソースに追加すればいいことがわかりました。

out/target/common/obj/APPS/CalendarProvider_intermediates/src/src/com/android/providers/calendar/EventLogTags.java
out/target/common/obj/APPS/ContactsProvider_intermediates/src/src/com/android/providers/contacts/EventLogTags.java

packages/providers/CalendarProvider/src の com.android.providers.calendar に、out/target/common/obj/APPS/CalendarProvider_intermediates/src/src/com/android/providers/calendar/EventLogTags.java をリンクとして追加します。

packages/providers/ContactsProvider/src の com.android.providers.contacts に、out/target/common/obj/APPS/ContactsProvider_intermediates/src/src/com/android/providers/contacts/EventLogTags.java をリンクとして追加します。

リフレッシュして、プロジェクトのビルドをしてみます。
ようやくエラーが消えて、ビルドできました。

AndroidのスタイルルールをEclipseにインポート

AndroidのスタイルルールをEclipseにインポートします。development/ide/eclipse 以下に、下記の2つのファイルがあるので、これらをインポートします。

android-formatting.xml
android.importorder

「ウィンドウ」の「設定」から「Java」の「コードスタイル」の「フォーマッター」を選びます。そして、「インポート」を選んで、development/ide/eclipse/android-formatting.xml をインポートします。

次に、「インポートの構成」を選んで、「インポート」を選択します。そして、development/ide/eclipse/android.importorderをインポートします。

とりあえず、Eclipseを再起動します。いらないと思いますが、froyoをリフレッシュしてビルドしてみます。変わりないですね。

とりあえず、環境は整った感じです。さて、デバッグはどうするのかな(^^;。