Location via proxy:
[ UP ]
[Report a bug]
[Manage cookies]
No cookies
No scripts
No ads
No referrer
Show this form
Submit Search
Submit Search
Upload
PF開発に使えるAOSPのツール達
•
3 likes
•
3,334 views
第10回横浜PF部勉強会資料
Read less
Read more
Gallery
Gallery
1 of 43
Download now
Download to read offline
More Related Content
PF開発に使えるAOSPのツール達
1.
横浜Androidプラットフォーム部 第10回勉強会 PF開発に使えるAOSPの ツール達 ~生命、宇宙、すべての答えがそこに~ 2011/06/25 @l_b__
2.
今日紹介するのは ● DDMSとかTraceViewとか http://developer.android.com/guide/developing/tools/index. html で紹介があるツールは対象外。 ● AOSP内のプラットフォーム開発に役立ちそうなツールをピック アップしてみました。
3.
どんなツール? ● プロファイラなどの性能解析 ● ユニットテストなどテスト実行 ●
その他色々 ※分類は適当です。
4.
性能解析系ツール ● blktrace ● netperf ●
oprofile ● strace ● valgrind ● procstatlog ● RpcPerformance ● bugreport/dumpsys ● latencytop ● librank/procmem/procrank ● showmap ● showslab
5.
テスト実行 ● axl ● embunit ●
emma ● gtest ● StrictModeTest ● cpueater ● /system/extra/testsの下のテストツール
6.
その他色々 ● apkcheck ● jdwpspy ●
yuv420sp2rgb ● bsdiff ● jdiff ● netcat ● tcpdump ● input ● rawbu ● screencap ● svc ● BugReportSender ● netcfg ● logwrapper ● run-as ● sdcard ● sound
7.
blktrace ● BlockデバイスのI/Oをトレースするツール ● /externals/blktrace ●
デバイスの/system/bin/blktrace ● ビルドされるにはAndroid.mkで最初のフラグをtrueに、各 LOCAL_MODULE_TAGSをoptionalにする必要があります。 ● # blktrace -d [ブロックデバイスファイル] -o -| blkparse -i で実行し、Traceを出力。
8.
netperf ● ネットワークベンチマークテスト ● http://www.netperf.org/netperf/ ●
/externals/netperf ● デバイスの/system/xbin/netperf ,netserver(engビルド時) ● サーバのnetserverを起動し、クライアントのnetperfを実行する とこの二つの間のネットワークパフォーマンスを計測 ● netserverの中でログファイルが/tmp/netperf.debugと定義さ れているので書き換える必要がありそう
9.
oprofile ● Linux向けシステムプロファイラ ● http://oprofile.sourceforge.net ●
/externals/oprofile ● デバイスの/system/xbin/oprofiled,opcontrol ● opcontrolでプロファイラの開始/終了をコントロール。 プロファイリング中にアプリを実行すると、その際のシステム全体の プロファイリング結果を取得できる。
10.
strace ● カーネルシステムコールのトレース ● http://sourceforge.net/projects/strace/ ●
/externals/strace ● デバイスの/xbin/strace ● カーネルのptraceを使ってシステムコール、シグナルをトレース するので、カーネルのトレース情報しか取得できないが、動作は 軽い。
11.
valgrind ● メモリリークや不正アクセス検出など様々な機能を持ったメモリデ バッガ ● http://valgrind.org/ ●
/externals/valgrind (Masterブランチのみ) ● /system/bin/valgrind ● # valgrind [実行バイナリ] で実行。仮想マシン上でバイナリを 動作させ、その動作結果を出力する。 ● 仮想マシン上で実バイナリを動作させるので、実際の動作シーケ ンスに沿ってメモリアクセスをチェックできるが、動作は重い。
12.
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 の内容を出力。
13.
RpcPerformance ● AndroidフレームワークRPCの呼び出しベンチマーク ● /packages/experimental/RpcPerformance ●
デバイスの/data/app/RpcPerformance.apk ● 右画面のように様々なIOの R/W時間を計測
14.
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を見ると 何が取得できるか記述されています。
15.
laytencytop ● システムのレイテンシになるプロセスをチェックする。 ● http://www.latencytop.org/ ●
/system/extras/latencytop ● デバイスの/system/xbin/latencytop ● /proc/sys/kernel/latencytopを見てどのプロセスがボトルネッ クになっているかをチェック ● カーネルがlaytencytopに対応ビルドされている必要あり。
16.
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の解析結果をどのように表示するかでコマンドを使い 分けているようです。
17.
showmap ● /proc/*/smapsを出力 ● /system/extras/showmap ●
デバイスの/system/xbin/showmap ● 各プロセスの仮想メモリ空間内の領域を表示します。
18.
showslab ● /proc/slabinfoを出力 ● /system/extras/showslab ●
デバイスの/system/xbin/showslab ● スラブレベルのをメモリ使用率を表示します。
19.
axl ● HTTPクライアントに拷問的なテストをするためのWebサーバ ● /development/tools/axl ●
ホスト側のPythonスクリプトがWebサーバとして起動
20.
embunit ● 組み込みC向けユニットテスト ● http://embunit.sourceforge.net/ ●
/externals/embunit ● デバイスでは/system/lib/libembunit.so ● テストする関数のテストケースを自分で書いていくという点は通常 のユニットテストと同じ。
21.
emma ● Javaのコードカバレッジツール。 ● http://emma.sourceforge.net/ ●
/externals/emma ● デバイスの/system/framework/emma.jar ● ホスト向けのemmalib.jarも生成 ● あまり日本語の資料が無いようなので今が調べ時かも。
22.
gtest ● Google C++
Testing Framework ● http://code.google.com/p/googletest/ ● /externals/gtest ● デバイスの/data/app/の下に複数のテスト用実行バイナリを生成 ● 同じようにユニットテストを書きたいときに参考になりそうです。
23.
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
24.
cpueater ● CPU使用率を100%にするデーモン ● /system/extras/tests/cpueater ●
デバイスの/system/xbin/cpueater ● 高負荷状態でのアプリ動作チェックに使えます。 ● 中ではひたすらlife_universe_and_everything = 42*2を計算 しています。
25.
/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カードパフォーマンステスト、クロックテスト
26.
apkcheck ● Android APK
Checker ● /development/tools/apkcheck ● ホストのapkcheck,apkcheck.jar ● /framework/base/apiの下のAPI xml同士を比較するようで す。
27.
jdwpspy ● DalvikVMのjdwp通信内容をダンプする ● /development/tools/jdwpspy ●
ホスト側のjdwpspy ● DDMS等がVMと接続するときのJavaDebugWireProtocol通信 データを横取りしてダンプします。
28.
yuv420sp2rgb ● YUV4:2:0画像をRGB24bitに変換 ● /development/tools/yuv420sp2rgb ●
ホスト側のyuv420sp2rgb ● 画像ファイルから画像ファイルに変換。
29.
bsdiff ● バイナリ同士の差分チェック、差分ファイルの生成 ● http://www.daemonology.net/bsdiff/ ●
/externals/bsdiff ● ホストのbsdiff,bspatch ● OTAに使われていると思われます。
30.
jdiff ● Javadocの差分を見てJava APIの変更点を抽出するDoclet ●
http://javadiff.sourceforge.net/ ● /externals/jdiff ● ホスト側のjdiff.jar ● バージョン間のAPI差分ドキュメントはこれで作られています。
31.
netcat ● TCP/UDPデータ送受信ツール ● http://nc110.sourceforge.net/ ●
/externals/netcat ● デバイスの/system/xbin/nc ● クライアント/サーバの双方になるパケット読み書きツールです。
32.
tcpdump ● ネットワークパケットモニタ ● http://www.tcpdump.org/ ●
/externals/tcpdump ● デバイスの/system/xbin/tcpdump ● 言わずとしれたネットワークツール。
33.
input ● キーイベントをWindowManagerに送信するコマンド。 ● /frameworks/base/cmds/input ●
デバイスの/system/bin/input ● http://blog.kmckk.com/archives/3808986.html を見てお きましょう。 ● タッチイベントには未対応です。
34.
rawbu ● /dataのバックアップ/リストアコマンド ● /frameworks/base/cmds/rawbu ●
デバイスの/system/xbin/rawbu ● /data内の一時ファイルはバックアップしないので、何が一時ファ イルとして扱われるか見てみるとよいかも。
35.
screencap ● SurfaceFlingerから直接スクリーンショットを取得 ● /frameworks/base/cmds/screencap ●
デバイスの/system/bin/screencap ● 以前はスクリーンショットを取得するにはFramebufferを直接 openしていましたが、Gingerbreadからこのコマンドになっていま す。
36.
svc ● WiFi、データ通信ON/OFF、PowerManagement制御コマンド ● /frameworks/base/cmds/svc ●
デバイスの/system/bin/svc ● ConnectivityManager、BatteryManager,PowerManagerに接 続して制御。 ● 他にコマンドを追加しやすい作りになっています。
37.
BugReportSender ● SDカードにあるBugreportファイルをACTION_SENDで送信 ● /packages/experimental/BugReportSender ●
エラーが出てビルドできず。メンテナンスされていないようです。
38.
netcfg ● ネットワークインターフェースのup/down/dhcp設定コマンド ● /system/core/netcfg ●
デバイスの/system/bin/netcfg ● init.rcで使われています。
39.
logwrapper ● コマンドの標準出力/エラー出力をAndroidのログに出力する ● /system/core/logwrapper ●
デバイスの/system/bin/logwrapper ● # logwrapper [コマンド] [コマンド引数] を実行することでコマ ンドの出力をAndroidのログに保存できます。
40.
run-as ● コマンドを指定したアプリパッケージのuidで実行する ● /system/core/run-as ●
デバイスの/system/bin/run-as ● # run-as [パッケージ名] [コマンド] [コマンド引数] でコマンドを 実行する。 ● パーミッションチェックに使用できます。
41.
sdcard ● FUSEを使用してFAT形式SDカードをエミュレートする ● /system/core/sdcard ●
デバイスの/system/bin/sdcard ● # sdcard [path] [uid] [gid] でpathを/mnt/sdcardにマウント します。
42.
sound ● wav/mp3を再生・録音する ● /system/extras/sound ●
デバイスの/system/bin/sound ● /dev/msm_pcm_in,/dev/msm_pcm_out,/dev/msm_mp3へ 直接書き込んでいます。
43.
次回予告 libbinderを調べて発表できればなと思っています。 ありがとうございました。
Download now