■ホビーロボット部品の製造・販売 
  モータコントローラ、センサ、音声、画像、無線モジュールなど、
■ホビーロボット制作記事のページ (各種マイコン、PCとの接続事例)
■特殊メイク、特殊材料の販売 ※特殊メイクのコーナーはこちらに移りました。
Top(お知らせ) 製品紹介 使い方とサンプルプログラム 通信販売 リンク ロボット掲示板 会社案内
 Easy Robotics for all enthusiastic people!!!  ---HOBBY ROBOT PARTS SHOP ASAKUSAGIKEN---   Since 2003...


AGB65-ANDROID
はじめてAndroidアプリを開発する方へ、
スマホの選定や開発の仕方など、

はじめに

 このページでは、Androidアプリ開発方法を説明します。対象は、Androidスマートフォンを活用して動くものを作ってみたい、とくに、「Cやマイコン工作はできるけどAndroid(JAVA)アプリはやったことが無い」という方向けです。かく言う筆者も今回初めてAndroidアプリを組んだというビギナーです。ビギナー視点での開発のポイント、ハマった点などをご紹介します。
 
 ※以下の情報は2012年6月現在のものです。ご注意ください。

 AGB65-ANDROIDについてはこちらを参照願います。


<スマートフォン>

 最近ではスマートフォンが普及していますが、スマートフォンの主流は現在のところiPhoneとAndroid携帯です

 iPhoneはDockコネクタという各iPhone共通のコネクタ仕様で、ここからアクセサリに電源を供給したり、USB、音声、FireWireと、いろいろなインターフェイスが出ています。しかし、正式にiPhone対応のアクセサリを作ろうとする場合、Appleから認証チップや純正Dockコネクタを購入し、Appleと契約を交わした上で自基板に搭載しなくてはなりません。接続時にはApple規格で認証チップをつかった認証をパスしないとアクセサリとの通信ができません。

 AndroidはほとんどのスマートフォンにUSBmicroコネクタが搭載されています。ここから充電しているかと思います。しかし、(タブレットではない)スマートフォンにはUSBスレーブ機能しかついていない(現時点の話)ので、アクセサリに電源を供給したり、このコネクタでクレードル接続したりはできません。USBケーブルで接続する、電源を持ったアクセサリしか接続できません。


<AndroidのOSのバージョン>

  初期のAndroidスマートフォンのOSは、USBスレーブはついていたが、主にPCとのファイルのやりとりなどのためであり、アクセサリを作ろうとするとかなり手間がかかったようです。AndoridのOSは頻繁にバージョンアップしています。現在日本でよく使われているのは2.2以降だと思います。その後、タブレットが出て、タブレット用のバージョンは3.xになりました。つまりこの時、携帯は2.x、タブレットは3.xで始まるOSバージョンでした。
 2011年5月にGoogleから、USBを用いたアクセサリを作るオープンな規格「Android USB Accessory」が発表され、自由にアクセサリの開発、配布が行えるようになりました。
これに対応するには、OSのバージョンは2.3.4以上、または3.1以上が必要でした。
 尚、このgoogleのページは英語ですが、日本語に翻訳されたページもあります。

 ソフトウェア技術ドキュメントを勝手に翻訳(Android開発ガイド)
 
 その後、スマートフォンとタブレットのOSが統合されたAndroid4.xが出て、一部の国内携帯にも搭載され始めました。後で説明しますが、まだスマートフォンを用意していない場合は、できれば4.xを使うことをお勧めします。設定などでハマる可能性が低くなります。


<自作ロボット+スマートフォン?>

 最近はプロセッサレベルのCPUも安くなっており、OSが搭載できるマイコンボードも安価に入手できるようになりました。AndroidもLinuxベースのOSですが、Androidが搭載されているスマートフォンなら、基板だけでなく、加速度センサー、GPS、Wifi、Bluetoothなど、ロボット向きのハードウェアもついています。秋葉で中古が買えたりと、電話として使うのではなく、「ロボット向きのハードが付いた小型コンピュータ」と考えるとスマートフォンはロボットの頭脳としてよいハードウェアだと思います。


