みちくさを楽しむ

IT関係の雑多な内容の日記

ADBDのビルドをカスタマイズする

研究でAOSPのビルドを少し触ったので、メモとして残しておきます。

 

qiita.com

 

ビルドの環境構築については上の記事や公式サイトの内容を参照してください。

source.android.com

 

上記の手順を元に環境構築ができたら、ビルドのコマンドが実行できます。

 

公式サイトにも書かれていますが、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

 

android.googlesource.com

のファイルをいい感じにいじることで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.googlesource.com

このファイルのビルドの設定は、Android.bpというファイルに書かれています。

android.googlesource.com

 

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が作れます。