直接进入主题:
Android 系统中adbd服务:/system/bin/adbd
system/core/rootdir/init.usb.rc
# adbd is controlled via property triggers in init.<platform>.usb.rc
service adbd /system/bin/adbd --root_seclabel=u:r:su:s0
class core
socket adbd stream 660 system system
disabled
seclabel u:r:adbd:s0
系统起来之后,直接启动adbd 服务等待客户端的连接
adbd 源码路径:
system/core/adb/Android.mk
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
daemon/main.cpp \
daemon/mdns.cpp \
services.cpp \
...
LOCAL_STRIP_MODULE := keep_symbols
LOCAL_STATIC_LIBRARIES := \
libadbd \
libasyncio \
libavb_user \
libbase \
...
#没有展示完整,详细请参考原生代码
include $(BUILD_EXECUTABLE)
adb 源码路径
system/core/adb/Android.mk
include $(CLEAR_VARS)
LOCAL_LDLIBS_linux := -lrt -ldl -lpthread
LOCAL_LDLIBS_darwin := -lpthread -framework CoreFoundation -framework IOKit -framework Carbon -lobjc
# Use wmain instead of main
LOCAL_LDFLAGS_windows := -municode
LOCAL_LDLIBS_windows := -lws2_32 -lgdi32
LOCAL_SHARED_LIBRARIES_windows := AdbWinApi
LOCAL_REQUIRED_MODULES_windows := AdbWinUsbApi
LOCAL_SRC_FILES := \
adb_client.cpp \
bugreport.cpp \
client/main.cpp \
console.cpp \
commandline.cpp \
file_sync_client.cpp \
line_printer.cpp \
services.cpp \
shell_service_protocol.cpp \
LOCAL_CFLAGS += \
$(ADB_COMMON_CFLAGS) \
-D_GNU_SOURCE \
-DADB_HOST=1 \
LOCAL_CFLAGS_windows := \
$(ADB_COMMON_windows_CFLAGS)
LOCAL_CFLAGS_linux := \
$(ADB_COMMON_linux_CFLAGS) \
LOCAL_CFLAGS_darwin := \
$(ADB_COMMON_darwin_CFLAGS) \
-Wno-sizeof-pointer-memaccess -Wno-unused-parameter \
LOCAL_MODULE := adb
LOCAL_MODULE_TAGS := debug
LOCAL_MODULE_HOST_OS := darwin linux windows
LOCAL_SANITIZE := $(adb_host_sanitize)
LOCAL_STATIC_LIBRARIES := \
libadb \
libbase \
libcrypto_utils \
libcrypto \
libdiagnose_usb \
liblog \
libmdnssd \
libusb \
# Don't use libcutils on Windows.
LOCAL_STATIC_LIBRARIES_darwin := libcutils
LOCAL_STATIC_LIBRARIES_linux := libcutils
LOCAL_CXX_STL := libc++_static
# Don't add anything here, we don't want additional shared dependencies
# on the host adb tool, and shared libraries that link against libc++
# will violate ODR
LOCAL_SHARED_LIBRARIES :=
include $(BUILD_HOST_EXECUTABLE)
$(call dist-for-goals,dist_files sdk win_sdk,$(LOCAL_BUILT_MODULE))
ifdef HOST_CROSS_OS
# Archive adb.exe for win_sdk build.
$(call dist-for-goals,win_sdk,$(ALL_MODULES.host_cross_adb.BUILT))
endif
当我们执行adb shell /adb install /adb push时,如何实现的:
system/core/adb/commandline.cpp
int adb_commandline(int argc, const char** argv) {
...
if (!strcmp(argv[0], "devices")) {
...
return adb_query_command(query);
}
else if (!strcmp(argv[0], "shell")) {
//看这里
return adb_shell(argc, argv);
}
else if (!strcmp(argv[0], "kill-server")) {
return adb_kill_server() ? 0 : 1;
}
else if (!strcmp(argv[0], "install")) {
//看这里
return install_app(argc, argv);
}
else if (!strcmp(argv[0], "sync")) {
...
}
return 1;
}