SSブログ
Androidアプリ開発 ブログトップ
- | 次の10件

Androidアプリ タップイベント [Androidアプリ開発]

ビューを作り、「好きな文字列」を表示することができた。センサーの値も取れた。次に何をやろうかと悩んだが、やっぱりタップしてみたいでしょう。ということでタップのイベント処理に挑戦してみることにした。

正確な用語は、「タップ」じゃなくて、「タッチ」みたいだが、「タッチ」だと微妙にエッチなのでタップで行くことにする。

でもって、タップされたかどうか、またその位置は、onTouchEventメソッドをオーバーライドすることで取得できる。
このメソッドは、Activity、Viewの両方にある。自前のビューを作成している場合は、Viewの方にonTouchEventを作成する。

public class HelloAndroidView extends View {

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		return true;
	}
}


これで、タップするとイベントが発生し、onTouchEventが呼び出される。
onTouchEventに渡ってくるMotionEventオブジェクトに、タップされた位置などの情報が含まれている。位置をメンバ変数で記憶しておき、onDrawでその位置に丸を表示させてみることにしよう。
まずは、メンバ変数を追加。

public class HelloAndroidView extends View {

	private float x, y; // タップされた位置を記憶

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		return true;
	}
}

次に、eventから位置を取得して、メンバ変数に代入して記憶。

public class HelloAndroidView extends View {

	private float x, y; // タップされた位置を記憶

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		x = event.getX();
		y = event.getY();
		return true;
	}
}

さらに、onDrawで丸を表示する。

public class HelloAndroidView extends View {

	private float x, y; // タップされた位置を記憶

	protected void onDraw(Canvas canvas){
		Paint paint = new Paint();
		paint.setColor(Color.WHITE);
		canvas.drawText("好きな文字書いてね", 20, 30, paint);
		// 丸を表示
		canvas.drawCircle(x,  y, 10, paint);
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		x = event.getX();
		y = event.getY();
		return true;
	}
}

これで、いけるはず。
エミュレーター起動、適当な位置でクリック。おや、クリック、クリック...

移動しない。画面の左上に丸が表示されている。これは多分、x=0,y=0の位置に表示されているな。イベントは確かに拾っているはずではあるが...

しょうがない。こういうときは、ひとつひとつ確認していくしかない。まずは、イベントが発生しているかどうか。onTouchEventが呼び出されているかどうかをまず確認する。
しかし、どうやって確認するか...

Log

普通のJavaアプリとか、アプレットなら、System.out.printlnで標準出力にデバッグ用の出力をしてしまうのが手っ取り早い。しかし、Androidには標準出力なんてあるのか?
出力できたとしても、エミュレーターから取ってこれるものなのか...

実は、Androidアプリでは、android.util.Logでログ出力することができる。
Logクラスには、ログレベルごとに出力メソッドが用意されている。Log.dならデバッグレベルのログを出力することができる。Log.eならエラーレベルのログ。詳細は、Logのドキュメントを参照して欲しい。

出力したログは、エミュレーター実行時なら、eclipseのLogCatビューに表示される(実機でもUSBで接続していればLogCatビューに表示される)。

まぁ、とりあえずやってみるべし。

public class HelloAndroidView extends View {

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		x = event.getX();
		y = event.getY();
		// debugレベルでログ出力
		android.util.Log.d("onTouchEvent", "x=" + x + " y=" + y);
		return true;
	}
}

Logという名前のクラスは結構いろんなパッケージに含まれていそうなので、パッケージ名まで書いている。こうしている例が多かったので。android.utilのLogしか使わない。というのであれば、import android.util.Logとしてインポートして、Log.dとだけ書いてもOKだと思う。
Log.dに渡している引数はふたつ。最初の文字列はタグ。次の文字列が出力内容。ここでは、位置情報を出力してみた。

では、実行してみよう。

デフォルトでLogCatビューが表示されていると思うが、表示されていなかったらLogCatビューを表示する。「ウインドウ」メニュー、「ビューの表示」、「LogCat」を選択すれば表示できる。
LogCatビューの表示レベルをdebug以上に変更しておく(verboseはdebug以上なのでそのままでOK)。debugレベルのログを出力しているのだから、下の設定になっていると表示されない。

