43
PF開発に使えるAOSPツール達 ~生命、宇宙、すべての答えがそこに~ 横浜Androidプラットフォーム部 10回勉強会 2011/06/25 @l_b__

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

  • Upload
    lb

  • View
    1.139

  • Download
    3

Embed Size (px)

DESCRIPTION

第10回横浜PF部勉強会資料

Citation preview

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

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

~生命、宇宙、すべての答えがそこに~

横浜Androidプラットフォーム部第10回勉強会

2011/06/25@l_b__

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

今日紹介するのは

● DDMSとかTraceViewとかhttp://developer.android.com/guide/developing/tools/index.html で紹介があるツールは対象外。

● AOSP内のプラットフォーム開発に役立ちそうなツールをピックアップしてみました。

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

どんなツール?

●プロファイラなどの性能解析●ユニットテストなどテスト実行●その他色々

 ※分類は適当です。

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

性能解析系ツール

● blktrace● netperf● oprofile● strace● valgrind● procstatlog● RpcPerformance● bugreport/dumpsys● latencytop● librank/procmem/procrank● showmap● showslab

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

テスト実行

● axl● embunit● emma● gtest● StrictModeTest● cpueater● /system/extra/testsの下のテストツール

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

その他色々

● svc● BugReportSender● netcfg● logwrapper● run-as● sdcard● sound

● apkcheck● jdwpspy● yuv420sp2rgb● bsdiff● jdiff● netcat● tcpdump● input● rawbu● screencap

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

blktrace

● BlockデバイスのI/Oをトレースするツール● /externals/blktrace●デバイスの/system/bin/blktrace●ビルドされるにはAndroid.mkで最初のフラグをtrueに、各

LOCAL_MODULE_TAGSをoptionalにする必要があります。● # blktrace -d [ブロックデバイスファイル]  -o -| blkparse -i で実行し、Traceを出力。 

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

netperf

●ネットワークベンチマークテスト● http://www.netperf.org/netperf/● /externals/netperf●デバイスの/system/xbin/netperf ,netserver(engビルド時)●サーバのnetserverを起動し、クライアントのnetperfを実行するとこの二つの間のネットワークパフォーマンスを計測

● netserverの中でログファイルが/tmp/netperf.debugと定義されているので書き換える必要がありそう

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

oprofile

● Linux向けシステムプロファイラ● http://oprofile.sourceforge.net● /externals/oprofile●デバイスの/system/xbin/oprofiled,opcontrol● opcontrolでプロファイラの開始/終了をコントロール。 プロファイリング中にアプリを実行すると、その際のシステム全体のプロファイリング結果を取得できる。

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

strace

●カーネルシステムコールのトレース●  http://sourceforge.net/projects/strace/● /externals/strace●デバイスの/xbin/strace●カーネルのptraceを使ってシステムコール、シグナルをトレースするので、カーネルのトレース情報しか取得できないが、動作は軽い。

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

valgrind

●メモリリークや不正アクセス検出など様々な機能を持ったメモリデバッガ

●  http://valgrind.org/● /externals/valgrind (Masterブランチのみ)● /system/bin/valgrind● # valgrind [実行バイナリ] で実行。仮想マシン上でバイナリを動作させ、その動作結果を出力する。

●仮想マシン上で実バイナリを動作させるので、実際の動作シーケンスに沿ってメモリアクセスをチェックできるが、動作は重い。

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

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 の内容を出力。

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

RpcPerformance

● AndroidフレームワークRPCの呼び出しベンチマーク● /packages/experimental/RpcPerformance●デバイスの/data/app/RpcPerformance.apk●右画面のように様々なIOの   R/W時間を計測

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

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を見ると何が取得できるか記述されています。

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

laytencytop

●システムのレイテンシになるプロセスをチェックする。● http://www.latencytop.org/● /system/extras/latencytop●デバイスの/system/xbin/latencytop●  /proc/sys/kernel/latencytopを見てどのプロセスがボトルネックになっているかをチェック

●カーネルがlaytencytopに対応ビルドされている必要あり。

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

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の解析結果をどのように表示するかでコマンドを使い分けているようです。

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

showmap

