Android プロジェクトの作成から、EclipseによるSDKソースコードをステップ実行するまでの手順
Android の超簡単なアプリケーションを作成し、Android SDK のソースコードを入手して参照できる状態にしていく。
事前準備
が行われていることを前提とした記述となってます。
Hello Android アプリケーションの作成
まずは、画面にボタンを一つ配置するだけのアプリケーションを作成。
プロジェクトの作成
ファイル - 新規 – Android プロジェクト を選択する。
プロジェクト属性の設定
ダイアログに、以下のような内容を設定し、完了。
項目 | 設定値 | 備考 |
プロジェクト名 | HelloAndroid | Eclipse 上のプロジェクト名を指定する |
ビルドターゲット | Android 2.2 にチェック | ビルドに利用するSDKを指定する。SDKのインストールについては、こちら |
アプリケーション名 | HelloAndroid | アプリケーションの名称を指定する |
パッケージ名 | jp.example.android 等 | Java 規約に従ってパッケージ名をつける。公開する場合、ドメインを取った方がいいかも。1,000円/年 程度で取得できるし。 ※ ‘-‘ を含むドメインは、’_’ に置き換える。 |
アクティビティの作成 | チェックON | チェックをONにしておくとActivity(Android でいう”画面”のようなもの) のサブクラスが自動で生成される。 |
最小SDKバージョン | 8 | 動作する最小のSDKバージョンを指定する。通常は、ビルドターゲットのバージョンに一致させれば良いと思う。 |
画面のデザイン
Android では、画面をプログラムで記述することもできるが、基本的にはXMLにて画面定義を行う。
Eclipse の ADT プラグインには、一応画面のデザイナがついている(かなり頼りないが)ので、画面定義ファイルHelloAndroid\res\layout\main.xml をダブルクリックすると、以下のようにデザイナが立ち上がるはず。デザイン画面の下部のタブ「Graphic Layout」 「main.xml」で、デザイン画面と、XMLの記述が切り替わる。
先ずは、デザイナの左側のツールボックスから、「Button」 を黒色の画面にドラッグ&ドロップする。
ボタンのプロパティ設定
ボタンが張り付いたら、コンテキストメニューから、プロパティを表示
プロパティビューが起動するので、Text プロパティに 「Hello Android!!」 とでも設定しておく。
基本的に文字列リソースもXMLファイルに保持するのが多国語対応のためにもよいと思うが、簡単のために、プロパティを直接編集する。
また、ID プロパティを「@+id/btnHello」 とでもしておく。「@+id/」 としておくことで、そのIDが自動的に整数値としてフレームワークで管理され、R.id.btnHello として識別できるようになる。
ボタンを押下したイベントの追加
HelloAndroid\src\{パッケージ名}.HelloAndroid\HelloAndroidActivity.java を開いて、以下のように編集する。
- (1) View.OnclickListener を Activity に実装 : ボタンのイベントを処理できるようにするため
- (2) ボタンのイベントハンドラと登録 : 先ほど定義したボタンのIDを利用して、フレームワークからボタンのインスタンスを取得(定型的な書き方 JavaScriptみたい) し、イベントリスナーに Activity 自身を登録
- (3) クリックイベントのハンドリング : ボタンを押されたら、テキストを現在時刻に変更する
package info.typea.HelloAndroid; import java.util.Date; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class HelloAndroidActivity extends Activity implements View.OnClickListener { // (1) /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // (2) Button btnHello = (Button) findViewById(R.id.btnHello); btnHello.setOnClickListener(this); } // (3) @Override public void onClick(View v) { Button btn = (Button)v; String s = (new Date()).toString(); btn.setText(s); } }
上記(1)について、 Eclipse の自動補完を使って、implements OnClick ・・・ や、 View.OnClick・・・ としても自動補完されない。View.OnclickListener は、クラスの内側に宣言された、static なインターフェースというちょっと変わったかたちになっている(でも結構便利) ので Eclipse が探しきらないのだろう。最初とまどったが、implements に続かないところ、例えばメンバー変数を宣言する位置とかで、View.Oncli・・・ とかなら自動補完されるので、そこで補完しておいて、カット&ペーストでimplements の後ろへ持って行くと楽かも。
ブレークポイントの設定
ソースエディタの左側の部分をダブルクリックするとブレークポイントを設定できる。
上記で追加したコードの btn.setText(s); にブレークポイントを設定する。
アプリケーションの起動
プロジェクトのコンテキストメニューから、デバッグ - Android アプリケーション を選択する。
数分後、エミュレータが起動してくる。
めでたく作成した画面が表示されている。で、ボタンを押してみる。
先ほど設定した、ブレークポイントで実行が停止する。
実行 - ステップイン とするか、F5 キーを押下することで、呼び出すメソッドの中のステップをデバッグすることができる。
・・・ はずだが、Button.setText() メソッドは、SDK のメソッドなので、このままでは、以下のように「ソースが見つかりませんでした」という表示がでるだけで、ソースコードを確認することはできない。
Android SDK ソースコードのダウンロード
ここからは、SDKのソースコードを入手して、Eclipse から参照できるようにしてみる。
Git リポジトリビュー から、リポジトリの Clone アイコンをクリック
「Eclipse Git プラグインの導入 」をしておく。
特にEclipse プラグインを利用する必要はないけど、導入したので使ってみる。
以下も参照。
Git リポジトリの Clone 設定ダイアログ
上記アイコンのクリックにより、以下のダイアログが開く。URI に以下の値を貼り付けると、その他の項目には、自動で値が設定されるので、「次へ」 を押下。
git://android.git.kernel.org/platform/frameworks/base.git
Clone するブランチを選択
とりあえず、Android2.2 なので、froyo-release を選択してみた。
http://android.git.kernel.org/?p=platform/frameworks/base.git;a=summary
ローカルでの置き場所を指定してCloneを実行
とりあえず、Android SDK のインストールディレクトリ配下に作成するように、%ANDROID_SDK_HOME%\base を ディレクトリーに指定する。
自分の環境だと、以下のパス。
例 : C:\Program Files\Android\android-sdk-windows\base
「完了」を押下し、しばらくまつ。
これが結構な時間がかかる。15分~20分程度。
リポジトリーの Clone が 行われ、上記 base\.git にリポジトリが作成される。
また、自動的にソースが Checkout されるので、完了すると以下のようにソースコードを含むディレクトリ構造が作成される。
ソースコードの位置を指定
プロジェクト\Android2.2\android.jar のプロパティから、Java ソースの添付を選択し、「外部フォルダー」ボタンで、上記 ソースコードが展開された、base フォルダを指定する。
Android SDK のソースが参照できるようになった
これで、自分が書いたアプリケーションのソース上から、Android フレームワークのメソッド呼び出し箇所を、Ctrl を押しながらマウスオーバーすると、リンクが表示されるので、クリックする。
SDKのソースが画面表示された。 ちゃんと設定されているようだ。
デバッグの実行
先ほどは、「ソースが見つかりませんでした」 となったが、同様にブレークポイントを設定して、デバッグ開始。停止したら、F5 でステップインしていくと、今回は前回と違い、SDK のソースコードをステップ実行することができるようになる。
めでたしめでたし。
こんにちわ。
突然のメールすいません。
いつも、やぎさんのブログを参考にAndroid開発をしております、れおと申します。
現在、「Android プロジェクトの作成から、EclipseによるSDKソースコードをステップ実行するまでの手順」を参考にしているのですが、つまづいていてメールしました。
「Git リポジトリの Clone 設定ダイアログ上記アイコンのクリックにより、以下のダイアログが開く。URI に以下の値を貼り付けると、その他の項目には、自動で値が設定されるので、「次へ」 を押下。」のところで「次へ(N)」を押すと次のダイアログで「Exception caught during execution of ls-remote command」というエラーで次に進むことが出来ませんでした。
また、プロトコルを「http」にすると「ローカルでの置き場所を指定してCloneを実行」で「完了」ボタンを押すと、「Exception caught during execution of fetch command」というエラーでダメでした。
エラーログで色々調べたのですが解決できずメールした次第です。
お時間がある場合で結構なのでご教授していただければ幸いです。
れおさん
矢木です。よろしくお願いします。
「Exception caught during execution of ls-remote command」 で検索したところ EGitのバグみたいですが・・・
https://bugs.eclipse.org/bugs/show_bug.cgi?id=357781
修正済みのようなので、EGitを最新版に更新したら、解決しないでしょうか?
今後もよろしくお願いいたします。