ビューをタップ(エミュレーターだからマウスでクリック)するとLogCatに座標値が表示された。ということは、イベントはちゃんと取れている。

となると、問題は、描画の方か。
しかし、丸は表示されているが...
しょうがないので、onDrawにもログ出力を追加。

	protected void onDraw(Canvas canvas){
		Paint paint = new Paint();
		paint.setColor(Color.WHITE);
		canvas.drawText("好きな文字書いてね", 20, 30, paint);
		// ここにもログ出力を追加
		android.util.Log.d("onDraw", "x=" + x + " y=" + y);
		canvas.drawCircle(x,  y, 10, paint);
	}
}

これで、再度実行してみると...

どうもonDrawが呼び出されていないことがわかった。

invalidate

まぁ、種を明かすと、invalidateをしていなかったから。多くのGUIシステムがそうであるように、AndroidのViewも書き換えが必要なときだけ、onDrawが呼び出される。丸の表示位置を変更したかったら、onDrawを呼び出してもらわないといけないのだが、Viewの方は更新が必要なことを知らないので、onDrawが呼び出されず表示が変わらない。
Viewに再描画が必要であることを通知するのが、invalidate。onTouchEventで表示位置を変更したら、invalidateメソッドを呼び出して、再描画を依頼すればOK。

public class HelloAndroidView extends View {

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		x = event.getX();
		y = event.getY();
		android.util.Log.d("onTouchEvent", "x=" + x + " y=" + y);
		invalidate();	// 再表示が必要と通知する
		return true;
	}
}

これで、タップ中は丸がついてくるようになる。

関連記事


サイト内を検索

nice!(0)  コメント(0) 

Androidアプリ センサーの値を取得する [Androidアプリ開発]

Android端末用のアプリといえば、なんといってもセンサーでしょう。今日はセンサーから値の取得をやってみよう。

センサーはイベントとして通知される。イベントをもらうためにSensorEventListenerインターフェースを実装しなければならない。
新しくクラスを作ってもよいが、既存のアクティビティクラスを使うことにする。

HelloAndroidクラスに、implements SensorEventListenerを加える。
赤線が出るので、クイック・フィックスする。eclipseにより、自動的に実装すべきメソッドが追加される(eclipseは便利だなぁ)。

onSensorChangedがセンサーの値が変化したときに呼び出されるコールバック。
onAccuracyChangedはよくわからないので何も処理しないでほっておく。

センサーの値は、onSensorChangedの引数eventに渡ってくる。
SensorEventクラスにはいくつかプロパティがあるが、センサーの値は、valuesで取得できる。valuesはfloat型の配列。いくつかのセンサーは3次元での座標値を戻すので、要素数が3となっている。
どういった値が渡ってくるのか確認するため、ログに出力してみよう。

public class HelloAndroid2Activity extends Activity implements SensorEventListener {

	@Override
	public void onAccuracyChanged(Sensor sensor, int accuracy) {
	}

	@Override
	public void onSensorChanged(SensorEvent event) {
		android.util.Log.d("onSensorChanged",
			event.values[0] + "," + event.values[1] + "," + event.values[2]); 
	}
}

この状態で一度実行してみよう。
センサーの値がLogCatに表示されるだろうか...

多分、失敗する。
onTouchEventは単にオーバーライドするだけでOKであったが、onSensorChangedはリスナータイプなので、登録が必要になる。

リスナーの登録はちょっとめんどくさい。まず、SensorManagerなるものをシステムから取得する。
次に、SensorManagerからセンサーのリストを取得する。端末にたくさんのセンサーが付いているかも知れないので、使いたいセンサーを選別してリスナーを登録する。センサーリストの取得は、SensorManager#getSensorListで行う。
getSensorListを呼び出す際に、引数でセンサーのタイプを指定できる。センサーのタイプは、Sensorクラスにfinal intで定義されている。その一部を紹介すると...

Sensor.TYPE_ALL すべてのセンサー
Sensor.TYPE_ACCELEROMETER 加速度センサー
Sensor.TYPE_LIGHT 照度センサー

詳細は、Sensorクラスのドキュメントを参照。

getSensorListはListを戻す。このリストに入っているのはSensorオブジェクトになる。Java的に書くとList<Sensor>。各要素について、SensorManagerregisterListenerを呼び出して、リスナーを登録する。登録の解除は、unregisterListenerで行うことができる。

