Androidでテストケースを実行する方法

1,015 views
Skip to first unread message

まいむぞう

unread,
Dec 29, 2008, 7:49:18 AM12/29/08
to android-g...@googlegroups.com
まいむぞうです。

Androidでテストケースは書けたのですが、テストを実行する方法が分からなかったので調べてみました。
自分のブログにまとめたので、興味ある方はご覧ください。

http://fromnorth.blogspot.com/2008/12/androidjunit.html


------------------------------------------------------
大路裕介(おおみちゆうすけ)/まいむぞう
mail: mai...@gmail.com
skype: maimuzo
blog: http://fromnorth.blogspot.com/
service for rubyist: http://gemspec.info
------------------------------------------------------

Hideo Kinami

unread,
Dec 29, 2008, 4:14:06 PM12/29/08
to android-g...@googlegroups.com
木南です。

まいむぞうさん、まとめていただいて、ありがとうございます!
僕も、ユニットテストは気になっていたのですが、手が付けられていませんでした。

資料を読ませていただいて、ちょっとだけわかったような気がします。
# でも、実際に自分で動かしてみないと、だめですね… 後でやっておきます。

知っていたら教えてほしいのですが、これって、テスト対象のターゲットと、ユニットテストは、同じプロセスにマッピングされるのですよね?

あと、前回のHTTPのサンプルと合わせて、勉強会のWikiに、Hello, HttpとHello,
Junitのページの「ひながた」を作ったので、良ければ、サンプルを作ってもらえませんか?

http://www.android-group.jp/index.php?%CA%D9%B6%AF%B2%F1%2FHttpClient

http://www.android-group.jp/index.php?%CA%D9%B6%AF%B2%F1%2FJunit

よろしくお願いいたします!
--
Hideo


