Androidの単純なコマンドラインツールのビルド

Androidglibcではなくbionicを使うので、glibcツールチェーンでビルドするならstaticリンクする必要がある。他のAndroidに含まれるツール同様にbionicとリンクするのであれば、多少まわりくどい方法でビルドする必要がある。だいたいこんな手順。

  1. ソースツリーのダウンロード
  2. 環境変数設定
  3. Android.mkの作成
  4. ビルド
  5. 生成されたバイナリのコピー


ソースツリーはターゲットとなる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

AndroidAndroid.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

Xperia miniのカーネルソースコードをちょっとだけ読んでみる

小さくてかわいいのにぬるぬる動いてすごいXperia miniと、キーボードまでついちゃってすごいmini proのソースコード*1がいつの間にか公開されていたので、少し読んでみた。


解凍してkernel/arch/arm/configsに降りて、Xperia miniのコードネームRobynを探すと、似た様なのが4つある。

  • semc_millie_defconfig
  • semc_mimmi_defconfig
  • semc_robyn_defconfig
  • semc_shakira_defconfig

Robynはmini確定、mini proの/proc/config.gzからmimmiがコードネームと分かっていたので、diff。

$ diff -u semc_robyn_defconfig semc_mimmi_defconfig 

ちょこちょこ違うところがあるが抜粋。

 -CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI_4X=y
 -# CONFIG_TOUCHSCREEN_SYNAPTICS_FLIP_X is not set
 -CONFIG_TOUCHSCREEN_SYNAPTICS_FLIP_Y=y
 -# CONFIG_TOUCHSCREEN_SYNAPTICS_SWAP_XY is not set
 +# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI_4X is not set
 -# CONFIG_TOUCHSCREEN_CY8CTMA300_SER is not set
 +CONFIG_TOUCHSCREEN_CY8CTMA300_SER=y

miniはSynaptics製のタッチパネルなのに対して、mini proはCypress製のようだ。一度操作感を比べてみたい。

 +CONFIG_LEDS_MSM_PMIC_MISC=y
 +CONFIG_LEDS_MSM_PMIC_MISC_KEYPAD=y
 +CONFIG_LEDS_MSM_PMIC_MISC_BUTTONS=y
 +# CONFIG_LEDS_MSM_PMIC_MISC_CAMERA is not set
 +CONFIG_ALS_CONTROLLED_MISC_LEDS=y

miniになくてmini proにあるということで、これがキーボードドライバのようだ。


さて、millieとshakiraはなんなのだろう?ということで、robynとshakiraのdiffを取って眺めてみた。気になったのは次の1行。

 +CONFIG_FB_MSM_MDDI_TOSHIBA_LCD=y

このデバイスはなんなのだろう?ということで、カーネルのトップに戻ってfind grep

$ pushd ../../../
$ find . -name "Kconfig" -type f | xargs grep FB_MSM_MDDI_TOSHIBA_LCD
./drivers/video/Kconfig:config FB_MSM_MDDI_TOSHIBA_LCD

drivers/video/Kconfigを開いて見ると、

config FB_MSM_MDDI_TOSHIBA_LCD
	depends on FB_MSM
	tristate "MDDI Toshiba LCD Panel"
	select FB_MSM_MDDI
	---help---
	Support for Toshiba MDDI LCD Panel (320x480)

HVGAのパネルのようだ。発表されているXperiaでHVGAといえばX8*2しかない。ということは、X8はmini/mini proとほぼ同じハードウェア構成で液晶だけをHVGA化したものと推測される。


じゃぁ、millieはなんなの?ということで、shakiraとmillieのdiff。

$ popd
$ diff -u semc_shakira_defconfig semc_millie_defconfig

色々と細かく違うけど一番の差はここ。

 +CONFIG_LEDS_MSM_PMIC_MISC=y
 +CONFIG_LEDS_MSM_PMIC_MISC_KEYPAD=y
 +# CONFIG_LEDS_MSM_PMIC_MISC_BUTTONS is not set
 +# CONFIG_LEDS_MSM_PMIC_MISC_CAMERA is not set
 +CONFIG_ALS_CONTROLLED_MISC_LEDS=y

robynとmimmiの違いと同じ。つまり、X8のキーボード付きがX8 proが発売される可能性があるということ。


以上、妄想全開でお届けしました。