なんとなくわかったような。実際にやってみればもっとよくわかるが、ひとつ問題が。
どこで登録すればよいかといった問題である。

Android端末は、モバイルである場合が多い。バッテリーはなるべく使わない方がよい。センサーを使うのも最小限にした方がいいに決まっている。
消費電力を抑えるため、端末はすぐにスリープ状態に入ろうとする。このときアクティビティに状態の遷移が通知される。
また、Android端末はマルチプロセス、マルチスレッドで動作する。いくつものアクティビティを起動できるし、それらをバックグラウンドで実行することもできる。
センサーの値は、画面を操作しているときにしか必要ないであろう。フォアグラウンドで実行しているときにだけリスナーが登録されていればよい、ということになる。

アクティビティの状態遷移は、Activityクラスのドキュメントに載っている。これをよくみると。
アクティビティがフォアグラウンドになったときに、onResumeが呼び出される。ここでリスナー登録をすればよい。
バックグラウンドになったときは、onPauseが呼び出される。ここでリスナー解除すればよい。

では、やってみよう。

	protected void onPause() {
		// Listenerの登録解除
		SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
		sm.unregisterListener(this);
		super.onPause();
	}

	protected void onResume() {
		SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
		// 加速度センサーを取得
		List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_ACCELEROMETER);
		for ( Sensor s :sensors ) {
			sm.registerListener(this, s, SensorManager.SENSOR_DELAY_NORMAL);
		}
		super.onResume();
	}

これで、LogCatに加速度センサーの値が出力されるはず。

ひとつ説明していなかった。registerListenerの3つ目の引数は、リスナーに通知する頻度を指定する。SENSOR_DELAY_NORMALは普通の頻度。
SENSOR_DELAY_FASTESTが最も頻繁に通知してくる。他に、SENSOR_DELAY_GAME、SENSOR_DELAY_UIがある。

getSystemService(SENSOR_SERVICE)がnullを戻す場合もあるかも知れない。エラーチェックは省略しているので、ちゃんとした売り物のアプリを開発するのであれば、さぼらずにnullチェックしておいた方がよいだろう。


かんたんAndroidアプリ作成入門 (プログラミングの教科書)

かんたんAndroidアプリ作成入門 (プログラミングの教科書)

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2013/04/16
  • メディア: 単行本(ソフトカバー)





サイト内を検索

nice!(0)  コメント(0) 

Androidアプリ 実機の画面をキャプチャする [Androidアプリ開発]

実機でも動作したHelloAndroid.apkであるが、それをブログに載せるため、画面キャプチャしてみようと試みた。
画面キャプチャ用のアプリを検索してみようかと検索してみると、どうもアプリではできない様子。まじで。OSには存在していないものの、アプリくらいはあるかと思ったが...
さらに、検索するとAndroid SDKに付属のDDMSというものでできるらしい。
さらに、eclipseだと、ADTというものがあり、これでもキャプチャできるっぽい。

さっそく、ADTでやってみることに。

DDMSでも、ADTでもUSBでPCと接続する必要がある。
USBで接続。
次に、eclipseを起動する。
起動したら、DDMSパースペクティブに切り替える。
そんなのないんですけど... と思ったら、「パースペクティブを開く」、「その他...」で表示されるリストに存在。

Devicesに接続されているAndroid端末が表示されるはずなんだけど、出てこない...

端末側でUSBデバックに設定する必要があるのか。
「設定」、「アプリケーション」、「開発」、「USBデバッグ」にチェックを付けた。

再度、USB接続からやり直し。

やっぱり、リストされない。
なんか、PC側でドライバ入れろみたいな表示が...
Android端末は、Acer Iconia Tab A100。AcerのサイトにUSBドライバっていうのがあるなぁ。これを入れればいいのか?

入れてみた。

再度、USB接続からやり直し。
お、出た。

DDMSのDevices.png

Devicesのツールバーにあるカメラのアイコンの画面キャプチャーボタンをクリック。

やった、キャプチャできた。

ADT画面キャプチャ.png


DDMS