2008/12/29 21:49 まいむぞう <mai...@gmail.com>:
--
木南 英夫 ( http://d.hatena.ne.jp/hkinami/ )

まいむぞう

unread,
Dec 29, 2008, 9:29:39 PM12/29/08
to android-g...@googlegroups.com
まいむぞうです。

> 知っていたら教えてほしいのですが、これって、テスト対象のターゲットと、ユニットテストは、同じプロセスにマッピングされるのですよね?

うーん。
まだlogcatの見方がよくわかってないので、テスト結果部分を貼っておきます。
(サンプルとして、テストに失敗しているログです。パッケージ名はぼかしてます)
以下の場合はpid=820でテストが走っているので、同一プロセスなのかも、と思っています。
(や、よくわかってないのですが)

D/AndroidRuntime( 814):
D/AndroidRuntime( 814): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
D/AndroidRuntime( 814): CheckJNI is ON
D/AndroidRuntime( 814): --- registering native functions ---
I/jdwp ( 814): received file descriptor 24 from ADB
D/ActivityManager( 46): Uninstalling process com.example.hogepackage
I/ActivityManager( 46): Start proc com.example.hogepackage for added
application com.example.hogepackage: pid=820 uid=10022 gids={3003}
I/jdwp ( 820): received file descriptor 20 from ADB
E/jdwp ( 820): Failed writing handshake bytes: Broken pipe (-1 of 14)
I/dalvikvm( 820): Debugger has detached; object registry had 1 entries
I/TestRunner( 820): started:
testShouldDelete(com.example.hogepackage.tests.RestfulRailsTest)
I/TestRunner( 820): finished:
testShouldDelete(com.example.hogepackage.tests.RestfulRailsTest)
I/TestRunner( 820): passed:
testShouldDelete(com.example.hogepackage.tests.RestfulRailsTest)
I/TestRunner( 820): started:
testShouldGetList(com.example.hogepackage.tests.RestfulRailsTest)
D/dalvikvm( 820): GC freed 4447 objects / 284288 bytes in 97ms
I/TestRunner( 820): finished:
testShouldGetList(com.example.hogepackage.tests.RestfulRailsTest)
I/TestRunner( 820): passed:
testShouldGetList(com.example.hogepackage.tests.RestfulRailsTest)
I/TestRunner( 820): started:
testShouldGetRecoad(com.example.hogepackage.tests.RestfulRailsTest)
I/TestRunner( 820): finished:
testShouldGetRecoad(com.example.hogepackage.tests.RestfulRailsTest)
I/TestRunner( 820): passed:
testShouldGetRecoad(com.example.hogepackage.tests.RestfulRailsTest)
I/TestRunner( 820): started:
testShouldPost(com.example.hogepackage.tests.RestfulRailsTest)
I/jdwp ( 820): received file descriptor 30 from ADB
D/dalvikvm( 820): GC freed 839 objects / 57536 bytes in 83ms
V/RestfulTest( 820): Response code is 422
W/System.err( 820): org.apache.http.client.HttpResponseException:
Response code is 422
W/System.err( 820): at
net.it4myself.util.RestfulRails.DoRequest(RestfulRails.java:93)
W/System.err( 820): at
net.it4myself.util.RestfulRails.Post(RestfulRails.java:55)
W/System.err( 820): at
com.example.hogepackage.tests.RestfulRailsTest.testShouldPost(RestfulRailsTest.java:28)
W/System.err( 820): at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err( 820): at java.lang.reflect.Method.invoke(Method.java:515)
W/System.err( 820): at junit.framework.TestCase.runTest(TestCase.java:154)
W/System.err( 820): at junit.framework.TestCase.runBare(TestCase.java:127)
W/System.err( 820): at
junit.framework.TestResult$1.protect(TestResult.java:106)
W/System.err( 820): at
junit.framework.TestResult.runProtected(TestResult.java:124)
W/System.err( 820): at junit.framework.TestResult.run(TestResult.java:109)
W/System.err( 820): at junit.framework.TestCase.run(TestCase.java:118)
W/System.err( 820): at
android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:155)
W/System.err( 820): at
android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:142)
W/System.err( 820): at
android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:313)
W/System.err( 820): at
android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1508)
I/TestRunner( 820): failed:
testShouldPost(com.example.hogepackage.tests.RestfulRailsTest)
I/TestRunner( 820): ----- begin exception -----
I/TestRunner( 820):
I/TestRunner( 820): junit.framework.AssertionFailedError
I/TestRunner( 820): at junit.framework.Assert.fail(Assert.java:47)
I/TestRunner( 820): at junit.framework.Assert.assertTrue(Assert.java:20)
I/TestRunner( 820): at junit.framework.Assert.assertTrue(Assert.java:27)
I/TestRunner( 820): at
com.example.hogepackage.tests.RestfulRailsTest.testShouldPost(RestfulRailsTest.java:38)
I/TestRunner( 820): at java.lang.reflect.Method.invokeNative(Native Method)
I/TestRunner( 820): at java.lang.reflect.Method.invoke(Method.java:515)
I/TestRunner( 820): at junit.framework.TestCase.runTest(TestCase.java:154)
I/TestRunner( 820): at junit.framework.TestCase.runBare(TestCase.java:127)
I/TestRunner( 820): at
junit.framework.TestResult$1.protect(TestResult.java:106)
I/TestRunner( 820): at
junit.framework.TestResult.runProtected(TestResult.java:124)
I/TestRunner( 820): at junit.framework.TestResult.run(TestResult.java:109)
I/TestRunner( 820): at junit.framework.TestCase.run(TestCase.java:118)
I/TestRunner( 820): at
android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:155)
I/TestRunner( 820): at
android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:142)
I/TestRunner( 820): at
android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:313)
I/TestRunner( 820): at
android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1508)
I/TestRunner( 820): ----- end exception -----
I/TestRunner( 820): finished:
testShouldPost(com.example.hogepackage.tests.RestfulRailsTest)
I/TestRunner( 820): started:
testShouldPut(com.example.hogepackage.tests.RestfulRailsTest)
I/TestRunner( 820): finished:
testShouldPut(com.example.hogepackage.tests.RestfulRailsTest)
I/TestRunner( 820): passed:
testShouldPut(com.example.hogepackage.tests.RestfulRailsTest)
I/TestRunner( 820): started:
testAndroidTestCaseSetupProperly(com.example.hogepackage.tests.RestfulRailsTest)
I/TestRunner( 820): finished:
testAndroidTestCaseSetupProperly(com.example.hogepackage.tests.RestfulRailsTest)
I/TestRunner( 820): passed:
testAndroidTestCaseSetupProperly(com.example.hogepackage.tests.RestfulRailsTest)
I/TestRunner( 820): started:
testSholdDeleteKeys(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): finished:
testSholdDeleteKeys(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): passed:
testSholdDeleteKeys(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): started:
testShouldBeAbleToSetAndGet(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): finished:
testShouldBeAbleToSetAndGet(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): passed:
testShouldBeAbleToSetAndGet(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): started:
testShouldCreateNewDB(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): finished:
testShouldCreateNewDB(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): passed:
testShouldCreateNewDB(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): started:
testShouldCreateSeed(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): finished:
testShouldCreateSeed(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): passed:
testShouldCreateSeed(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): started:
testShouldHaveRestoredData(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): finished:
testShouldHaveRestoredData(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): passed:
testShouldHaveRestoredData(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): started:
testShouldUpdateKeys(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): finished:
testShouldUpdateKeys(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): passed:
testShouldUpdateKeys(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): started:
testAndroidTestCaseSetupProperly(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): finished:
testAndroidTestCaseSetupProperly(com.example.hogepackage.tests.SettingsTest)
I/TestRunner( 820): passed:
testAndroidTestCaseSetupProperly(com.example.hogepackage.tests.SettingsTest)
D/ActivityManager( 46): Uninstalling process com.example.hogepackage
D/ActivityManager( 46): Force removing process
ProcessRecord{434c99d8 820:com.example.hogepackage/10022}
(com.example.hogepackage/10022)
I/Process ( 46): Sending signal. PID: 820 SIG: 9
D/AndroidRuntime( 814): Shutting down VM