<外界(クラウド)とロボットをつなげたら...>

 スマートフォンなので電話回線で外界と通信も可能です。秋葉で買った中古スマートフォンでも、データ通信専用のSIMカードを買えば、電話回線でインターネットに接続できます。安いカードですと一ヶ月1000円ぐらいのものもあるようです。筆者はb−moblileのSIMカードを使っています。ということでロボットをインターネットに接続する、ということが可能になるかと思います。
 Androidはクラウドを利用するライブラリもそろっており、GPSからの情報で現在位置を割り出したり、マイクからの音声で音声認識したり、ということがライブラリを使うだけで比較的簡単にできます。自作ロボットで音声認識をやろうとすると、非常に複雑な計算をする必要がありますが、Androidの場合は音声データをグーグルのサーバに送れば、認識結果の候補がテキストで送られてきます。


 ということで、Androidスマートフォンとロボットを組み合わせれば、従来はかなり難しかったことが、比較的簡単に実現できます。



勉強方法参考書籍、

 
 
 とはいえ、このような工学的な話だと、近くに詳しい人がいる、ということは無いと思いますので人にはなかなか聞けません。Androidの場合は「日本アンドロイドの会」という団体があり、有志が集まって勉強会を開いたりしています。このメーリングリストに登録すれば、フォーラムでなにかを聞いたり、とかができます。 初めての分野を勉強する場合、人に聞く、本を読む、ネットで調べるなどの方法がありますが、最近の若い人に聞くと、ほとんどネット検索で済ませる、という方が多いですね。私のようなネット世代ではない年代は、誰かに聞いたり本を読んだりしたいと思います。


 筆者の場合は、新しいことをやるときはまずとにかく本を読みます(読みたい)。今回は10冊ほど買い、初級本から順番に例題プログラムを練習する、ということを繰り返しています。慣れてきたら中級本をリファレンスに自作プログラムを組み、わからないことがあるとアンドロイドの会のフォーラムで聞く、という流れ。筆者が読んだ本の中で特にお勧めを以下の通り紹介します。

 ちなみに、初級本は、人によって違うので書店で一番新しいものを目安にご自分に合ったものを選んでください。古い本だと画面が違ったりして、環境のインストールすらできない、ということにもなりかねません。


  Androidプログラミングバイブル
 
 
 かなり沢山の事例が載っており、かつわかりやすい本です。Androidにとにかく「慣れる」には一番よいと思います。一度読んだ後でもリファレンスとしても使えます。



  スマートにプログラミング Android入門編
  

  アクティビティ、インテント、サービスプロバイダ、など、固有のわかりづらいことがらを比較的わかりやすく書いてあります。



  独習Java
  

 本のサンプルコード打ちにも慣れてくると、そろそろオリジナルなプログラムを作る段階になるかと思います。AndroidはJavaで開発しますので、Javaを勉強する必要がありますが、とりあえずはこれがよいかと思います。
 C言語でマイコンプログラムを組んでた方々には、オブジェクト指向の概念がわかりづらいかと思いますが、時間がかかるものだと思って、とにかく量を書くしかないかと思います。



 Android Layout Cookbook
 

 慣れてきたら、見た目がかっこいいアプリを作りたくなります。
 アプリの画面はXMLでも記述できます。というかおそらくXMLで記述することが主流のようです。この本はXMLでのAndroidアプリの画面を作るときにのポイントなどがわかりやすく書いてあります。



