• 追加された行はこの色です。
  • 削除された行はこの色です。
[[勉強会]]

* Android SDK WG 第2回 セッション [#h9616c7e]

''無事終了しました!!''

- 日時: 2008年11月29日(土曜日) 13:00 - 17:30
- 場所: 東京都新宿区西新宿二丁目1番1号 新宿三井ビル34階 株式会社豆蔵 大会議室
--MAP:http://www.shinjukumitsui55info.jp/access/index.html
- 定員: 20名弱
-- お申込は締め切らせていただきました。多数の方にお申込頂き誠にありがとうございました。

- 参加料: 無料

** 内容 [#uff292ed]

発表者の方に、各々の担当内容について自由に述べて頂き、皆でそれを聞きながら色々考えます。質問や疑問は随時出して、皆で共有していきましょう。~
今回の発表者の方はこちらです!

|内容|発表者|資料|h
|[[View>http://code.google.com/android/reference/android/view/View.html]]について|安生さん|資料の配布予定はありません。覚えて帰りましょう!|
|[[Service>http://code.google.com/android/reference/android/app/Service.html]]について|小山さん|&ref(Android_Service.ppt,,,Android_Service.ppt);&br;&ref(20081129_sources_koyama.zip,,,ソース);|
|[[OpenGL>http://code.google.com/android/toolbox/apis/opengl.html]]について|神林さん|&ref(AndroidGL01.zip,,,AndroidGL01.zip --- ポリゴンを表示するまで);&br;&ref(AndroidGL02.zip,,,AndroidGL02.zip --- カメラと視界の設定);&br;&ref(AndroidGL03.zip,,,AndroidGL03.zip --- ポリゴンの移動/回転/拡大・縮小);&br;&ref(AndroidGL04.zip,,,AndroidGL04.zip --- テクスチャマッピング);|
|[[OpenGL>http://code.google.com/android/toolbox/apis/opengl.html]]について|神林さん|&ref(AndroidGL01.zip,,,AndroidGL01.zip --- ポリゴンを表示するまで);&br;&ref(AndroidGL02.zip,,,AndroidGL02.zip --- カメラと視界の設定);&br;&ref(AndroidGL03.zip,,,AndroidGL03.zip --- ポリゴンの移動/回転/拡大・縮小);&br;&ref(AndroidGL04.zip,,,AndroidGL04.zip --- テクスチャマッピング);;&br;&ref(AndroidGL05.zip,,,AndroidGL05.zip --- カメラの回転);|
|[[Intent>http://code.google.com/android/reference/android/content/Intent.html]]について|江川|&ref(Intent.ppt);|
※各々の時間などの厳密なタイムラインは設けません。時間の許す限りやります。~
※なお、本WGセッションの発表者は、参加者の間での持ち回りで担当する形になります。参加された方は、是非次回以降の発表を御検討頂ければと思います!

** 対象(参加資格) [#obebd13d]
-「Androidの会」MLに登録されている方
- Androidアプリ開発者と仲良くなりたい方
- 皆と共にSDKに対する理解を深めたい方
--必須ではありませんが、事前に簡単なAndroidアプリのプログラミングを体験しておいた方が、より楽しめると思います。
* 開催記録メモ的なもの [#y72c7d72]

** 参加要領・お願い [#rcd6cbcb]
途中退出ありで時間を延長し、13:00から19:00までの長い時間、どっぷりAndroid SDKに浸りました。
-安生さんのViewに関する開発情報の取得方法
-小山さんの2時間以上に及ぶServiceの超大作セッション
-神林さんのOpenGLを触ってみよう講座
の3本立てでした。

-Android SDKインストール済のPCを御持参下さい。
-ネットに繋ぎたい方は、E-Mobileなど各自ネット接続可能な環境を御用意下さい(必須ではありません)。
-本セッションの発表者は、参加者の間での持ち回りで担当する形になります。参加された方は、是非次回以降の発表を御検討頂ければと思います!
-- もちろん、参加したら必ず発表しなければならないという義務があるわけではありませんし、高度な内容の発表をしなければならないという制約もありません。発表内容はAndroid SDKに関係してさえいれば、各人が自分の時間・能力・志向で出来る範囲内で、何でもOKです。お気軽にどうぞ!
Intentは時間が無かったのでまたの機会に!

** お申込み・お問い合わせ [#mf0bd11c]

- お申込は締め切らせていただきました。多数の方にお申込頂き誠にありがとうございました。
**View [#k45a5784]

- お問い合わせはこちらのメールアドレスまでメールをお送り下さい。~
workshop-info@android-group.jp
-ApiDemosはよくできているが、見ること専用で部分的に取り出して使うことはできない。取り出して使いたい場合は、みんな試行錯誤してる
-ソースを勉強する上では、NotePadがおすすめ
-一番上の層がイベントを拾うので、Viewを追加する順番には気をつけよう
-ApiDemosのリストに出るのは何を基準に出してるの?
--次回までに誰かが調べる!
-AutoCompleteTextViewには、Adapterを入れると色々出る
-MapViewのズームコントロールはちょっとクセあり(以下を見よう)
--http://groups.google.co.jp/group/android-developers/browse_thread/thread/db3eee0abe7aafe4/d5d97cc7aae76505?lnk=raot
--http://www.marcelp.info/files/BasicMapDemo.zip
-UITipsは、また今度安生さんがやってくれる!

** Service [#cd2b7b18]

mp3を再生するまでの流れを、サンプルアプリケーションを元に勉強

*** エミュレータでmp3の再生方法 [#v16f8c1b]

はじめに、次のような手順で、mp3ファイルをAndroidのエミュレータで再生できることを確認しました。

1. $ANDROID_HOME/toolsにパスを通す。
2. SDカードイメージを作成する。(単位は、M:メガ, K:キロ のように大文字にすること)
   $ mksdcard 128M sdcard.img
3. エミュレータを起動する。
   $ emulator -sdcard sdcard.img
4. 作成したイメージにmp3ファイルを追加する。(エミュレータを起動後)
   $ adb push *.mp3 /sdcard
5. ちゃんとmp3ファイルを追加できたかを確認する。
   $ adb shell
   > ls -l /sdcard
   ----rw-rw- system   system    1373458 2008-11-29 14:07 minagiru.mp3
6. エミュレータでメディアの設定をする。
   [Dev Tools]->[Media Scanner]を選択し、"Media Scanner finished scanning /sdcard"とでればOK。
7. エミュレータでメディアを再生する。
   [Music]->[Songs]に追加したmp3の楽曲が表示されるので、再生できることを確認する。

Windows Vistaだとうまくいかない人がいくらかおられました。

*** ServiceとActivityの違い [#t051af9d]

SimplePlayerのサンプルアプリケーションを元に、先ほど再生したmp3の楽曲を再生するアプリケーションのソースコードをみながら勉強しました。

1. SimplePlayerは、Serviceを使っていないのでアプリケーションをバックボタンで停止すると再生も止まることを確認する。~
2. SimplePlayerをServiceで再生するためのサンプルアプリケーション(SimpleService)を実行すると、バックボタンで停止しても、再生は止まらないことを確認する。

-必ず、AndroidManifest.xmlにservice要素を追加してやる必要がある。これはよくはまるポイントなので注意。Serviceは、Activityと違い、バックグラウンドで実行されるため、Activityを停止しても、Serviceで再生している楽曲は停止しない。
-Androidでは、メディアの再生はMediaPlayerクラスを利用する。必ず、prepearメソッドをstartメソッドの前に呼び出してやること。

*** Serviceとの通信について [#i7e8bcdf]

プロセス間通信の方法としてIPCを抽象化する方法がAIDLです。IDLはCOLBAで利用
されていました。AIDLは、".aidl"という拡張しのファイルを作成して保存すると、自動的にEclipseがプリコンパイルしてくれます。このとき、AIDLと同じ名前のJavaファイルが生成されますが、このファイルには編集しないように注意してください。

ちなみに、AIDLはJavaのインタフェースの実装に似ています。AIDLファイルはクラスパスが通っているところであれば、どこに配置してもかまいませんが、package名とInterface名を配置するディレクトリとファイル名にちゃんとあわせるようにしてください。

Stubは、ActivityからServiceを呼び出すための窓口になります。また、Callbackは、ServiceからActivityに通知する手段です。Parcellableは、ActivityとServiceでclassを共有したい場合に利用します。Bundle自信もParcellableです。

*** ContentProviderで楽曲情報の取得 [#w6323c62]

Media Scannerを実行すると、ファイルを読み込みながらデータベースを作成してくれます。このとき作成されたデータベースから
楽曲ファイルの情報(タイトルやアーティストなど)を取得することができます。

-作成されるデータベースは、data/data/com.android.providers.media/databasesの中にある。
-Androidは、基本的に/data/data/アプリケーションのpackage名/databasesにアプリケーション用のデータベースを作成する。

*** Notification [#yca3b09b]

Notificationに任意のActivityを表示させるには、PendingIntentに設定するIntentに対して表示させたいActivityのクラスを指定すればよい。

*** その他 [#q8064fa1]

Androidは省電力をもっとも重視していますので、Serviceを利用する場合は本当に必要かどうかをよく考えることが重要です。

-IPC:interprocess communication
-IDL:Interface Definition Language
-AIDL:Android Interface Definition Language

** OpenGL [#abf683c7]

全体的にメモが怪しいです汗

-現バージョンのSurfaceViewはマルチスレッド強制で、onDrawが呼ばれないので自分で描画スレッドをつくってやる感じ。
-EGL10(EGLContext.getEGL()の結果)は、DEPTHの設定だけはずせば、うまくデフォルト値を利用してくれる。G1では、8bitでは動かないので、実機で動かす場合は、明示的に指定しないほうがよいでしょう。機種を意識しなくてよくなります。
-座標は右手でフレミングの法則のような形を作って中指を自分の方向に向け、親指から順番にX、Y、Z
-GL10.GL_FLOATとGLFixedの2つの方法がある。GL_FLOATは遅いが、サンデープログラマでやる分には楽なのでおすすめ。
-glDrawArraysに指定するGL10.GL_TRAIANGLE_STRIPは頂点の指定方法で、そのほかにはFAN(扇形方式)などがあるようです。GL10とGL11など、どれを利用するかは実機に乗っているバージョンにあわせる必要がありそうです。
-OpenGLを利用する場合、表面のEGLDisplayと、裏面のEGLSurfaceで2画面分を持っていて、それを切り替えることで画面をちらつきなく、表示させています。この切り替えは、G10#eglSwapBuffersメソッドで切り替えることができます。
-テクスチャの向きが逆に貼られていた
--なぜ?
-Textureが実機で表示されない場合があるので、次の2行を追加しないとダメ(高橋さんより)

 glTextParameterf(GL10.GL_TEXTURE_2D, CL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
 glTextParameterf(GL10.GL_TEXTURE_2D, CL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);

-OpenGLの勉強法は以下を参照!
--http://groups.google.co.jp/group/android-group-japan/browse_thread/thread/cd2b10bc9c67abe7

** Intent [#kf81a3b6]
時間切れのため次回

* みんなの感想 [#u0f13f46]

-もっと勉強をしたいという気になった
-OpenGLはやったことがなかったので難しかったけど面白かった
--テクスチャが出せるようになっただけでもかなり助かる
--もっと勉強したい
--ゲームを作ってみたい
-OpenGL部分は変わらないのでiPhoneから移植したい
-円卓は前の教室よりも話しやすい!
-Serviceは奥が深いということがわかった
-プロセス間通信面白い
-初心者向けとそうでないものと、別にした方がいいんじゃ
-ネットワークを絡めたところをやり直したい
-会社で試作やってるので、話せる時期が来たら話す
-サンデープログラマーだとモチベーション維持が難しいが、こういう機会があるとやる気になる
-Dalvik VMに興味がある。いずれ話したい
-ソースコードを見る時間をもうけた方がいいか。
--ソースコードを見る時間と、説明する時間と2部構成にしては?
-Androidならではのところと、一般的なところを切り分けて話すようにしたらいいんじゃ?
-どういう風にお金儲けをしていくのかというところを話したい
-今週初めて触った。動かせてよかった。
-情報の引っ張り方にヒントをもらったのが嬉しかった。
-次回はApiDemosを見てはどうか
-ServiceはIntentの理解にいい

* 次回予定 [#i0357e91]

1月下旬。発表者随時募集中です!お気軽にメール下さい。
egg あっとまーく android-group.jp