Android 開発をしてみようと思ったので。 #contents ** 環境構築(Windows) [#maf8c96a] + Android SDK を取得。&br; -- [[Android Developers:http://developer.android.com/]] >> [[Android SDK:http://developer.android.com/sdk/index.html]] + Android SDK を適当な場所に展開。 + Android SDK をインストール。 ++ zip 展開した場所に SDK Setup.exe があるので起動。 ++ 「Settings」を選択して「Force https://... sources to be fetched using http://...」にチェック。 ++ 「Available Packages」を選択して「https://dll-ssl ...」のチェックを入れると利用可能なパッケージの一覧が表示される。 ++ とりあえず「SDK Platform Android 2.1, API 7, revision 1」だけチェックして「Install Selected」。 --- バージョンは最新のを選べば良い。 ++ 「Choose Packages to Install」ダイアログが出るので、そのまま「Install」。 ++ 終わったらエミュレータを起動してみる。「Virtual Devices」を選んで「New」。 ++ 端末作成の画面が出てくるので、適当に入力。 --- docomo Xperia, au IS01 を想定してるなら「Target」に「Android 1.6」系を選択。 --- Softbank Desire を想定してるなら「Target」に「Android 2.2」系を選択。 --- 端末が不明な場合は とりあえず 1.6 系で良いと思う。 --- 「SD Card」のところはメモリ容量。とりあえず 1000 MiB(1GBってこと)で。 --- 上記以外はデフォルトで良いと思う。 ++ 一通り入力したら「Create AVD」。 ++ 一覧に今つくった AVD が表示されるので、選択して「Start」。 ++ 暫く待つ。(結構時間がかかる) ++ 満を持して Android エミュレータの画面が出てくれば OK。 + 次に 開発環境として Eclipse を取得。&br; -- [[Eclipse のインストール]] 参照。ここは Tomcat 以降はいらない。 -- Windows なら [[Pleiades All in One 日本語ディストリビューション:http://mergedoc.sourceforge.jp/index.html]] をもらうのが一番早い。 + Eclipse をインストール。 -- zip を適当な場所に展開するだけ。 + Eclipse を起動。 + Android プラグインをインストール。 ++ 「ヘルプ」→「新規ソフトウェアのインストール」。 ++ 「追加」ボタンをポチッ。 ++ 「名前」に何か入力。(分かる名前で適当で OK) ++ 「ロケーション」に "https://dl-ssl.google.com/android/eclipse/" を入力。 --- ダメだったら "http://dl-ssl.google.com/android/eclipse/" (非SSL) ++ ライセンスの注釈画面では「同意する」で「次へ」。 ++ 警告とかいろいろ出るけけど無視してどんどん「次へ」。 ++ インストールが終わったら Eclipse を再起動。 ++ 「ウィンドウ」→「設定」で「Android」を選択。 --- 何か警告ダイアログが出るかもしれないけど気にしない。 ++ 「参照」ボタンを押して Android SDK をインストールしたフォルダを指定。 --- SDK Setup.exe があるフォルダを指定すれば OK。 これでおわり。 SDK のパッケージ追加などは「ウィンドウ」→「Android SDK and AVD Manager」からできる。 ** 何かつくってみる [#m022ff3e] 何かつくるといえば Hello World。 + Eclipse 起動。 + 「ファイル」→「新規」→「その他」。 + 「Android」下にある「Android プロジェクト」を選択して「次へ」。 + 「新規 Android プロジェクト」画面で、とりあえず以下を設定。 -- 「プロジェクト名」は「Hello Android」 -- 「ビルド・ターゲット」は「Android 1.6」を選択(端末による)。 -- 「アプリケーション名」は「HelloAndroid」 -- 「パッケージ名」は「com.google.myapp」 -- 「Create Activity」は「HelloAndroid」 -- 「Min SDK Version」は「4」(「Android 1.6」の API Level)。 -- ここは何でも良い。サンプルとしてこうする、というだけ。 -- 上記を入力したら「完了」。 + ワークベンチを開く。 + 「パッケージエクスプローラ」から「src」→ パッケージ(com.google.myapp)を開くと「HelloAndroid.java」というソースができているはず。 + 以下のように書き加える。&br; #code(java){{ package com.google.myapp; import android.app.Activity; import android.os.Bundle; import android.widget.TextView;//←ここ public class HelloAndroid extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView view = new TextView(this);//←ここ view.setText("Hello Android!!");//←ここ //setContentView(R.layout.main); setContentView(view);//←ここ } } }} + 「実行」→「デバッグの構成」で以下を設定。 -- 「Android アプリケーション」をダブルクリック。 -- 「名前」に「Hello Android」と入力。(何でも良い) -- 「プロジェクト」に「参照」から「Hello Android」を選択。 -- 上記以外はデフォルトのままで OK。 + 「実行」→「デバッグ」で起動。 -- 「実行」→「実行」でも OK。 + AVD(エミュレータ)が起動するので暫く待つ。 + 画面が出てきたら、ボタンパネル(画面右)の「MENU」を押す。 + 画面に "Hello Android!!" と出たら成功。 ホームボタンを押すと Android のメイン画面になる。そのままもう一度アプリを起動する場合は、「MENU」を押すと、一覧に「Hello Android」アプリのアイコンが追加されているので、それを選択すれば起動する。 ** グラフィックを使って「Hello World」 [#q161f2d3] PaintとかCanvasとかを使えば、いろいろ表現できる。awtに似てる感じ。 #code(java){{ package com.test; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.view.View; public class AndroidDrawSample extends Activity { private class GraphicsView extends View { public GraphicsView(Context context) { super(context); } @Override protected void onDraw(Canvas canvas) { Paint paint = new Paint(); // 背景を白にする。 canvas.drawColor(Color.WHITE); // 描画にアンチエイリアスをかける。 paint.setAntiAlias(true); // 線色を赤にする。 paint.setColor(Color.RED); // 線の太さは 3。 paint.setStrokeWidth(3); // 枠の中を塗りつぶさない。 paint.setStyle(Paint.Style.STROKE); // 枠を描画。 canvas.drawRect(5, 5, 140, 28, paint); // 文字色を黒にする。 paint.setColor(Color.BLACK); // 文字サイズは 18。 paint.setTextSize(18); // 文字の太さは 1。 paint.setStrokeWidth(1); // 文字は塗りつぶし。 paint.setStyle(Paint.Style.FILL); // 文字を描画。 canvas.drawText("Hello Android!!", 8, 22, paint); } } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.main); setContentView(new GraphicsView(this)); } } }} ** SurfaceView を使って「Hello World」 [#ic62513e] Android のメインスレッドは UIスレッドといって、基本的にこのスレッド以外のスレッドからは画面描画ができないらしい。それじゃ不便なのでできるようにしたい。という場合に使うのが SurfaceView というやつ。 #code(java){{ package com.test; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; public class AndroidSurfaceSample extends Activity { // SurfaceViewを継承したサブクラス private class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback { public MySurfaceView(Context context) { super(context); // コールバック登録。 getHolder().addCallback(this); } // SurfaceViewのサイズとかが変更されたときに呼び出される。 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // not yet. } // SurfaceViewが最初に生成されたときに呼び出される。 public void surfaceCreated(SurfaceHolder holder) { // SurfaceHolderからCanvasを取得する。 Canvas canvas = holder.lockCanvas(); try { // 背景を白くする。 canvas.drawColor(Color.WHITE); Paint paint = new Paint(); // 青字にする。 paint.setColor(Color.BLUE); // アンチエイリアスをかける。 paint.setAntiAlias(true); // 文字サイズは 18。 paint.setTextSize(18); // 文字列を描画。 canvas.drawText("Hello Android!!", 0, 0, paint); canvas.drawText("Hello Android!!", 8, 22, paint); } catch ( Exception e ) { if (canvas != null) holder.unlockCanvasAndPost(canvas); } } // SurfaceViewが破棄されるときに呼び出される。 public void surfaceDestroyed(SurfaceHolder holder) { // not yet. } } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // MySurfaceView のインスタンスを渡す。 setContentView(new MySurfaceView(this)); } } }} ** 参考サイト [#hfac57b1] - [[Android Developers:http://developer.android.com/index.html]] - [[Android 開発入門:http://www.ibm.com/developerworks/jp/opensource/library/os-android-devel/]] - [[Android情報まとめwiki:http://www29.atwiki.jp/android/]] - [[Android Wiki*:http://wikiwiki.jp/android/]] - [[日本Androidの会:http://android.siprop.org/]]