スマートフォン選び


 今回、タブレットについては説明を割愛します。ロボットに搭載するにはタブレットよりも小さいスマートフォンの方が適当だという考えで、以降はスマートフォンのみについて説明します。選び方は人それぞれなので、あくまでも参考ということでお願いします。

 Android USB Accessory を使うので、スマートフォンは当然2.3.4以上になります。2012年6月現在ではAndroid 4.x 対応のスマートフォンも国内で流通しています。3.xはタブレットになりますので、スマートフォンの場合は2.3.4以上か、4.x以上になります。
  デバックするときにWifi接続しますが、2.3.4だとGoogleのサポートページの通りに接続できない場合があります。筆者が持っている4.xの端末だと問題は起きてませんので、4.xの方がお勧めです。

 バージョンの確認は、「設定」−>「端末情報」−>「Androidバージョン」で確認できます。

 


 スマートフォンをすでに1台持っているが2.3.3以下という方もいるかと思います。ロボット用に、もう1台欲しいという場合は、4.xに機種変更するという手もあります。機種変更した後は2.3.3以下と4.xの2台のスマホを持つことになりますが、4.xのSIMカードを2.3.3以下にさすと、いままで通り携帯電話として使えますので、4.xをロボット用に、ということもできます。
 スマートフォンが流行りはじめは1.6、普及が拡大したのは2.2あたりでしたので、1.6や2.2を持っているという方は多いのではないでしょうか。また、2.3も普及していますが、2.3.4以上にアップデートはされてない場合もありえます。アップデートはスマホメーカーの都合により行われますので、こちらがわでは勝手にアップデートできません。

 筆者の場合は、Galaxy Nexus が非常に安く出てた時期に、2.2のGalaxySから機種変更しました。たしか1万円ぐらいだったかと思います。SDカードが付いてないので人気が出ず、OSが最新の4.xであっても安くなってたようです。Docomoショップで機種変更した後、すぐにSIMカードを古い方に差し替えて、古い方をいままで通り携帯電話として使っています。つまり1万円で4.xの端末を入手できました。このようなこともあるのでショップの動向をみておくのもいいでしょう。

 グーグルからもスマートフォンが発売されており、これが一番速く最新バージョンに対応となります。グーグルのものはSAMSUN製なので、SAMSUN製だと比較的速く最新版にアップデートされます。但し、日本国内の電波法の規格に準拠していない(技適シールが貼ってない)ものもありますので、電話回線を使う場合は注意が必要です。自作ロボットに組み込むだけ、などでしたら問題はないかと思います。

 国産のスマートフォンは、多機能な分、OSのバージョンが上がりにくいので、手持ちのOSが2.3であったとしても2.3.4まで上がらないかもしれません。

 秋葉あたりで中古や新古のスマートフォンがかなり安く売られたりしてます。先日、シャープの1年前のスマートフォンで、OSが2.3.4のものが7千円台で売られてました。国内向けなのでb-mobleのSIMカードなどをさして電話回線経由でインターネット接続もできます。

 電話回線を契約していないスマートフォンを入手した場合、Wifi環境があればWifi機能を使ってインターネットに接続することができます。Wifiはほとんどのスマートフォンに搭載されています。
 電話回線と接続したいが、ロボット用なので音声通話はしない、という場合はb-mobileなどのデータ通信用SIMカードが安くてよいと思います。U300というサービスがあり、通信速度は300kbpsと普通のインターネット回線と比べると遅いと思われますが、映像をダウンロードするわけではないので、ロボット用の使い方なら問題ありません。


 U300 6ヶ月分
 

 U300 一年分
 


 参考までに、筆者が持っているスマートフォンの情報を載せます。


 Galaxy S (2.3.3) SAMSUNG製
 一番初めに買った。いつまで待っても2.3.4にはアップデートされないのでロボット用としては使えない。docomoのSIMをさして、普通に携帯電話として使用。

 Nexus S(2.3.4->4.0.4) Google製
 アメリカの業者から並行輸入で入手。技適シールが無いので、SIMカードをさして電話すると電波法違反となる。Wifi環境で実験用として使用。純正品なので、すぐにOSがアップデートされる。購入時は2.3.4だったが現在では最新版になっている。ちなみにアップデートはいつのまにか自動的にされています。
 OSが2.3.4〜2.3.6の時は、ADBでデバック接続できなかった。つまりEcpipse上でデバック情報を出すことができなかったので、デバック時はLogcatSocketServerというフリーソフトを入れてデバックしていた。LogcatSocketServerはMacのブラウザ(サファリ)でないと動かないので、デバック時はMacが必要だった。(筆者は通常はWindowsで開発している。がMacも持ってます。)

 Galaxy Nexus (4.0.4) SAMSUNG製
 GalaxySから機種変したが、GalaxySにSIMを差し戻して、ただのAndroid端末として実験用に使っている。b-mobileのSIMをさしているので、電話回線でインターネット接続は可能。開発環境を構築するのには一番手間がかからなかった。

 XPERIA SO-03C (2.3.4) SONY製
 購入時から2.3.4のまま。XPERIA用のADB(接続ソフト)をインストールしたり設定したりする必要があったような気がします(よく覚えてないが、開発環境と接続するのに手間取った記憶がある)。
 おそらく2.3.4以上の機種の中で一番小さくて軽いので、ロボット搭載には一番向いていると思われます。携帯電話として使う場合は画面が小さいので操作はしづらい。


 秋葉の奥地では、中国製のスマートフォンや、非常に安価なディスプレイ付き小型Linuxボードも売られているようです。タブレットが8千円とか。そのようなものを使っても面白いかもしれません。



