ラベル eclipse の投稿を表示しています。 すべての投稿を表示
ラベル eclipse の投稿を表示しています。 すべての投稿を表示

2011年12月9日金曜日

Androidで「ものづくり」 第3回


昨日、奈良県工業技術センターで行われた
Androidで「ものづくり」  ~ものづくりシステムへのAndroid導入法~
の第3回、つまり最終回が終了しました。

1,2回がAndroidの組込ボードへのポーティングとNDKによるドライバレベルの実装、
という観点からのテーマでOESFのテキストに従って行われたのに対して
最終回である今回は、ふつ~にAndroidアプリを開発して、WifiのUDPダイアグラムで
自走模型をうごかしてみる、という内容。
つまり7月29日に行われた、奈良高専主催のアンドロイドワークショップの焼き直し
版でした。
ワークショップのときは午前の2時間、ということで時間切れ続出だったのと
自分自身にもアンドロイドの経験値がほとんどなかったので、こういう小難しいものなのか~
という印象しかなかったんですが、さすがに3ヶ月も経過するとその間の経験値上昇分で
いろいろ見えてくるモノがありました。

ダメだしする気は毛頭無いけど、ちょっとサンプルがお粗末だったかなぁ、というのが
正直なところ。3~4ヶ月あったにも関わらず、ほとんどコーディングが見直されておらず
個人的な印象では
「こりゃダメじゃん」(あくまで個人的印象ですよ)
なところが盛りだくさん。

まず、基本的なところで、フォームにボタン貼り付けてそれぞれの
コードを記述する、という部分。
いろんな本をよんだり、話をしていて一般的なのは
1.onCreateのなかで
    button.setOnClickListener(
          new View.OnClickListener(){
                 public void onClick( View v ){
                      ......
                 }
          }
     }
    みたいに記述する。

2.アクティビティの先頭で、implements View.OnClickListener を記述して
    onCreate内部で、
           Button.setOnClickListener(this);
    を実装した上で
    public void onClick( View v) {
         if ( v.getId() == R.id.Button1 ){
              .....
         }
    }
    を記述する。

3.XMLの<Button >のなかに、android:onClickで関数名を記述して
    アクティビティのコード内に直接関数記述する方法

の3種にほぼ集約されるとおもいます。
おそらく、これ以外の方法を公然となさっているパターンは少ないんじゃないかと。


で、今回の会ではこのいずれでもない状態で進んでしまいます(汗)
どうするかというと

メインのアクティビティのonCreateで
   Button.setOnClickListener( new XButtonListener() );
と記述した上で、当然、newしたリスナの実体がないので、
  Create class
して、実体を別クラスに生成するという荒技をつかいます。
初期のうちはこれでもちゃんと動作しますし、ソースが分割されていく、
というのを是とすれば、別に問題なくうごきます。

ただ、このあと別の画面へのインテントやWiport模型への各種コマンド発行ボタン
を実装したときに徐々に破綻していきます。
別の画面で設定変更を行って、メインのイベントに内蔵された機構にアクセスする
ときにクラスが分かれており、その都度生成を繰り返すため、
すべてのソースに同じ記述を繰り返すほか、本来必要でないfinal 宣言までつけないと
ダメとか、もうハチャメチャ。

すべては、必要のない記述と新規クラス生成をおこなったことを追認しようとして
穴埋めした結果におもえてしまう。

うごけばいいや、的な発想で教えられてもこまるんだよなぁ。
ことに、高専の先生であることが最大にイタイ。

まあ、コードの設計によって、最終コードの品質がここまでかわるんだ!ってのが
実感できたのは収穫だったけど。


このあたりのことも含めて反省会なんかでコードレビューも含めて座談会なんかが
開かれたらおもしろいなぁ。


総括としては
1.前2回のポーティング作業で、NDKで開発するのは問題ないとしても
    デバッグ等が結構面倒で、必要最小限にとどめるべきじゃないか?というのが
    得られた感触。
    NDKつかえば、たしかに高速化やLinuxの技術がつかえるなどのメリットもあるかも
    しれないけど、新たなバグの入り込む余地が爆発的にふえるにも関わらず、
    十分なデバッグ手法があるようにも思えないのが、最大の理由。
    つまり、どうしてもNDKをつかわないとダメか、という判断の上で決断すべきとおもう。
    機種(CPU)依存という新たな足かせも発生するというデメリットもおおきくなり
    アンドロイドという汎用OSをつかうメリットを失わせる危険もある

2.SDKによるアプリ開発のほうは、できるだけ標準的な手法に基づくほうが望ましい。
    特殊なやり方を推し進めようとすると、破綻する可能性が高い!


