連載
» 2011年07月22日 00時00分 公開

実践しながら学ぶ Android USBガジェットの仕組み(1):Android USBガジェットを使ってみよう! (4/4)

[中垣内勇祐、森崇、中谷洋一(永和システムマネジメント),@IT MONOist]
前のページへ 1|2|3|4       

デモ内容:メモリ使用状況監視プログラム

 それでは、今回の総仕上げとして「adb」のシェル機能を使ったデモをやってみましょう。

 Android端末の開発では、スマートフォンを数日間使用し、メモリリークが起きていないかをテストします。この際、シェル機能を使えば、メモリ使用状況は監視できますが、スマートフォンをずっとUSB接続し続けているのでは、携帯端末としてのテストになりません。

 そこで、手軽にメモリ使用状況を監視するシェルプログラムをAndroid端末に放り込んで、バックグラウンド実行させるデモをお見せします(注14)。今回作成するプログラムの動作としては、メモリ使用状態を1分間隔で監視し、そのデータをSDカードに保存し続けるものです。詳細は以下の通りです。


プログラム名 monitorMemory.sh
動作仕様 1分間隔でメモリ使用状態を取得し、そのデータを待避し続ける
待避データ (1)システム全体のメモリ使用状況(/proc/meminfo) 
(2)ページ単位のメモリ使用状況(/proc/pagetypeinfo) 
(3)プロセス単位でのメモリ使用状況(psコマンド実行結果)
データ待避先 SDカード内のファイルシステムの以下のパスに待避する 
/testData/monitorMemory.txt
データフォーマット ***** <データ待避時刻1(dateコマンドの実行結果)> ***** 
// ここに待避実データを設定 
***** <データ待避時刻2(dateコマンドの実行結果)> ***** 
// ここに待避実データを設定 
              :
開始方法 sh monitorMemory.sh &
停止方法 ps | grep monitorMemory | grep -v grep | awk ‘{print $1}’| xargs kill -9
表8 メモリ使用状況監視プログラム

※注14:もちろん、JavaプログラムやCプログラムでも実現可能ではありますが、手軽に試すには手間がかかります。


 手順は以下の通りです。

  1. PC上でシェルプログラムを作成
  2. PC上で「adb」コマンドで作成したプログラムを組み込みボード上にコピー
  3. 組み込みボード上でシェルプログラムをバックグラウンド実行
  4. 組み込みボードからUSBを抜いて数分放置
  5. 組み込みボードにUSBを挿して、ポップアップ画面から結果を取得
  6. 組み込みボード上で実行中のシェルプログラムを停止

1.PC上でシェルプログラムを作成

 まず、PC上でメモリ使用状況を監視するシェルプログラムを記述します。「vi」などの適当なテキストエディタを使って「monitorMemory.sh」を作成します(注15)。

#!/system/bin/sh
 
destPath=/sdcard/monitorMemory.txt
 
while [ 1 ]
do
  echo “****** `date` ******” >> $destPath
  echo -e “\n[/proc/meminfo]” >> $destPath
  cat “/proc/meminfo” >> $destPath
  echo -e “\n[/proc/pagetypeinfo]” >> $destPath
  cat “/proc/pagetypeinfo” >> $destPath
  echo -e “\n[ps]” >> $destPath
  ps >> $destPath
  echo “” >> $destPath
  sleep 60
done
 
メモリ使用状況監視用シェルプログラム 図25 メモリ使用状況監視用シェルプログラム
※注15:Androidで正しく改行を出力するには、シェルプログラムを「UTF-8」文字コードで記述する必要があります。


2.PC上で「adb」コマンドで作成したプログラムを組み込みボード上にコピー

 作成したシェルプログラムを組み込みボードに転送します。前章を参考に、組み込みボードとPCをUSB接続してADBを使用可能にします。ファイルを転送する「adb push」コマンドを使うことで、USBを介してPCから指定のファイルを組み込みボードに転送できます。

adb push monitorMemory.sh /sdcard
PCから組み込みボードにプログラムファイルを転送 図26 PCから組み込みボードにプログラムファイルを転送

3.組み込みボード上でシェルプログラムをバックグラウンド実行

 次は、組み込みボード上で作成したシェルプログラムを動作させます。ここでようやく「adb shell」の登場です。

adb shell

 シェルを起動したら、作成したシェルプログラムを実行します。プログラムはバックグラウンドで実行させたいので、コマンドの最後に“アンパサンド(&)”を付けます。

sh /sdcard/monitorMemory.sh &
プログラムをバックグラウンドで実行 図27 プログラムをバックグラウンドで実行

4.組み込みボードからUSBを抜いて数分放置

 組み込みボードからUSBを抜いて、PCとのUSB接続を外します。接続がなくなっても、組み込みボード上のバックグラウンドではメモリの使用状況を監視するプログラムが動いているはずです。

組み込みボードとPCのUSB接続を外してみる 図28 組み込みボードとPCのUSB接続を外してみる

5.組み込みボードにUSBを挿して、ポップアップ画面から結果を取得

 では、プログラムの出力結果を見てみましょう。再度、組み込みボードをPCにUSB接続して、SDカードの中身を閲覧します。図29で「monitorMemory.txt」が作成されていることが確認できます。

SDカード内を閲覧 図29 SDカード内を閲覧

 「monitorMemory.txt」を開いてみると、期待通りメモリの使用状況が出力されています。

「monitorMemory.txt」を開いてみる 図30 「monitorMemory.txt」を開いてみる

6.組み込みボード上で実行中のシェルプログラムを停止

 最後に、組み込みボード上のバックグラウンドで実行中のシェルプログラムを停止しましょう。組み込みボードに「adb shell」接続し、次のコマンドを実行すると、今回のmonitorMemoryシェルプログラムを停止できます。

ps | grep monitorMemory | grep -v grep | awk ‘{print $1}’| xargs kill -9
monitorMemoryシェルプログラムを停止 図31 monitorMemoryシェルプログラムを停止


 ここまでの内容で、Android USBガジェットドライバの代表的な機能である、USBマスストレージとADBを、苦労しながらも何とかLinuxマシン上で使えるようになりました。

 本連載ではこれから、このガジェットドライバがどうやって実現されているのかを紹介していくことになります……。が、その前に、これから起こり得るさまざまな問題に対処できるよう事前に準備しておく必要があります(“備えあれば憂いなし”です)。

 そのため、次回は、「Androidカーネルをリモートデバッグするための方法」を紹介したいと思います。ご期待ください! (次回に続く)

前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.