Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
横浜Androidプラットフォーム部
第10回勉強会

PF開発に使えるAOSPの
ツール達
~生命、宇宙、すべての答えがそこに~

2011/06/25
@l_b__
今日紹介するのは
● DDMSとかTraceViewとか
http://developer.android.com/guide/developing/tools/index.
html
 で紹介があるツールは対象外。
● AOSP内のプラットフォーム開発に役立ちそうなツールをピック
アップしてみました。
どんなツール?
● プロファイラなどの性能解析
● ユニットテストなどテスト実行
● その他色々
 ※分類は適当です。
性能解析系ツール
● blktrace
● netperf
● oprofile
● strace
● valgrind
● procstatlog
● RpcPerformance
● bugreport/dumpsys
● latencytop
● librank/procmem/procrank
● showmap
● showslab
テスト実行
● axl
● embunit
● emma
● gtest
● StrictModeTest
● cpueater
● /system/extra/testsの下のテストツール
その他色々
● apkcheck
● jdwpspy
● yuv420sp2rgb
● bsdiff
● jdiff
● netcat
● tcpdump
● input
● rawbu
● screencap

● svc
● BugReportSender
● netcfg
● logwrapper
● run-as
● sdcard
● sound
blktrace
● BlockデバイスのI/Oをトレースするツール
● /externals/blktrace
● デバイスの/system/bin/blktrace
● ビルドされるにはAndroid.mkで最初のフラグをtrueに、各
LOCAL_MODULE_TAGSをoptionalにする必要があります。
● # blktrace -d [ブロックデバイスファイル]  -o -| blkparse -i
 で実行し、Traceを出力。 
netperf
● ネットワークベンチマークテスト
● http://www.netperf.org/netperf/
● /externals/netperf
● デバイスの/system/xbin/netperf ,netserver(engビルド時)
● サーバのnetserverを起動し、クライアントのnetperfを実行する
とこの二つの間のネットワークパフォーマンスを計測
● netserverの中でログファイルが/tmp/netperf.debugと定義さ
れているので書き換える必要がありそう
oprofile
● Linux向けシステムプロファイラ
● http://oprofile.sourceforge.net
● /externals/oprofile
● デバイスの/system/xbin/oprofiled,opcontrol
● opcontrolでプロファイラの開始/終了をコントロール。
 プロファイリング中にアプリを実行すると、その際のシステム全体の
プロファイリング結果を取得できる。
strace
● カーネルシステムコールのトレース
●  http://sourceforge.net/projects/strace/
● /externals/strace
● デバイスの/xbin/strace
● カーネルのptraceを使ってシステムコール、シグナルをトレース
するので、カーネルのトレース情報しか取得できないが、動作は
軽い。
valgrind
● メモリリークや不正アクセス検出など様々な機能を持ったメモリデ
バッガ
●  http://valgrind.org/
● /externals/valgrind (Masterブランチのみ)
● /system/bin/valgrind
● # valgrind [実行バイナリ] で実行。仮想マシン上でバイナリを
動作させ、その動作結果を出力する。
● 仮想マシン上で実バイナリを動作させるので、実際の動作シーケ
ンスに沿ってメモリアクセスをチェックできるが、動作は重い。
procstatlog
● /procの下のstatファイルを一定間隔で読み取ってログ出力す
る。
● /packages/experimental/procstatlog
● デバイスの/xbin/procstatlog
● ビルドするにはLOCAL_MODULE_TAGSの追加が必要
● /proc/*/stat , /proc/*/wchan , /proc/binder/stats ,
/proc/diskstats , /proc/net/dev , /proc/stat ,
/proc/yaffs ,
/sys/device/system/cpu/cpu0/cpufreq/stats/
  time_in_space の内容を出力。
RpcPerformance
● AndroidフレームワークRPCの呼び出しベンチマーク
● /packages/experimental/RpcPerformance
● デバイスの/data/app/RpcPerformance.apk
● 右画面のように様々なIOの
   R/W時間を計測