開発環境構築


 開発環境の構築が最初の難関になるかと思います。アクセサリを作る場合は大きく2段階になります。


 まず、アプリ開発環境を作る


 次に、Wifiデバック環境を作る



<アプリ開発環境>


現在ですと、Androidアプリを開発するのには次のソフトウェアが必要です。全て無償で入手できます。開発用PCとしてWindows、MacOSX、Linuxのどれかが搭載されたものが必要です。

1)JDK (Java Development Kit)

2)Eclipse

3)Android SDK (Software Development Kit)

4)ADT (Android Development Tools)


  


 これらのインストール画面などは、バージョンがよく変わるので、インターネットや書籍の情報から最新版情報を得てインストールしてください。ここでは詳しくは説明しません。すいません。


 AndroidSDKですが、バージョンごとにライブラリがあり、全部入れると時間がかかりますので、開発するターゲットのパッケージ、つまり2.3.4かそれ以上を入れてください。たとえばXPERIAを持ってて2.3.4の場合は2.3.4のパッケージをインストールします。

 そこで、まずハマりやすいのが、2.3.4のパッケージが見当たらないということです。下記はSDKを管理したりインストールしたりするSDK Managerのウィンドウですが、このように2.3.3の次は3.0になってます。何度更新しても2.3.4は出てきません。

 


 実は2.3.3の中の"Google APIs"にUSB Accesoryの機能が入ってます。まぎらわしいですね。私は半日悩みました。

 2.3.4のプロジェクトを作るときは「2.3.3のGoogleAPIs」を選びます。2.3.4という表示はないんです。

 


 スマートフォンのバージョンが4.xなら4.xで開発してもいいと思います。私は複数バージョン持ってますので、大抵は2.3.4、つまり2.3.3のGoogleAPIsで開発しています。2.3.4で開発しても4.xでも動きます。



Wifiデバック環境


 通常のアプリはPCとスマホをUSB接続してプログラム転送したりデバックしたりします。しかし、アクセサリともUSBで接続しますのでデバックはどうするの?ということになります。スマートフォンはWifi(無線LAN)機能がありますので、デバックは無線LANを経由して行います。

  


 Androidのバージョンが4.xのものだと、比較的簡単につながるので、まずは4.xの場合のデバック環境構築を説明します。尚、ここからは、PCとUSB接続して何度かスマートフォンに自作アプリを入れた方を想定してお話します。よくわからなかったらまずは初級本などでアプリ作成に慣れてください。
 2.3.4の場合は4)以降はとばして次の節を参照願います。


1)Wifiルータを設置する

2)AndroidをWifiでLANに接続する

3)IPアドレスを確認する

4)ADBをLAN設定にする

5)アクセサリにUSBの接続先をさしかえる

6)接続が切れた?



<Wifiルータを設置する>

 まず、無線LANの環境が無い、という方もいるかと思います。インターネットは皆さん使える状態にあるかと思いますが、一般家庭だとルータを入れているかと思います。無線LAN化するには、このルータをWifiルータに交換すればよいだけです。

  


 筆者は、BuffaloのAirStationというものを使っています。確か1万円はしなかったと思います。かなり簡単に設置できたような記憶があります。また、スマートフォンと接続するための専用アプリがありますので簡単に接続できます。

 


 Wifiルータとスマートフォンを接続するときに、「SSID」と「パスワード」が必要になります。AirStationの場合、は本体裏側のシールに記載されています。ここでちょっと迷うのが「パスワード」という表記がありません。SSIDの他に「KEY」、「PIN」、「MAC」というものが書いてありますが、この場合のパスワードは「KEY」になります
 このSSIDとKEYを控えておく必要があります。

 