それはいいが、DDMSが気になる(一応、開発者なので)。でもって検索してみると...
DDMSっていうのはデバッガなのね。実機で実行中のプロセスにアタッチできるのか?
エミュレーターだとばっちり見えてるが、実機だとみえないぽいなぁ...
エミュレーター用のデバッガかも知れない。

よくみると、LogCatビューが表示されている。これで実機で吐かれたログが参照できるのね。他のファイル・エクスプローラーとか、スレッド、Heapっていうのは動いてないっぽいなぁ。
まぁ、ログが見れるだけでもありがたいか。

LogCat.png

ファイル・エクスプローラーが使えれば、ファイルシステムの様子を見れるので、便利なんだけどねぇ...
と思ってみてみたら、ちゃんと表示されるじゃない。表示できないのは、権限が与えられていないdataフォルダとかだけっぽいぞ。なんだ。
/mnt/sdcard以下なら全部見えていそう。
/mnt/sdcard/Downloadを開いてみると、テストでダウンロードしたAPKファイルなんかが見えている。ついでに不用なのは削除してしまおう。

PC側にファイルを持ってきたり、PC側からファイルを送り込んだりもできるっぽい。どうせなら実行ボタン一発で実機で実行できるようになっていれば、開発も楽なんだけどねぇ...
アプリの起動とかはできないっぽい。裏でadbが動いているような感じなので、もしかするとできるのかも知れないが...
と思い、なにげに実行ボタンをクリックしてみると...

あ、選択ダイアログが出るじゃん。
実機を接続してあると、エミュレーターか実機かを選択できるのね。

早速実機を選択して、実行。
あちゃ、なんかインストール済とかいわれてエラーになった。一度アプリをアンインストール。して再度チャレンジ。


おお、ちゃんと起動されたぞ。なんだ。開発中はこっちの方が便利だな。

デバッグモードでも起動できるのか?
おお、デバッグモードでもちゃんと起動する。ブレイクポイントも効くし、これはいいね。



サイト内を検索

nice!(0)  コメント(0) 

Androidアプリ 実機にインストール [Androidアプリ開発]

とりあえず初歩的ではあるが、アプリを作成することができた。開発するときは、エミュレーター上で動かした方が便利ではあるが、やはり実機で動かしてみたい。

HelloAndroidをアプリにして、実機で動かしてみよう。

エクスポート

Androidアプリは、APKファイルにパッケージングして配布する。Android SDKにはパッケージ作成のツールも含まれているので、簡単に配布用パッケージを作成できる。

パッケージエクスプローラーで対象となるプロジェクトを選択した状態で、右クリック、コンテキストメニューを表示させる。
「Androidツール」「Export Signed Application Package...」とメニューをたどる。

エクスポートのウイザードが表示されるので、それに従って操作する。
配布パッケージには、電子署名が必要となっている。Unsigned Applicationの方を選択すれば、署名なしの配布パッケージを作成することができるが、最近のバージョンは署名付きでないとインストールできなくなっている模様。

ウイザードの1枚目は、エクスポートするプロジェクトの指定。プロジェクトを選択してコンテキストメニューからウイザードを起動した場合は、選択したプロジェクトが自動的に入っているはずなので、そのまま「次へ」で進めばOK。

ウイザードの2枚目で使用する署名ファイルを選択する。Use existing keystoreを選択していると、既存のファイルを使用する。最初は作成しないと存在しないので、Create new keystoreを選択する。次回は、Use existingでOK。
ロケーションにファイルのパスを入力する。参照でダイアログを表示させた方が入力しやすい。ここでは、c:\eclipse\privatekey.txtとした。
パスワードにはキーファイルにかけるパスワードを入力する。確認に同じ文字列を入力する。
入力できたら、次に進む。

ウイザードの3枚目は、署名に含まれる内容を入力する。
必須なのは、エイリアスとパスワード、Validity(有効期限)、それに名前。ここにもパスワードがあり、なんかめんどくさい。キーファイルのパスワードと同じでもかまわないみたいなので、同じものを入力した。
他の項目はめんどうでなければ入力する。マーケットに出品するなら正確に入力しておいた方がいいが、今回はテストなので空欄にしておく。
入力できたら、次に進む。