● /proc/*/smapsを出力● /system/extras/showmap●デバイスの/system/xbin/showmap●各プロセスの仮想メモリ空間内の領域を表示します。

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

showslab

● /proc/slabinfoを出力● /system/extras/showslab●デバイスの/system/xbin/showslab●スラブレベルのをメモリ使用率を表示します。

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

axl

● HTTPクライアントに拷問的なテストをするためのWebサーバ● /development/tools/axl●ホスト側のPythonスクリプトがWebサーバとして起動

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

embunit

●組み込みC向けユニットテスト●  http://embunit.sourceforge.net/●  /externals/embunit●デバイスでは/system/lib/libembunit.so●テストする関数のテストケースを自分で書いていくという点は通常のユニットテストと同じ。

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

emma

● Javaのコードカバレッジツール。●  http://emma.sourceforge.net/● /externals/emma●デバイスの/system/framework/emma.jar●ホスト向けのemmalib.jarも生成●あまり日本語の資料が無いようなので今が調べ時かも。

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

gtest

● Google C++ Testing Framework● http://code.google.com/p/googletest/● /externals/gtest●デバイスの/data/app/の下に複数のテスト用実行バイナリを生成●同じようにユニットテストを書きたいときに参考になりそうです。

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

StrictModeTest

● StrictModeに違反する処理を行うテストアプリ● /packages/experimental/StrictModeTest●デバイスの/data/app/StrictModeTest.apk● StrictModeについては第6回勉強会の恐竜先生の資料を参照。https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0B6_eMB-CvatAN2I1YWY0YTQtYTA4Ni00YzQ2LWFjOTMtNDBkOGY3ZTk5MGM5&hl=en&pli=1

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

cpueater

● CPU使用率を100%にするデーモン● /system/extras/tests/cpueater●デバイスの/system/xbin/cpueater●高負荷状態でのアプリ動作チェックに使えます。●中ではひたすらlife_universe_and_everything = 42*2を計算しています。

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

/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カードパフォーマンステスト、クロックテスト

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

apkcheck

● Android APK Checker● /development/tools/apkcheck●ホストのapkcheck,apkcheck.jar● /framework/base/apiの下のAPI xml同士を比較するようです。

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

jdwpspy

● DalvikVMのjdwp通信内容をダンプする● /development/tools/jdwpspy●ホスト側のjdwpspy● DDMS等がVMと接続するときのJavaDebugWireProtocol通信データを横取りしてダンプします。

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

yuv420sp2rgb

● YUV4:2:0画像をRGB24bitに変換● /development/tools/yuv420sp2rgb●ホスト側のyuv420sp2rgb●画像ファイルから画像ファイルに変換。

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

bsdiff

●バイナリ同士の差分チェック、差分ファイルの生成●  http://www.daemonology.net/bsdiff/● /externals/bsdiff●ホストのbsdiff,bspatch● OTAに使われていると思われます。

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

jdiff

● Javadocの差分を見てJava APIの変更点を抽出するDoclet●  http://javadiff.sourceforge.net/● /externals/jdiff●ホスト側のjdiff.jar●バージョン間のAPI差分ドキュメントはこれで作られています。

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

netcat

● TCP/UDPデータ送受信ツール●  http://nc110.sourceforge.net/● /externals/netcat●デバイスの/system/xbin/nc●  クライアント/サーバの双方になるパケット読み書きツールです。

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

tcpdump

●ネットワークパケットモニタ●  http://www.tcpdump.org/● /externals/tcpdump●デバイスの/system/xbin/tcpdump●言わずとしれたネットワークツール。

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

input

●キーイベントをWindowManagerに送信するコマンド。● /frameworks/base/cmds/input●デバイスの/system/bin/input●  http://blog.kmckk.com/archives/3808986.html を見ておきましょう。

●タッチイベントには未対応です。

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

rawbu

● /dataのバックアップ/リストアコマンド● /frameworks/base/cmds/rawbu●デバイスの/system/xbin/rawbu● /data内の一時ファイルはバックアップしないので、何が一時ファイルとして扱われるか見てみるとよいかも。

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

screencap

● SurfaceFlingerから直接スクリーンショットを取得● /frameworks/base/cmds/screencap●デバイスの/system/bin/screencap●以前はスクリーンショットを取得するにはFramebufferを直接

openしていましたが、Gingerbreadからこのコマンドになっています。

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

svc

● WiFi、データ通信ON/OFF、PowerManagement制御コマンド● /frameworks/base/cmds/svc●デバイスの/system/bin/svc● ConnectivityManager、BatteryManager,PowerManagerに接続して制御。

●他にコマンドを追加しやすい作りになっています。

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

BugReportSender

● SDカードにあるBugreportファイルをACTION_SENDで送信● /packages/experimental/BugReportSender●エラーが出てビルドできず。メンテナンスされていないようです。

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

netcfg

●ネットワークインターフェースのup/down/dhcp設定コマンド● /system/core/netcfg●デバイスの/system/bin/netcfg● init.rcで使われています。

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

logwrapper

●コマンドの標準出力/エラー出力をAndroidのログに出力する● /system/core/logwrapper●デバイスの/system/bin/logwrapper● # logwrapper [コマンド] [コマンド引数] を実行することでコマンドの出力をAndroidのログに保存できます。

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

run-as

●コマンドを指定したアプリパッケージのuidで実行する● /system/core/run-as●デバイスの/system/bin/run-as● # run-as [パッケージ名] [コマンド] [コマンド引数] でコマンドを実行する。

●パーミッションチェックに使用できます。

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

sdcard

● FUSEを使用してFAT形式SDカードをエミュレートする● /system/core/sdcard●デバイスの/system/bin/sdcard● # sdcard [path] [uid] [gid] でpathを/mnt/sdcardにマウントします。

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

sound

● wav/mp3を再生・録音する● /system/extras/sound●デバイスの/system/bin/sound● /dev/msm_pcm_in,/dev/msm_pcm_out,/dev/msm_mp3へ直接書き込んでいます。

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

次回予告

libbinderを調べて発表できればなと思っています。

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