2010年8月25日水曜日

ソースを追うのに便利なenvsetup.shのコマンド

Javaはあまり詳しくない隠者でございます。

言い訳から始めるのもどうかなと思いますが、とりあえず、Javaは、かなり昔に独学でかじった程度なんです。そんなわけで、出展もはっきり覚えていませんが、Javaというのは、ソースツリーのディレクトリもまたアーキテクチャの一つとしてとらえている言語だったように記憶しています。

隠者は、もともとTags系(etagsとかgtagsとか)を使いません。隠者は、ソースコードを格納するディレクトリも、アーキテクチャをしっかり考え、意味あるものにすべきだと考えてきており、ディレクトリ構成も含めて「アーキテクチャ」として考えられているのであれば、おおよそコードのある位置を覚えてしまう方が、都合がよいからです。そんなわけで、どこに目的のコードがあるかを意識しにくくなるタグジャンプは、記憶力の悪い隠者に便利すぎるツールになってしまうからです。

そのような理由から、普段からソースコードは手作業で追いかけているわけですが、この場合、主にgrepを使う事になります。
ただし、ファイル数が多かったりディレクトリが深くなったりすると、find等もいろいろ組み合わせ結構コマンドを打つのも手間になったりします。
そんなgrepに関して、Androidのbuild/envsetup.shの中に、少しだけ便利になる関数が定義されています。それは

  • cgrep PATTERN
  • jgrep PATTERN
  • resgrep PATTERN
  • sgrep PATTERN

です。それぞれ、Cソースコード、Javaソースコード、Resourceファイル、すべてのソースファイルにPATTERNでgrepをかけて、検索したキーワードを色分けして表示してくれるというコマンドです。長々とgrepコマンドを書くことなく、grepがかけられるので、grepで解析する派のあなたには重宝するツールになるでしょう。

ちなみに、他にもいくつかのコマンドが定義されています。ビルド時に使われるものもあれば、開発作業に有用なものもありますので、中身を一度チェックしてみるとよいかもしれません。
なお、以下にコマンドの一覧と、わかるものには簡単な解説なり、コメントの抜書きなりを記載しておきます。

ずいぶん大量に穴があいてますが、穴埋めは今後の課題ということでお許しください。

help

helpを表示する(一部のコマンドのみ)

get_abs_build_var

Get the value of a build variable as an absolute path.

get_build_var

Get the exact value of a build variable.

check_product

check to see if the supplied product is one we can build

check_variant

check to see if the supplied variant is valid

setpaths


printconfig


set_stuff_for_environment


set_sequence_number


settitle


choosesim


choosetype


chooseproduct


choosevariant


choosecombo


add_lunch_combo


print_lunch_menu


lunch


tapas

Configures the build to build unbundled apps.Run tapas with one ore more app names (from LOCAL_PACKAGE_NAME)

gettop

topディレクトリを表示する

m

プロジェクトのトップディレクトリでmakeを行う。

findmakefile

現在のディレクトリを上に遡りながら、Android.mkファイルを見つける

mm

現在のディレクトリのAndroid.mk内のモジュールをトップディレクトリからmakeする

mmm dirname

dirnameで指定したディレクトリのAndroid.mk内のモジュールをトップディレクトリからmakeする

croot

トップディレクトリに移動する

cproj

ディレクトリを上に遡りAndroid.mkのあるディレクトリに移動する

pid program

adb接続した先のprogramのPIDを取得する

systemstack

systemstack - dump the current stack trace of all threads in the system process to the usual ANR traces file

gdbclient [EXE] [PORT] [PROG]

arm-eabi-gdbを起動し、各種シンボルを読み込んでgdbserverへ接続する

sgrep PATTERN

.*\.(c|h|cpp|S|java|xml|sh|mk)に対してPATTERNでgrepをかける

jgrep PATTERN

.*\.javaに対してPATTERNでgrepをかける

cgrep PATTERN

.*\.cに対してPATTERNでgrepをかける

resgrep PATTERN

*\.xmlに対してPATTERNでgrepをかける

mgrep PATTERN

.*/(Makefile|Makefile\..*|.*\.make|.*\.mak|.*\.mk)に対してPATTERNでgrepをかける

treegrep PATTERN

.*\.(c|h|cpp|S|java|xml)に対して、grep -iをかける

getprebuilt

ANDROID_PREBUILTS変数の値を取得する

tracedmdump tracename

tracenameのdmtraceを実行する

runhat [ -d | -e | -s serial ] target-pid [output-file]

communicate with a running device or emulator, set up necessary state,and run the hat command.

getbugreports

/sdcard/bugreportsのバグレポートファイルを取得する

startviewserver


stopviewserver


isviewserverstarted


smoketest

SmokeTestApp.apk SmokeTest.apkを再インストールし実行する?

runtest args

argsを引数として/development/testrunner/runtest.pyを実行する

godir regexp

PATTERNにマッチするディレクトリのリストを表示し、選択されたディレクトリに移動する

set_java_home

JAVA_HOME環境変数がない場合に固定値を設定する

0 件のコメント:

コメントを投稿