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をリフレッシュしてビルドしてみます。変わりないですね。
とりあえず、環境は整った感じです。さて、デバッグはどうするのかな(^^;。