> あと、前回のHTTPのサンプルと合わせて、勉強会のWikiに、Hello, HttpとHello,
> Junitのページの「ひながた」を作ったので、良ければ、サンプルを作ってもらえませんか?

はい。了解です。
(自分はRails好きなので)今RESTful用のクラスを作っていて、このクラスは公開しようと思っていたので
このクラスとテストが完成したらチュートリアル風にまとめてみますね。

でも、説明できるほどJavaに慣れてないので、ミスリードの可能性もあるような・・・。
あと、基本的にソースに注釈付けるような感じになりそうな気も・・・。

一旦動いたら、GitHubにでも上げて、確認してもらってからチュートリアル作った方がいいかなぁと、今書きながら思いました。


2008/12/30 6:14 Hideo Kinami <hki...@gmail.com>:
--

まいむぞう

unread,
Jan 5, 2009, 9:38:00 AM1/5/09
to android-g...@googlegroups.com
まいむぞうです。

>> あと、前回のHTTPのサンプルと合わせて、勉強会のWikiに、Hello, HttpとHello,
>> Junitのページの「ひながた」を作ったので、良ければ、サンプルを作ってもらえませんか?
> はい。了解です。
> (自分はRails好きなので)今RESTful用のクラスを作っていて、このクラスは公開しようと思っていたので
> このクラスとテストが完成したらチュートリアル風にまとめてみますね。
> でも、説明できるほどJavaに慣れてないので、ミスリードの可能性もあるような・・・。
> あと、基本的にソースに注釈付けるような感じになりそうな気も・・・。
> 一旦動いたら、GitHubにでも上げて、確認してもらってからチュートリアル作った方がいいかなぁと、今書きながら思いました。

の続きですが、テストケースを書いてバグ潰していたら思ったより時間が掛かってしまい、
らちがあかないので失敗してしまうテストケースごとGitHubに登録しました。