ウイザードの4枚目は、生成するAPKファイルのパスを入力する。
現段階では、作成されるAPKファイルの大きさは数キロバイトにしかならない。どこでもよいので、書き込み可能な場所を指定する。私はローカルWebサーバのフォルダにエクスポートするようにしている。ファイル名はHelloAndroid.apkとした。

ウイザードはこれでおしまい。「完了」をクリックすれば、APKファイルが作成される。
次回のエクスポート時は、Use existing keystoreを選択して、各ウイザード画面でパスワードだけを入力すればOK。


ダウンロードとインストール

作成したHelloAndroid.apkを実機にダウンロードしなければならない。方法はなんでもいいが、ブラウザでアクセスするのが標準的か。
Android端末にもよるが、USBでPCと接続すれば、簡単にファイル転送できるので、単にファイル転送してもかまわない。
Android端末にネットワークアクセスできるファイルマネージャを導入すれば、PCに保存されているHelloAndroid.apkを参照できるので、これをコピーしてきてもよい。
どういった方法でもいいから、HelloAndroid.apkをAndroid端末側に持ってくる。

端末側に持ってこれたら、HelloAndroid.apkを開く。
ダウンロードした場合は、「ダウンロード」っていうアプリ?を起動してHelloAndroid.apkをタップすればいい。
ブラウザでダウンロードを指示すると、ダウンロード完了といった表示がされるので、それをタップしてもいい。
ファイルマネージャを使っている場合は、HelloAndroid.apkをタップすればOK。

device-2012-01-19-084759.png
device-2012-01-19-084841.png

インストールしますか?っていう表示になるので、「インストール」をタップする。

device-2012-01-19-085439.png

このあたりの様子はAndroid端末の機種やバージョンによって少し異なっているかも知れない。

インストールしますか?ではなく、エラーが表示されたら、何か問題が起きている。署名していないとか、Min SDK versionで指定したバージョンの条件を満たしていないとか。
Min SDK versionを変更するのは、AndroidManifest.xmlを編集すればよい。編集後は、再度エクスポートを行う必要がある。
AndroidManifest.xmlは、プロジェクトフォルダの直下にあるのですぐに見つかるはず。




13がバージョン番号。なので、これを10とかに変更する。

インストールに成功したら、アプリに登録される。HelloAndroidをタップすれば起動することができる。

device-2012-01-19-091202.png


かんたんAndroidアプリ作成入門 (プログラミングの教科書)

かんたんAndroidアプリ作成入門 (プログラミングの教科書)

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2013/04/16
  • メディア: 単行本(ソフトカバー)





サイト内を検索

nice!(0)  コメント(0) 

Androidアプリ ビューに文字を表示する [Androidアプリ開発]

さて、Android版のHello WorldであるHelloAndroidを作成することができた。
Android SDKのプロジェクト作成ウイザードが、一通りのソースファイルを自動生成してくれたおかげて、1行もプログラムを書くことなく、HelloWorldが完成してしまった。
これでは、本当にプログラムを作ったとはいえない気がする。せめて自分でprintf関数を呼び出して好きな文字列を表示させてみたい。

C言語でのHello Worldは、printfで標準出力に"Hello, World\n"といった文字列を表示するものである。Androidアプリでは標準出力というものがない(本当はあるかも知れないが、ここではないと言い切ってしまう)。
そこで、標準出力ではなく、画面上に表示することにする。

Androidではアクティビティの中にあるビューに対して何かを表示することができる。Windowsでいうと、アクティビティがウインドウで、ビューはクライアントエリアといったところか。
HelloAndroidでは、ビューがmain.xmlで定義されたものになっている。main.xmlの定義を変更することで、表示される文字列を変更することもできるが、それでは面白くない。printfっぽいものを使っていないから。
printfっぽいものを使うには、自分でViewを作成する必要がある。作成したViewをsetContentViewで指定してやれば、自分で作ったビューが表示される。

まぁ、やってみるべし。その方が早い。

まずは、Viewを継承してHelloAndroidViewクラスを作る。

import android.view.View;

public class HelloAndroidView extends View {

}

コンストラクタが必要とかいわれるので、作ってやる。

import android.content.Context;
import android.view.View;

public class HelloAndroidView extends View {

	public HelloAndroidView(Context context) {
		super(context);
		// TODO 自動生成されたコンストラクター・スタブ
	}

}

