LoginSignup
12
14

More than 5 years have passed since last update.

Androidソースコードの一部をビルドする

Last updated at Posted at 2016-07-30

Androidソースコードの一部をビルドする方法です。

  • Androidアプリでなく、AOSPで公開されているOSのソースコードについての話題です。

手順

  • Androidのソースコードをbuildする環境を用意する。
  • ビルドしたいモジュールのAndroid.mkに含まれる LOCAL_MODULE を設定している箇所を探す。
  • LOCAL_MODULEで設定している文字列local_moduleをmakeの引数にする。 make local_module
  • cleanしたい場合はclean- を付加する。 make clean-local_module

例1 bluedroid

  • Android 5.1 で bluedroid だけをビルドしたい場合の例です。
  • external/bluetooth/bluedroid以下のAndroid.mkに含まれるLOCAL_MODULE を探す。 (agが無い場合はgrepで探してください。)
$ ag "LOCAL_MODULE[: ]"  external/bluetooth/bluedroid
external/bluetooth/bluedroid/embdrv/sbc/decoder/Android.mk
24:LOCAL_MODULE:= libbt-qcom_sbc_decoder

external/bluetooth/bluedroid/osi/Android.mk
18:LOCAL_MODULE := libosi
40:LOCAL_MODULE := ositests

external/bluetooth/bluedroid/stack/Android.mk
154:LOCAL_MODULE := libbt-brcm_stack

external/bluetooth/bluedroid/conf/Android.mk
4:LOCAL_MODULE := bt_stack.conf
13:LOCAL_MODULE := bt_did.conf
22:LOCAL_MODULE := auto_pair_devlist.conf

external/bluetooth/bluedroid/test/bluedroidtest/Android.mk
33:LOCAL_MODULE:= bdt

external/bluetooth/bluedroid/test/suite/Android.mk
22:LOCAL_MODULE := bdtest

external/bluetooth/bluedroid/bta/Android.mk
92:LOCAL_MODULE := libbt-brcm_bta

external/bluetooth/bluedroid/audio_a2dp_hw/Android.mk
14:LOCAL_MODULE := audio.a2dp.default

external/bluetooth/bluedroid/hci/Android.mk
39:LOCAL_MODULE := libbt-hci

external/bluetooth/bluedroid/main/Android.mk
136:LOCAL_MODULE := bluetooth.default

external/bluetooth/bluedroid/gki/Android.mk
27:LOCAL_MODULE := libbt-brcm_gki

external/bluetooth/bluedroid/utils/Android.mk
16:LOCAL_MODULE := libbt-utils
  • 何個もLOCAL_MODULEが定義されているのですが、いろいろ試した結果、bluetooth.default がbluedroidの本体のライブラリbluetooth.default.soに対応しています。これを指定すると下位のLOCAL_MODULEもまとめてビルドしてくれます。
  • LOCAL_MODULEで設定している文字列bluetooth.default を引数にして make します。
$ make bluetooth.default
  • 依存しているbionic libcなどもビルドされます。
  • 最終的に out/target/product/generic/system/lib/hw/bluetooth.default.so に出力されます。
Install: out/target/product/generic/system/lib/hw/bluetooth.default.so

例2 wpa_supplicant

  • Anrdoid 5.1 の wpa_supplicant hostapdをビルド
  • external/wpa_supplicant_8以下のAndroid.mkのLOCAL_MODULEを探す
$ ag "LOCAL_MODULE[: ]" external/wpa_supplicant_8/
external/wpa_supplicant_8/hs20/client/Android.mk
62:LOCAL_MODULE := hs20-osu-client

external/wpa_supplicant_8/wpa_supplicant/wpa_supplicant_conf.mk
16:LOCAL_MODULE := wpa_supplicant.conf

external/wpa_supplicant_8/wpa_supplicant/Android.mk
1549:LOCAL_MODULE := wpa_cli
1559:LOCAL_MODULE := wpa_supplicant
1589:#LOCAL_MODULE := eapol_test
1604:#LOCAL_MODULE := wpa_supplicant.conf
1613:LOCAL_MODULE = libwpa_client

external/wpa_supplicant_8/hostapd/Android.mk
896:LOCAL_MODULE := hostapd_cli
906:LOCAL_MODULE := hostapd
  • make でビルドしたけどbuildされなかった。
  • 原因はtargetがaosp_arm-engだとWPA_SUPPLICANT_VERSIONなどの定義がないためだった。
  • WPA_SUPPLICANT_VERSIONはNexusなどのtarget設定に含まれているので、とりあえず、Nexus6 (shamu)の設定を行ったらbuild できるようになった。
  • lunch 14 とかすると、TARGET_PRODUCT=aosp_shamuとなる。
  • makeでビルドする。
make wpa_supplicant.conf wpa_cli wpa_supplicant libwpa_client hostapd_cli hostapd_cli
  • 下記にファイルが出力される。
Install: out/target/product/shamu/system/etc/wifi/wpa_supplicant.conf
Install: out/target/product/shamu/system/bin/wpa_cli
Install: out/target/product/shamu/system/bin/wpa_supplicant
Install: out/target/product/shamu/system/lib/libwpa_client.so
Install: out/target/product/shamu/system/bin/hostapd
Install: out/target/product/shamu/system/bin/hostapd_cli

参考

12
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
14