Androidの単純なコマンドラインツールのビルド
Androidはglibcではなくbionicを使うので、glibcツールチェーンでビルドするならstaticリンクする必要がある。他のAndroidに含まれるツール同様にbionicとリンクするのであれば、多少まわりくどい方法でビルドする必要がある。だいたいこんな手順。
ソースツリーはターゲットとなるAndroidのバージョンに合わせてダウンロード*1する。repoの-bにバージョンを設定してinit後、syncする。donutなら-b donut。
$ mkdir mydroid && cd mydroid $ repo init -u git://android.git.kernel.org/platform/manifest.git -b donut $ repo sync
ビルド用に環境変数を設定するためにbuid/envsetup.shをエバる。
$ source build/envsetup.sh
AndroidはAndroid.mkという独自のMakefileを使う。ビルドしたいツールのソースコードをexternalの下にコピーして、external/ping/Android.mkをコピーして編集するのが楽ちん。pingの場合、ping.cをpingにビルドしているので、hoge.cならs/ping/hoge/するだけ。
$ mkdir external/hoge && cd external/hoge $ cp /dokka/hoge.c hoge.c $ cp ../ping/Android.mk Android.mk
ビルドはカレントディレクトリ以下のAndroid.mkをビルドするmmコマンド。たぶん大丈夫だと思うが、もし単独ビルドができないなら、いったんmydroidに戻ってmakeコマンドでフルビルドが必要になるかも。
$ mm
生成されたバイナリはout以下にいる。
$ cd ../../ $ adb push out/target/product/generic/system/bin/hoge /local/data/tmp/hoge $ adb shell /local/data/tmp/hoge