研究でAOSPのビルドを少し触ったので、メモとして残しておきます。
ビルドの環境構築については上の記事や公式サイトの内容を参照してください。
上記の手順を元に環境構築ができたら、ビルドのコマンドが実行できます。
公式サイトにも書かれていますが、ubuntu18.04以前の環境でビルドを実行するにはdockerコンテナの内部でビルドするとうまくいきました。
ubuntu20.04以降では、公式サイトのコマンドのままにするとうまくいきます。
adbdのビルド時のコマンドをみる
lunchコマンドを実行したときに実際にどのようなコマンドが実行されているかを見るには以下のようにできます。ここでは、adbdをビルドするときのコマンド例を示します。
古いバージョンのAOSP
m showcommands
adbd
新しいバージョンのAOSP
showcommandsは廃止され、out/verbose.log.gzの中に実行コマンドが書かれています。
adbdのビルドをカスタマイズする
古いバージョンのAOSP
adbのソースコードは、system/core/adb配下にあり、ビルドの設定は、 Android.mkファイルに書かれています。
adb - platform/system/core - Git at Google
のファイルをいい感じにいじることでadbdのビルドをカスタマイズすることができます。
それぞれの項目は以下のようになっています。
include $(CLEAR_VARS) →前の項目との区切り、変数などをリセットする
LOCAL_SRC_FILES := \ →ビルド対象のファイル
adb.c \
backup_service.c \
fdevent.c \
transport.c \
transport_local.c \
transport_usb.c \
adb_auth_client.c \
sockets.c \
services.c \
file_sync_service.c \
jdwp_service.c \
framebuffer_service.c \
remount_service.c \
usb_linux_client.c \
log_service.c
LOCAL_CFLAGS := -O2 -g -DADB_HOST=0 -Wall -Wno-unused-parameter
LOCAL_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE
ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))
LOCAL_CFLAGS += -DALLOW_ADBD_ROOT=1
endif
LOCAL_MODULE := adbd →ビルドするときに指定する名前
LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT_SBIN)
LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_SBIN_UNSTRIPPED)
LOCAL_STATIC_LIBRARIES := liblog libcutils libc libmincrypt
include $(BUILD_EXECUTABLE) →実行ファイルとしてビルドするために必要?
新しいバージョンのAOSP
packages/modules/adbにファイルが移動しています。また、デーモン用のファイルとクライアント用のファイルが分かれるようになりました。
このファイルのビルドの設定は、Android.bpというファイルに書かれています。
adbdのビルドの内容については以下のようになっています。
cc_binary {
name: "adbd",
defaults: ["adbd_defaults", "host_adbd_supported", "libadbd_binary_dependencies"],
recovery_available: true,
min_sdk_version: "30",
apex_available: ["com.android.adbd"],
srcs: [
"daemon/main.cpp", →main関数が置かれるファイル
],
cflags: [
"-D_GNU_SOURCE",
"-Wno-deprecated-declarations",
],
strip: {
keep_symbols: true,
},
static_libs: [
"libadb_protos",
"libadbd",
"libadbd_services",
"libasyncio",
"libcap",
"liblz4",
"libminijail",
"libssl",
],
shared_libs: [
"libadbd_auth",
],
target: {
recovery: {
exclude_shared_libs: [
"libadb_pairing_auth",
"libadb_pairing_connection",
],
}
},
}
この内容やソースコードをいい感じにカスタマイズすれば自分専用のADBDが作れます。