adb install 流程解析
相关文件及函数调用流程
adb install 流程
system/core/adb/adb.c àmain()
system/core/adb/commandline.c àadb_commandline()
system/core/adb/commandline.c àinstall_app()
system/core/adb/commandline.c àpm_command()
system/core/adb/commandline.c à send_shellcommand()
system/core/adb/Adb_client.c àadb_connect()
system/core/adb/Transport.c à writex()
system/core/adb/Sysdeps_win32.c à adb_write()
system/core/adb/Sysdeps_win32.c->fh_write()
system/core/adb/commandline.c àdo_cmd() à va_start()
1、 进入adb
代码位置:system/core/adb/adb.c àmain()
运行adb install命令之后,第一步是进入adb的main函数当中,此处我们的adb命令是从windows上发出的,所以是进入到ADB_HOST当中,所以将命令adb install *.apk去掉adb变成install *.apk传递到adb_commandline(int, char**)。
int main(int argc, char **argv)
{
#if ADB_HOST
adb_sysdeps_init();
adb_trace_init();
D("Handling commandline()\n");
return adb_commandline(argc - 1, argv + 1);
#else
/* If adbd runs inside the emulator this will enable adb tracing via
* adb-debug qemud service in the emulator. */
adb_qemu_trace_init();
while(1) {
int c;
int option_index = 0;
static struct option opts[] = {
{"root_seclabel", required_argument, 0, 's' },
{"device_banner", required_argument, 0, 'b' }
};
c = getopt_long(argc, argv, "", opts, &option_index);
if (c == -1)
break;
switch (c) {
case 's':
root_seclabel = optarg;
break;
case 'b':
adb_device_banner = optarg;
break;
default:
break;
}
}
start_device_log();
D("Handling main()\n");
return adb_main(0, DEFAULT_ADB_PORT);
#endif
}
2、 判断命令
函数位置system/core/adb/commandline.c