eclipseはimportなどを自動でやってくれるので便利。

とりあえず、ビューはできたものとする。これをsetContentViewで指定する。以下のようにHelloAndroidActivityの方を変更する。

public class HelloAndroidActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
        setContentView(new HelloAndroidView(this));
    }
}

これで、実行してみると、Hello Worldと表示されているものが出なくなった。失敗?、いやいやこれで正しいのである。HelloAndroidViewでは何も表示していないので、これで正解。

onDraw

ビューで何かを表示する場合は、ViewのonDrawメソッドをオーバーライドして行う。

public class HelloAndroidView extends View {

	public HelloAndroidView(Context context) {
		super(context);
	}

	protected void onDraw(Canvas canvas){
		Paint paint = new Paint();
		paint.setColor(Color.WHITE);
		canvas.drawText("好きな文字書いてね", 20, 30, paint);
	}
}

onDrawには、Canvasが引数で渡ってくる。このcanvasオブジェクトを使って、画面に描画することができる。Paintオブジェクトは、描画時の色などを指定するためのもの。例では、文字の色を白に設定している。Canvasオブジェクトのメソッドには、drawCircleやdrawRectなど図形を描画するメソッドもある。例では、drawTextで文字列を描画している。
Android APIのドキュメントは以下のURLにある。
http://developer.android.com/

残念ながら、日本語に翻訳されたものは少ししかない。

HelloAndroidView.png

本日はここまで。



サイト内を検索

nice!(0)  コメント(0) 

Androidアプリ Hello Worldを作る [Androidアプリ開発]

Android用のアプリを作るには、いろいろと方法があるが、一番簡単なのは、eclipseにAndroid SDKをインストールして開発するのが一番ポピュラー。

私の環境には、eclipseが入っていたが少々バージョンが古めだったので、最新版の3.7をインストール。

eclipse
http://www.eclipse.org/

eclipseには、言語ごとにいろいろパッケージがある。Androidアプリは基本Javaで開発するので、「Eclipse IDE for Java Developers」や「Eclipse IDE for Java EE Developers」などのうち、好きなやつを入れればOK。
私は、過去にRCPを開発したので、「Eclipse for RCP and RAP Developers」をチョイス。

eclipseのインストールは、展開して適当なディレクトリに入れるだけ。私は、C:\eclipseを作ってコピーした。

Android SDK

eclipseには標準でAndroidアプリの開発ツールは付いてこない。別途インストールするのだが、eclipseを使って行うことができる。
eclipseの「ヘルプ」メニューの「更新ソフトウェアのインストール」を選択。作業対象: サイトを入力または選択、と書いてあるところに、Android SDKが置かれているURLを入力する。

https://dl-ssl.google.com/android/eclipse

後に変更になるかも知れないので注意。

サイトが有効なら、「開発ツール」というのがリスト上に現れるので、これをチェックして、「次へ」進む。後はウイザードに従って進めば、Android SDK(ADT)がeclipseに組み込まれる。

といってもすべてのAndroid SDKのパッケージが組み込まれるわけではない。Android SDK Managerを使って、APIやらエミュレーターやらのソフトウェアをダウンロードする必要がある。
eclipseの「ウインドウ」メニューの「Android SDK Manager」を選択。パッケージが表示されるので、必要そうなものにチェックを付けて、Installボタンをクリック。状況のところが、Installedになれば、インストール完了。

エミュレーターを動かすときは、「ARM EABI v7a System Image」も必要なので、インストールしておく。
ソースやらドキュメントはなくてもいいが、デバックするときにソースがあった方がいいかも。

Android SDK Manager.png

さて、これでだいたい準備できた。それでは、アプリを作ってみよう。

eclipseで開発するときは、プロジェクトが必要。Androidアプリ用のプロジェクトを作成できる。「ファイル」メニュー「新規」「プロジェクト」を選択。
リストから「Android」「Androidプロジェクト」を選択して、「次へ」進む。
プロジェクト名を「HelloAndroid」にして、「次へ」進む。
ビルドターゲットを選択。APIをひとつしか入れていないので、選択肢はひとつだけ、そのまま、「次へ」進む。
パッケージ名を適当に決める。
Minimum SDKは、13に変更。
APIのバージョンは、実機のAndroidに合わせてやった方がよい。とりあえずは動かしてみたいので、そのまま続行する。