2011年11月11日金曜日

Android組み込み講座...

昨日、奈良県工業技術センターで行われた
Androidで「ものづくり」  ~ものづくりシステムへのAndroid導入法~
に参加してきました。といっても、自前のPC持ち込みで聴講生としてですが。

 <予定>
【1日目】 Androidの概要と外部制御の基礎
【2日目】 組み込みシステムとしてのAndroid プラットフォーム 開発入門1
【3日目】 組み込みシステムとしてのAndroid プラットフォーム 開発入門2

当初 アプリ側から一般的なアンドロイド端末をつかっていろいろするか、
と想定していたのですが、蓋をあけてみれば、
「まず、armadillo440にAndroidをポーティングしてみましょう!」
でした。
「え~~!そっからいくの~~」みたいに思えた人がどれくらいいたのでしょう。
見たところ、それほど経験値もなさげな感じだったんですが。
実際、Androidとは、という以前にUbuntuLinuxの使い方から入って...
のところでみんな混沌として、前処理としてIP設定のためにviをつかうハメに
なったところでもうパニック...。
ぼくらでさえ、viのコマンドモード、
ほどんど覚えられてないし...
めんどくさい。
linuxでもできるだけnanoのほうをつかう私ですから、
viは鬼門なんだけどね。
まあ、なんとかこっちは対応できたけど。

さすがに、イメージファイルを作成する作業を
まともにやると時間がないので
そこは飛ばして...となっているのがミソだったんだが。

図らずも、androidの2.2のソース一式が
ダウンロード&展開されたVMwareイメージ
がいただけたので、収穫は大だったけど。

それにしても、kermitとかhermitの使い方の
勉強くらいしていったほうがよさげな感じだった。



いずれにせよ、次回はソフト作成もはいってくるだろうから、おもしろくなりそうだ!



2011年10月29日土曜日

Android向け業務アプリ開発 実践セミナー

10月28日、東京コンファレンスセンター品川で、日経ソフトウエア主催で
Android向け業務アプリ開発 実践セミナーがおこなわれたので行ってきた。
朝10:30からということで、5時起きで新幹線で移動開始。
7:17分のN700系のぞみで、びゅ~~んと移動。
快晴で富士山もベスト眺望を満喫し、10時ちょっと前に到着。
品川駅のちかくなのはわかってたけど、
いざ到着すると近隣のビル地図などもなく 途方にくれ、
やむなくauのナビウォークで検索すると、目の前のビルだった. Orz
会場では結構オタクっぽい人がいるようだったけど、半数はおじさん
(そのうち1人は自分だけど(@@;) 

着席番号は40番で、全部で77~8人が参加だったみたい。
最初の画面をつくるところまでは楽勝。アクティビティのコード追加のあたりも
だいたいわかってるので、スイスイ。
このあたりで、すでに焦りまくってるひともちらほら。
う~ん、初心者やしこんなもんか。
講座的にはxmlとソースの関係などの説明はあまりせず、
必要最小限の相関だけを伝えながら どんどん打ち込んで行かせる手法だ。
僕的には、「これがベストかも!」とおもったのは、各作業に対して、

「では3分差し上げます。打ち込んでください」
「では8分差し上げます。打ち込んで実行してみてください」


のように、とにかくEclipseのコード補完機能をフルに使いこなして
やっと余裕がでる程度のスピード感をもって作業がすすんだこと。
最初は引数の事前入力とか省力化だけをイメージして利用してたけど、
どんどん項目がすすんでくるとメソッドとかをダイレクトに参照できることがわかって、
「!!!」
みたいな。
残念ながらネット環境ではなかったので、データベース登録用の元データは
テキストをjson形式で用意しておいて、ローカルファイルから読み出すようにコーディング。
HTTPから読み出す等価コードも公開していて、となりのおじさんはそっちもテストしてた。
本をよんでもいまいちピンとこない複数画面の遷移も
 
「レイアウトつくって」
「クラスつくってsuperclass設定をandroid.app.Activityにして。」


ほら簡単でしょ?って。
たしかに簡単なんだが、あまりにも簡単で拍子抜け。本でよむとウザいのに。
う~ん、実践恐るべし。
あとはintentで起動依頼して、データを新規クラスItemにつっこんで
Intent.putExtraでこのクラスごとごっそり新画面に渡すと。
結局、データの生成部分と移行データから修正後のデータをマスターの画面
にもどすところはないんだけど、そのためにSQLiteをつかってやったら?という意向
だったのかなぁ。まあ、なんとでもなるけどね。
なんだかんだいっても、かなり勉強になった。
でも久々にクタクタになった1日だった...