http://github.com/maimuzo/android_utils/tree/master

一応apache license 2.0にしてあるので、ご自由に使ってください。
(というか、書き方に自信がないのでツッコミまたはパッチください)

テストケースのチュートリアルですが、一応叩き台を
how_to_execute_testcases.utf8.ja.txt
にまとめました。

また、RESTfulなHTTPクライアントのラッパークラスと、
SQLiteの使い方の叩き台になりそうな設定値保存クラスもつけました。
RESTfulな方のテスト実行用サーバサイドスクリプトもRailsで作って付けました。
(内容はandroid_util_tests/test_server/commands.txt参照)
RESTfulな方は、DOMドキュメントを吐くようにしてあるで、そのままアプリを組めそうです。
(メモリ使用量を気にしなければ)

みなさんの意見を聞いてからwikiにまとめようかなぁと思っています。
(ここはこうした方がメモリ効率良いよとか)
あまり時間をおいてもあれでしょうから、今週末ぐらいで一旦締め切ってwikiにまとめますね。

# あぁ、how_to_execute_testcases.utf8.ja.txtの最後にadb logcatと結果サンプルぐらい必要ですね…

--------------------------------------------------------------
大路裕介(おおみちゆうすけ)/まいむぞう
mail: mai...@gmail.com
skype: maimuzo
blog: http://fromnorth.blogspot.com/
service for rubyist: http://gemspec.info
for Android users: http://www.android-app.info/
--------------------------------------------------------------


2008/12/30 11:29 まいむぞう <mai...@gmail.com>:

まいむぞう

unread,
Jan 13, 2009, 4:40:57 AM1/13/09
to android-g...@googlegroups.com
まいむぞうです。

> みなさんの意見を聞いてからwikiにまとめようかなぁと思っています。
> (ここはこうした方がメモリ効率良いよとか)
> あまり時間をおいてもあれでしょうから、今週末ぐらいで一旦締め切ってwikiにまとめますね。

やっとGitHub上のコード

> http://github.com/maimuzo/android_utils/tree/master

で全テストをパスできたので、
とりあえずHTTPアクセス部分をチュートリアルをまとめました。
http://www.android-group.jp/index.php?%CA%D9%B6%AF%B2%F1%2FHttpClient

一応レビュー中という扱いにしています。
変なところがあったら教えてください。

# 流れとしては、HTTPアクセス編とXMLパース編とUnitTest実行編かなぁと。
# XMLパース編のページ作ってもいいですか?

--------------------------------------------------------------
大路裕介(おおみちゆうすけ)/まいむぞう
mail: mai...@gmail.com
skype: maimuzo
blog: http://fromnorth.blogspot.com/
service for rubyist: http://gemspec.info
for Android users: http://www.android-app.info/
--------------------------------------------------------------


2009/01/05 23:38 まいむぞう <mai...@gmail.com>:

Noritsuna Imamura

unread,
Jan 13, 2009, 5:06:43 AM1/13/09
to android-g...@googlegroups.com

のりつな@事務局長です。


> > みなさんの意見を聞いてからwikiにまとめようかなぁと思っています。
> > (ここはこうした方がメモリ効率良いよとか)
> > あまり時間をおいてもあれでしょうから、今週末ぐらいで一旦締め切ってwikiにまとめますね。
>
> やっとGitHub上のコード
>
> > http://github.com/maimuzo/android_utils/tree/master
>
> で全テストをパスできたので、
> とりあえずHTTPアクセス部分をチュートリアルをまとめました。
> http://www.android-group.jp/index.php?%CA%D9%B6%AF%B2%F1%2FHttpClient
>
> 一応レビュー中という扱いにしています。
> 変なところがあったら教えてください。

おお。すごい。気合いはいってますね。

