それでは、今回の総仕上げとして「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 メモリ使用状況監視プログラム |
手順は以下の通りです。
まず、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
作成したシェルプログラムを組み込みボードに転送します。前章を参考に、組み込みボードとPCをUSB接続してADBを使用可能にします。ファイルを転送する「adb push」コマンドを使うことで、USBを介してPCから指定のファイルを組み込みボードに転送できます。
adb push monitorMemory.sh /sdcard
次は、組み込みボード上で作成したシェルプログラムを動作させます。ここでようやく「adb shell」の登場です。
adb shell
シェルを起動したら、作成したシェルプログラムを実行します。プログラムはバックグラウンドで実行させたいので、コマンドの最後に“アンパサンド(&)”を付けます。
sh /sdcard/monitorMemory.sh &
組み込みボードからUSBを抜いて、PCとのUSB接続を外します。接続がなくなっても、組み込みボード上のバックグラウンドではメモリの使用状況を監視するプログラムが動いているはずです。
では、プログラムの出力結果を見てみましょう。再度、組み込みボードをPCにUSB接続して、SDカードの中身を閲覧します。図29で「monitorMemory.txt」が作成されていることが確認できます。
「monitorMemory.txt」を開いてみると、期待通りメモリの使用状況が出力されています。
最後に、組み込みボード上のバックグラウンドで実行中のシェルプログラムを停止しましょう。組み込みボードに「adb shell」接続し、次のコマンドを実行すると、今回のmonitorMemoryシェルプログラムを停止できます。
ps | grep monitorMemory | grep -v grep | awk ‘{print $1}’| xargs kill -9
ここまでの内容で、Android USBガジェットドライバの代表的な機能である、USBマスストレージとADBを、苦労しながらも何とかLinuxマシン上で使えるようになりました。
本連載ではこれから、このガジェットドライバがどうやって実現されているのかを紹介していくことになります……。が、その前に、これから起こり得るさまざまな問題に対処できるよう事前に準備しておく必要があります(“備えあれば憂いなし”です)。
そのため、次回は、「Androidカーネルをリモートデバッグするための方法」を紹介したいと思います。ご期待ください! (次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.