完了ボタンをクリックすると、プロジェクトが作成され、いくつかソースファイルが自動生成される。
HelloAndroidActivity.javaを開いてみる。

package asai.example.android;

import android.app.Activity;
import android.os.Bundle;

public class HelloAndroidActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

Activityっていうのは端末に表示される一枚の画面。Javaアプレットを作るときと同じ感覚でアクティビティというものを作るらしい。
onCreateが最初に呼び出されると書かれている。setContentViewでアクティビティの中に表示するビューを指定している。
R.layout.mainがビューなのだが、これはどこにあるのかというと...
srcフォルダではなく、genフォルダの中にR.javaがある。RってResourceの略か?えらく省略したのでなんだか意味がわからんぞ。それだけ多く使うっていうことかも。

package asai.example.android;

public final class R {
    public static final class attr {
    }
    public static final class drawable {
        public static final int ic_launcher=0x7f020000;
    }
    public static final class layout {
        public static final int main=0x7f030000;
    }
    public static final class string {
        public static final int app_name=0x7f040001;
        public static final int hello=0x7f040000;
    }
}

ごらんのとおり、R.layout.mainは単なるintで意味不明な数値になっている。
リソース番号と名前の対応テーブルみたいなものか。
肝心のリソースはどこで定義されているのよ...

あった、あった、resフォルダに入っているじゃん。layoutサブフォルダの中に、main.xmlがある。XML形式で定義するのか。ダブルクリックで開いてみると...

mainxml.png

おお、グラフィカルなエディタになった。ウィジットやらボタンやらが並んでいる。これで画面を構築していくことができるわけね。

自動生成されたアクティビティには中身はないが、とりあえず実行してみる。実行は、プロジェクトを選択してツールバーの実行ボタンをクリックすればよいのだが、その前にやることがある。

エミュレーターの設定

Androidアプリは、Android端末で実行されるアプリケーション。なので、WindowsやらLinuxではそのままでは動かない。エミュレーターを動かして、その中でアプリを実行しなければならない。そのエミュレータの設定をしないと動いてくれない。

eclipseの「ウインドウ」メニューの「AVD Manager」を選択。Android Virtual Device Managerが表示される。最初はリストには何も表示されない。ここにエミュレーター設定を突っ込んでいく。
「新規」ボタンをクリック。
名前は「EM1」にする。安直な名前だ。
ターゲットは、「Android 4.0.3」今のところインストールされている唯一のAPI。
SD Cardのサイズは、32Mくらいでいいでしょう。
「Create AVD」ボタンをクリックすれば、エミュレーターEM1が完成する。

AVD Manager.png

エミュレーター設定ができたら、いよいよ実行である。
eclipseの「実行」メニューの「実行」を選択、またはツールバーの「実行」ボタンをクリックする。プロジェクトを最初に実行する際には、実行方法が指定されていないので、選択ダイアログが表示される。Androidアプリケーションを選択する。
エミュレーターが起動する。エミュレーターはかなり重たい。しばらく待つとAndroidが起動する。
最初、画面ロック状態になっているので、ロックを外す必要がある。エミュレーターとはいえ、普通のPCでは画面をタップしても反応しない。タップはマウスクリックでエミュレートする。難しいことはない。クリックしてドラッグすれば、タップした感じになる。

画面ロックを外すとHelloAndroidアクティビティが表示される。

HelloAndroid.png

本日はここまで。



サイト内を検索

nice!(0)  コメント(0) 
- | 次の10件 Androidアプリ開発 ブログトップ


Copyright Atsushi Asai Google+朝井淳
[改訂第4版]SQLポケットリファレンス

[改訂第4版]SQLポケットリファレンス

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/02/18
  • メディア: 単行本(ソフトカバー)

イラストで理解 SQL はじめて入門

イラストで理解 SQL はじめて入門

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2019/05/16
  • メディア: 単行本(ソフトカバー)

[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)

[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2015/03/03
  • メディア: 単行本(ソフトカバー)

Access クエリ 徹底活用ガイド ~仕事の現場で即使える

Access クエリ 徹底活用ガイド ~仕事の現場で即使える

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2018/05/25
  • メディア: 大型本

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。