bugreport/dumpsys
● bugreportはdumpstateデーモンに接続して様々なログを取得
して標準出力に出力する。
● dumpsysはdumpstateデーモンから呼ばれ、ServiceManager
に登録されたサービスを取得してdump出力する。
● /frameworks/base/cmds/bugreport,dumpsys
● デバイスの/system/bin/bugreport,dumpsys
● logcatの情報、/proc以下の情報、dmesgやdalvikのトレース出
力など、ほとんどのデバッグ情報が網羅されています。
● /framework/base/cmds/dumpstate/dumpstate.cを見ると
何が取得できるか記述されています。
laytencytop
● システムのレイテンシになるプロセスをチェックする。
● http://www.latencytop.org/
● /system/extras/latencytop
● デバイスの/system/xbin/latencytop
●  /proc/sys/kernel/latencytopを見てどのプロセスがボトルネッ
クになっているかをチェック
● カーネルがlaytencytopに対応ビルドされている必要あり。
librank/procmem/procrank
● /proc/*/pagemapや/proc/*/maps,/proc/kpagecount,
/proc/kpageflagsを解析して出力
● /system/extras/librank,procmem/procrank
● デバイスの/system/xbin/librank,procmem,prokrank
● 本体は/system/extras/libpagemap
● libpagemapの解析結果をどのように表示するかでコマンドを使い
分けているようです。
showmap
● /proc/*/smapsを出力
● /system/extras/showmap
● デバイスの/system/xbin/showmap
● 各プロセスの仮想メモリ空間内の領域を表示します。
showslab
● /proc/slabinfoを出力
● /system/extras/showslab
● デバイスの/system/xbin/showslab
● スラブレベルのをメモリ使用率を表示します。
axl
● HTTPクライアントに拷問的なテストをするためのWebサーバ
● /development/tools/axl
● ホスト側のPythonスクリプトがWebサーバとして起動
embunit
● 組み込みC向けユニットテスト
●  http://embunit.sourceforge.net/
●  /externals/embunit
● デバイスでは/system/lib/libembunit.so
● テストする関数のテストケースを自分で書いていくという点は通常
のユニットテストと同じ。
emma
● Javaのコードカバレッジツール。
●  http://emma.sourceforge.net/
● /externals/emma
● デバイスの/system/framework/emma.jar
● ホスト向けのemmalib.jarも生成
● あまり日本語の資料が無いようなので今が調べ時かも。
gtest
● Google C++ Testing Framework
● http://code.google.com/p/googletest/
● /externals/gtest
● デバイスの/data/app/の下に複数のテスト用実行バイナリを生成
● 同じようにユニットテストを書きたいときに参考になりそうです。
StrictModeTest
● StrictModeに違反する処理を行うテストアプリ
● /packages/experimental/StrictModeTest
● デバイスの/data/app/StrictModeTest.apk
● StrictModeについては第6回勉強会の恐竜先生の資料を参
照。https://docs.google.com/viewer?
a=v&pid=explorer&chrome=true&srcid=0B6_eMBCvatAN2I1YWY0YTQtYTA4Ni00YzQ2LWFjOTMtNDBkOGY3ZTk5MGM5&hl=en&
pli=1
cpueater
● CPU使用率を100%にするデーモン
● /system/extras/tests/cpueater
● デバイスの/system/xbin/cpueater
● 高負荷状態でのアプリ動作チェックに使えます。
● 中ではひたすらlife_universe_and_everything = 42*2を計算
しています。
/system/extras/tests
● システム関連(HW寄り)のテストアプリ
● /system/extras/tests/bionic,directiotest,framebuffer,
  fstest,icachetest,memtest,pftest,
  schedtest,sdcard,timetest
● デバイスの/system/xbin 配下
● Bionicのテスト、ブロックデバイスI/Oテスト、Framebuffer描画
テスト、ファイルシステムパーミッションチェック、CPUキャッシュテ
スト、メモリI/Oテスト、メモリアラインメントテスト、スケジューリング
テスト、SDカードパフォーマンステスト、クロックテスト
apkcheck
● Android APK Checker
● /development/tools/apkcheck
● ホストのapkcheck,apkcheck.jar
● /framework/base/apiの下のAPI xml同士を比較するようで
す。
jdwpspy
● DalvikVMのjdwp通信内容をダンプする
● /development/tools/jdwpspy
● ホスト側のjdwpspy
● DDMS等がVMと接続するときのJavaDebugWireProtocol通信
データを横取りしてダンプします。
yuv420sp2rgb
● YUV4:2:0画像をRGB24bitに変換
● /development/tools/yuv420sp2rgb
● ホスト側のyuv420sp2rgb
● 画像ファイルから画像ファイルに変換。
bsdiff
● バイナリ同士の差分チェック、差分ファイルの生成
●  http://www.daemonology.net/bsdiff/
● /externals/bsdiff
● ホストのbsdiff,bspatch
● OTAに使われていると思われます。
jdiff
● Javadocの差分を見てJava APIの変更点を抽出するDoclet
●  http://javadiff.sourceforge.net/
● /externals/jdiff
● ホスト側のjdiff.jar
● バージョン間のAPI差分ドキュメントはこれで作られています。
netcat
● TCP/UDPデータ送受信ツール
●  http://nc110.sourceforge.net/
● /externals/netcat
● デバイスの/system/xbin/nc
●  クライアント/サーバの双方になるパケット読み書きツールです。
tcpdump
● ネットワークパケットモニタ
●  http://www.tcpdump.org/
● /externals/tcpdump
● デバイスの/system/xbin/tcpdump
● 言わずとしれたネットワークツール。
input
● キーイベントをWindowManagerに送信するコマンド。
● /frameworks/base/cmds/input
● デバイスの/system/bin/input
●  http://blog.kmckk.com/archives/3808986.html を見てお
きましょう。
● タッチイベントには未対応です。
rawbu
● /dataのバックアップ/リストアコマンド
● /frameworks/base/cmds/rawbu
● デバイスの/system/xbin/rawbu
● /data内の一時ファイルはバックアップしないので、何が一時ファ
イルとして扱われるか見てみるとよいかも。
screencap
● SurfaceFlingerから直接スクリーンショットを取得
● /frameworks/base/cmds/screencap
● デバイスの/system/bin/screencap
● 以前はスクリーンショットを取得するにはFramebufferを直接
openしていましたが、Gingerbreadからこのコマンドになっていま
す。
svc
● WiFi、データ通信ON/OFF、PowerManagement制御コマンド
● /frameworks/base/cmds/svc
● デバイスの/system/bin/svc
● ConnectivityManager、BatteryManager,PowerManagerに接
続して制御。
● 他にコマンドを追加しやすい作りになっています。
BugReportSender
● SDカードにあるBugreportファイルをACTION_SENDで送信
● /packages/experimental/BugReportSender
● エラーが出てビルドできず。メンテナンスされていないようです。
netcfg
● ネットワークインターフェースのup/down/dhcp設定コマンド
● /system/core/netcfg
● デバイスの/system/bin/netcfg
● init.rcで使われています。
logwrapper
● コマンドの標準出力/エラー出力をAndroidのログに出力する
● /system/core/logwrapper
● デバイスの/system/bin/logwrapper
● # logwrapper [コマンド] [コマンド引数] を実行することでコマ
ンドの出力をAndroidのログに保存できます。
run-as
● コマンドを指定したアプリパッケージのuidで実行する
● /system/core/run-as
● デバイスの/system/bin/run-as
● # run-as [パッケージ名] [コマンド] [コマンド引数] でコマンドを
実行する。
● パーミッションチェックに使用できます。
sdcard
● FUSEを使用してFAT形式SDカードをエミュレートする
● /system/core/sdcard
● デバイスの/system/bin/sdcard
● # sdcard [path] [uid] [gid] でpathを/mnt/sdcardにマウント
します。
sound
● wav/mp3を再生・録音する
● /system/extras/sound
● デバイスの/system/bin/sound
● /dev/msm_pcm_in,/dev/msm_pcm_out,/dev/msm_mp3へ
直接書き込んでいます。
次回予告
libbinderを調べて発表できればなと思っています。

   ありがとうございました。

More Related Content

PF開発に使えるAOSPのツール達