<AndroidスマートフォンをWifiでLANに接続する>

 スマートフォンごとにWifi接続の設定は違うと思いますので、基本的にはインターネット情報などを参考に設定してください。ここでは筆者の環境の場合をご紹介します。

 まず、スマートフォン上で、「設定」−>「無線とネットワーク」−>「Wifi」ー>を選択します。

  
 Wifi一覧が表示されますが、WifiルータのSSIDも表示されていますのでそれをクリックします。

  
 パスワード画面になりますので、「KEY」を入力し、「接続」ボタンを押します。

  
 接続されると、SSIDの下が「接続済み」という表示に変わります。


 これでWifi接続ができました。とくに切断の操作をしなければ、WifiがonのときはWifi接続しつづけます。普通はインターネットと接続したりしますが、この状態で、無線LANに加わっているコンピュータとも接続できるようになっています。



<IPアドレスを確認する>


 続いて、PCとの接続をしますが、そのときに、スマートフォンのIPアドレスが必要になりますので確認しておきます。IPアドレスは、上の接続操作のたびに割り振られます。

 上の画面で、そのままWifiルータのSSIDをクリックします。するとWifi接続情報が出てきます。

  

 この例ですと 192.168.1.6 になっています。Wifiを設定しなおしたり、スマートフォンの電源を切り入りしたりするとこのアドレスは変わる場合がありますので注意してください。スマートフォンの電源きり入りしても大抵は同じアドレスですが、たまーに変わったりします。



<ADBをLAN設定にする>

 PCとAndroid間のプログラム転送とデバックは「ADB(Android Debug Bridge)」というソフトウェアを使います。スマートフォンの機種ごとにADBのドライバがありますので、スマホメーカーのサイトなどからこのADBドライバを入手する必要があります。ここが第一の関門となりますが、機種によってインストール方法などまちまちですので、インターネット情報などを参照してください。
 

 ADB自体はAndroid開発環境をインストールした時点で自動的に組み込まれます。Eclpseの開発環境の場合、プログラム書き込み操作を行うと、バックグランドではこのADBが走っており、スマートフォンとPC間の通信を行っています。

 このADBをWifi経由で接続する場合は、Eclipse上ではなく、コンソールから直接ADBに対して指示する必要があります。このやり方はGoogleのUSB Accessoryの説明ページで簡単に書かれていますが、AndroidのOSバージョンが2.3.4(又は2.3.6)の場合だとそのページの通りにやっても上手くいかない端末が多いようです。ということでここではOSが4.xの端末での設定例をご紹介します。2.3.4の場合は次の節を参照願います。

 筆者は開発用にWindowsを使っていますので、WindowsのDosプロンプトでの例を紹介します。

 まず、ADBがどこにインストールされているかを調べます。adb.exeというファイルです。筆者の場合はC:\Android\android-sdk-windows\tools のフォルダの中でした。これはインストールの状況によってけっこう変わってきますので自分の環境で調べてください。


 DOSプロンプトを立ち上げると、筆者の環境ですと次の場所で立ち上がります。

  


 cdコマンドでadb.exeがあるところまで移動してもいいのですが、毎回だと大変なのでバッチファイルを作りました。バッチファイルは .bat という拡張子をつけたテキストファイルを作ると、そのファイル名を入れただけでキーを打つのと同じことが行われます。これをこの立ち上がりの場所に入れておきます。


 

 an.batというファイルを作りました。adbのある場所まで移動するキー操作をそのままテキストファイルにしたものです。次のようになっています。
 


 an+エンター で、adbが使える場所まで移動します。

 ここからがadbのwifi接続設定になります。


 まず、次のように adb tcpip 5555 と打ってエンターを押します。




 すると、次のように帰ってきます。




 次に、adb connect IPアドレス:5555 と打ちます。先の例だとIPアドレスは 192.168.1.6 でしたので次のようになります。IPアドレスはスマートフォンごとに違いますので注意してください。




 無事接続できると次のように帰ってきます。これが帰ってくるまで数十秒かかることもあります。また、一度失敗しても、もう一度 connect するとつながったりします。2.3.4の場合はここで connected にならない端末が多いようです。



 
  adbでつながっているもののリストを表示させるには adb devices と打ってエンターを押します。


 無事にLAN接続された場合はこのようにIPアドレスの横に device と出ます。なんらかの原因で接続が失敗している場合はここが offline になります。 offlineの場合はスマートフォンの電源を切り入りして初めからやりなおします。


 これでWifi接続できているはずです。試しに、PCと接続していたUSBケーブルを外して、なにかアプリを転送してみましょう。

 このように、ケーブルを外しているにもかかわらず、プログラムを転送することができます。Serial Number の欄は、USB接続の場合はスマートフォンのシリアルが出ますが、Wifiデバック環境の場合は無線LANのIPアドレスとポートが表示されます。
 


 同じように、デバックもできます。デバックには通常、LogCatを使っていると思います。


 たとえば、こんな感じでコードの中にLogを組み込んでおけば、LogCatにデバック表示されます。ここではwrite( )メソッドを使ったときに、受け取った配列の先頭を表示させています。



 USBケーブルで接続されていないにもかかわらす、このようにデバック表示されます(黒字のところが上のコードのデバック表示部分)。

 



 LogCatですが、ちゃんとWifiで接続されているにもかかわらず、時々LogCatに表示されなくなる時があります。この場合はEclipseを立ち上げなおすと治ります又はコンソール画面で adb connect... を実行します

 本当にLogCatの問題なのかどうか、本当に切断されているのではないか?は、コンソール画面で adb devices コマンドで確認できます。  "offline" の場合はスマートフォン側を再立ち上げする必要があります。"device" と出てたら切断されてませんので、上記のどちらかを実行してみてください。。

 