ぜひ、↓がんがんお願いします( ̄^ ̄ゞ ケイレイ!!
android_utils使うにも、必須ですから!


> # 流れとしては、HTTPアクセス編とXMLパース編とUnitTest実行編かなぁと。
> # XMLパース編のページ作ってもいいですか?


以上。


-----------------------------------------------------------
    SIP関連総合開発プロジェクト「SIProp Project」

      代表:今村謙之(Noritsuna Imamura)
        mailto:nori...@siprop.org
       webpage:http://www.siprop.org/
       blog:http://noritsuna.siprop.org/

  Projects:
    クライアント間マッシュアップ用UA Servlet
              アプリケーションサーバ「雷電」
       http://raiden.siprop.org/
-----------------------------------------------------------


Hideo Kinami

unread,
Jan 13, 2009, 4:16:48 PM1/13/09
to android-g...@googlegroups.com
まうむぞうさん

木南です。
ありがとうございます!

動作確認しました。きちんとHTMLを表示することができました。
# 力作ですね。GitHubは、初めて使いました。勉強になります。

少し気になった点です。

1) Projectのインポート
ダウンロードしたプロジェクトをEclipseに読み込むのは、Importのほうがよいと思います。
- File > Import > Existing Projects into workspace
そうすれば、警告もでないし、プロジェクト名などを自分で入れる必要もありません。

ちなみに、「Create project from existing source」で読み込むか、「Existing Projects
into workspace」で読み込むかは、ディレクトリーに.projectがあるかどうかで切り分けます。.projectがあればimportで読み込んで、なければ、Create
Projectで読み込みます。

2) DefaultHttpClientのサンプルも欲しい
できれば、ユーティリティを使わない、DefaultHttpClientのサンプルも欲しい気がします。別のページがよいですかね?

3) EditTextの中のandroid:text="EditText"は、android:hint="Query String"とかにするとよいかも。
入力する内容を表示するのは、hintが便利です。

では!
--
Hideo


2009/01/13 19:06 Noritsuna Imamura <nori...@siprop.org>:

まいむぞう

unread,
Jan 14, 2009, 5:25:06 AM1/14/09
to android-g...@googlegroups.com
まいむぞうです。

> 1) Projectのインポート
> 3) EditTextの中のandroid:text="EditText"は、android:hint="Query String"とかにするとよいかも。

対応してみました。

> 2) DefaultHttpClientのサンプルも欲しい

ResfulClinet.Get()とDoRequest()のソースを載せて、番号振ってみました。
これで概要は理解できると思うのですが、どうでしょう?
(といっても、これ以上詳しい使い方理解してないのですが・・・)


--------------------------------------------------------------
大路裕介(おおみちゆうすけ)/まいむぞう
mail: mai...@gmail.com
skype: maimuzo
blog: http://fromnorth.blogspot.com/
service for rubyist: http://gemspec.info
for Android users: http://www.android-app.info/
--------------------------------------------------------------


2009/01/14 6:16 Hideo Kinami <hki...@gmail.com>:

Hideo Kinami

unread,
Jan 14, 2009, 6:45:56 AM1/14/09
to android-g...@googlegroups.com
木南です。

早速の対応ありがとうございます!
ばっちりです。
次のセミナーでは、使わせていただこうと思います!
--
Hideo

2009/01/14 19:25 まいむぞう <mai...@gmail.com>:

まいむぞう

unread,
Jan 18, 2009, 11:03:50 PM1/18/09
to android-g...@googlegroups.com
まいむぞうです。

>> # 流れとしては、HTTPアクセス編とXMLパース編とUnitTest実行編かなぁと。
>> # XMLパース編のページ作ってもいいですか?

前回からの続きで、XMLパース編+SQLite基礎編を作りました。

http://www.android-group.jp/index.php?%CA%D9%B6%AF%B2%F1%2FXMLSQLite

レビューお願いします。

なお、RestfulClientにBASIC認証機能を付けたので、HTTP編を試した方はGitHubから再度ソースを落としてください。

# SQLiteは別チュートリアルに切り出すべきでしたでしょうか?