<アクセサリにUSBの接続先をさしかえる>

 次に、USBケーブルをアクセサリに差し替えます。差し替えるときにLogCatを見ていると、次のような表示が出てきます。

 

 すると、その後、LogCatはまったく更新しなくなります。どうやらADBが切れるようです。ここでもう一度 adb connect... をコンソールから実行すると、正常に戻りLogCatはデバック表示を再開します。




 アクセサリ開発の場合は、ADBがよく切断されるので、何度もこのコマンドを打つ必要があります。少々面倒なのでバッチファイルを作っておくか、又はWindowsの場合はF7キーを押すと、直近で打った行の候補が出てきて簡単に入力できます。



LogcatSocketServerを使ったデバック


 秋葉で古いスマートフォンを入手、などの場合はOSが2.3.4の場合もあるかと思います。2.3.4の場合は先にも書いたとおり、上のようなADBでのWifi接続は難しい場合があるようです。USB Accessoryが発表されてすぐのころは2.3.4しかなかったわけで、この頃に開発をしていた速い方々は苦労していたようですが、その中で明日への鍵さんという方がそれを解決する方法を公開しています。筆者も2.3.4の端末はそれを使っています。

 明日の鍵 プラウザからlogcatを見る

 やり方は2種類あるようですが、WebSocketを使ってサンプルのHTMLで動かすのが簡単です。現在はMacのブラウザ(Safari)上でないと動かないようです。筆者もMacでデバックしています。使い方などは上記のページを参照してください。




さいごに

 ビギナーの方を対象に、筆者の経験も踏まえてAndroidでのアクセサリ開発のポイントを説明しました。筆者もビギナーなのでその視点から気づくこともあるかと思います。参考になれば幸いです。
 尚、これらの例はあくまでも1つの例ですので、基本的には書籍やネット情報などの最新情報を活用し、自分の環境にあった開発手法を構築してください。

 次に、「スマートフォンとの接続」で、実際のAndroidアプリの作り方、特に通信部分について解説します。



2010年7月X日


 
(C)Copylight 2003. 有限会社浅草ギ研 | 通信販売の法規(訪問販売法第8条)に基づく通信販売業者の表示