--------------------------------------------------------------
大路裕介(おおみちゆうすけ)/まいむぞう
mail: mai...@gmail.com
skype: maimuzo
blog: http://fromnorth.blogspot.com/
service for rubyist: http://gemspec.info
for Android users: http://www.android-app.info/
--------------------------------------------------------------

2009/01/14 20:45 Hideo Kinami <hki...@gmail.com>:

Satoshi Konno

unread,
Jan 22, 2009, 10:32:19 AM1/22/09
to android-g...@googlegroups.com
はじめまして、今野です。

> 前回からの続きで、XMLパース編+SQLite基礎編を作
> りました。
>
> http://www.android-group.jp/index.php?%CA%D9%B6%AF%B2%F1%2FXMLSQLite
>
> レビューお願いします。

「XMLパーサはorg.w3c.domを .... 」の記述
は、以下の表現が
適切でしょうか。

Java API for XML Processing
http://ja.wikipedia.org/wiki/Java_API_for_XML_Processing

ただm3の頃からJAXPの実装度が低く、例えば
Attributeが取得できない等の
機能的欠如も多々あったので、結局org.kxml2を利用して実装
していました。

まいむぞうさんの記載をみても、1.0でもあまり状況は変わっ
ていないようですが ......
そろそろ移植を再会するので、最新の状況は自分でもチェックして
みます。

後、蛇足ですがHTTPクライアントについては、HttpURLConnection
も利用できるので
従来のJava開発者にはなじみ深い(=説明しやすい)
かなぁとの感想ももちました。

以上、簡単ですが、ご参考ください。

--------------------
Satoshi Konno
http://www.cybergarage.org

Hideo Kinami

unread,
Jan 23, 2009, 10:45:33 PM1/23/09
to android-g...@googlegroups.com
木南です。

> 前回からの続きで、XMLパース編+SQLite基礎編を作りました。
> http://www.android-group.jp/index.php?%CA%D9%B6%AF%B2%F1%2FXMLSQLite
> レビューお願いします。

亀レスですみません。
試してみました。

全体的には、チュートリアルにしてはちょっと重いかなぁという感じもしましたが、がんばって解析してみようという人には良いかもしれません。

> # SQLiteは別チュートリアルに切り出すべきでしたでしょうか?

そうですね。やはり、別のほうが良い気がします。

内容に対するコメントです。

- 確認中:XMLパーサはorg.w3c.domを使っているという表現で良いでしょうか? これってインターフェイスしか定義してませんよね?
-- すでに指摘されていますが、「JAXP(Java API for XML Processing)を使っている」のほうがよいかもしれません。
-- Androidには、XmlPullParserも入っているので、こっちのチュートリアルも欲しいかも

- Activity Name: .HelloXMLActivity
-- 先頭のドットはいらないと思う。

- もうソース無くても大丈夫でしょう?
-- このチュートリアルからやる人もいるかもです。いれておいたほうが良いかも。

- RestfulClientクラスにBASIC認証機能を付けたので、先のチュートリアルを試した方も、再度ダウンロードし直してください。
-- これは、ちょっと、時間がたつと意味がわからなくなりそうですね。どこかの時点で消してもよいと思います。

- Androidでorg.apache.http.clientを使用するの手順5に従い、net.it4myself.utilパッケージをビルドパスに加えます。
-- メンテナンスの手間を考えるとこうしたほうがよいのですが、読む人からすると、ここにも説明が欲しいかも。でも、リンクがはってあるからいいかぁ。

- public class helloXMLActivity extends ListActivity {
-- 先頭が小文字になっています。

- SQLiteの使い方を追ってみる
-- やっぱりここは、別のページにしたほうがよいと思います。

-- パスワードフィールドが見えるのがちょっと違和感。パスワード用のエディットテキストにandroid:password="true"を入れる

では!
--
Hideo


2009/01/19 13:03 まいむぞう <mai...@gmail.com>:

まいむぞう

unread,
Jan 27, 2009, 8:17:55 AM1/27/09
to android-g...@googlegroups.com
まいむぞうです。

今野さん、木南さん、フォローありがとうございます。
ちょっと仕事忙しくて手を付けれないので、方針だけ。

基本的に、ご指摘いただいたところは見直しかけようかと思っています。
(ずるずる来ていますが)

> 全体的には、チュートリアルにしてはちょっと重いかなぁという感じもしましたが、がんばって解析してみようという人には良いかもしれません。

これ、ちょっと考えてしまいました。

実は当初、JavaDocの対になる、ちゃんと動いてちょっとコメントが載っているぐらいのソースコードがあれば
十分かなと思っていました。動くコードがないと、APIの動作イメージがわかないという点と、
おおまかな使い方や流れは理解できると思うので。

でも、このチュートリアルの目的って、どこにあるのかなぁと考え込んだのです。
勉強会の教材と言うことであれば、約1時間ぐらいの内容にまとまっていた方が良いですよね。

また、周辺知識は持っているけど、Androidの事情を知らない人向けに、
さっと読んで流れや何が出来るか理解するためのチュートリアルという視点もありますよね。

HTTPとかDBなども、ちゃんと説明するなら周辺のお作法やセキュリティ上の考え方も
織り交ぜる必要があるんでしょうけど・・・

結局は、きっかけを提供するためのチュートリアルなのであって、本当にアプリを作るぐらいの知識が必要であれば、
市販の本とJavaDocを一通り読む必要があるのかなぁと思いました。

現状では、市販の本の内容が古くなってしまって、動かないサンプルとかもあるので、
今から覚えるのであれば、一部で話題になっているPDF版の書籍なども(流れを掴むためのサンプルとして ※1)いいかもしれませんね。
http://dream.mods.jp/android/index.html

# 自分も今読んでます
# ※1 特定の書籍を推す意図はないのですが

脱線しましたけど、結局「細かい配慮」より「数(または網羅率)」なのかなぁと思いました。
みなさん、どっちが欲しいですか?

-- Androidには、XmlPullParserも入っているので、こっちのチュートリアルも欲しいかも

のXmlPullParserのチュートリアルは自分も欲しいなぁと思っていたのですが、
そもそもの話で、DOMとSAXとPullParser(という表現でよい?)って、使い分けはどう考えればいいんでしょう?

DOMとSAXはチュートリアルで触れているとおり特徴を掴んでいるのですが、
SAXとPullParserは(使ったことがないので)どう使い分けるのかが解らないのです。

自分がPullParserのチュートリアルを書くとしたら、どこかのサイトの受け売りになっちゃうのですが、
だれか「Androidで使うなら」という前提で、SAXとPullParserの違い(使い分け)を含めてチュートリアル書ける方いませんか?

> - もうソース無くても大丈夫でしょう?
> -- このチュートリアルからやる人もいるかもです。いれておいたほうが良いかも。

> - Androidでorg.apache.http.clientを使用するの手順5に従い、net.it4myself.utilパッケージをビルドパスに加えます。
> -- メンテナンスの手間を考えるとこうしたほうがよいのですが、読む人からすると、ここにも説明が欲しいかも。でも、リンクがはってあるからいいかぁ。

あまり拘るところでもないので、どちらでもいいと言えばいいのですが、
今後チュートリアルが高度化することを考えれば、
本筋じゃないところは省いてしまった方が良い気がしています。
とりあえず、前回のチュートリアルにリンク貼るぐらいにしておきますね。

# あーでも、「チュートリアル」なら、少なくともコピペできる程度、実際の流れを再現した方がいいのか・・・

手が空いたら、できるところから直し入れますね。

--------------------------------------------------------------
大路裕介(おおみちゆうすけ)/まいむぞう
mail: mai...@gmail.com
skype: maimuzo
blog: http://fromnorth.blogspot.com/
service for rubyist: http://gemspec.info
for Android users: http://www.android-app.info/
--------------------------------------------------------------

2009/01/24 12:45 Hideo Kinami <hki...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages