diff --git a/adb/client/adb_install.cpp b/adb/client/adb_install.cpp index b273c77ec..610e985ab 100644 --- a/adb/client/adb_install.cpp +++ b/adb/client/adb_install.cpp @@ -311,7 +311,7 @@ static int install_app_incremental(int argc, const char** argv, bool wait, bool const auto start = clock::now(); int first_apk = -1; int last_apk = -1; - std::vector args = {"package"sv}; + incremental::Args passthrough_args = {}; for (int i = 0; i < argc; ++i) { const auto arg = std::string_view(argv[i]); if (android::base::EndsWithIgnoreCase(arg, ".apk"sv)) { @@ -319,12 +319,11 @@ static int install_app_incremental(int argc, const char** argv, bool wait, bool if (first_apk == -1) { first_apk = i; } - } else if (arg.starts_with("install-"sv)) { + } else if (arg.starts_with("install"sv)) { // incremental installation command on the device is the same for all its variations in // the adb, e.g. install-multiple or install-multi-package - args.push_back("install"sv); } else { - args.push_back(arg); + passthrough_args.push_back(arg); } } @@ -345,7 +344,7 @@ static int install_app_incremental(int argc, const char** argv, bool wait, bool } printf("Performing Incremental Install\n"); - auto server_process = incremental::install(files, silent); + auto server_process = incremental::install(files, passthrough_args, silent); if (!server_process) { return -1; } diff --git a/adb/client/incremental.cpp b/adb/client/incremental.cpp index f56ef9a56..c8f69c381 100644 --- a/adb/client/incremental.cpp +++ b/adb/client/incremental.cpp @@ -93,12 +93,10 @@ static std::pair read_and_encode_signature(Size file_siz // Send install-incremental to the device along with properly configured file descriptors in // streaming format. Once connection established, send all fs-verity tree bytes. -static unique_fd start_install(const Files& files, bool silent) { +static unique_fd start_install(const Files& files, const Args& passthrough_args, bool silent) { std::vector command_args{"package", "install-incremental"}; + command_args.insert(command_args.end(), passthrough_args.begin(), passthrough_args.end()); - // fd's with positions at the beginning of fs-verity - std::vector signature_fds; - signature_fds.reserve(files.size()); for (int i = 0, size = files.size(); i < size; ++i) { const auto& file = files[i]; @@ -118,8 +116,6 @@ static unique_fd start_install(const Files& files, bool silent) { auto file_desc = StringPrintf("%s:%lld:%d:%s:1", android::base::Basename(file).c_str(), (long long)st.st_size, i, signature.c_str()); command_args.push_back(std::move(file_desc)); - - signature_fds.push_back(std::move(signature_fd)); } std::string error; @@ -150,8 +146,8 @@ bool can_install(const Files& files) { return true; } -std::optional install(const Files& files, bool silent) { - auto connection_fd = start_install(files, silent); +std::optional install(const Files& files, const Args& passthrough_args, bool silent) { + auto connection_fd = start_install(files, passthrough_args, silent); if (connection_fd < 0) { if (!silent) { fprintf(stderr, "adb: failed to initiate installation on device.\n"); diff --git a/adb/client/incremental.h b/adb/client/incremental.h index 1fb1e0b19..40e928aea 100644 --- a/adb/client/incremental.h +++ b/adb/client/incremental.h @@ -26,9 +26,10 @@ namespace incremental { using Files = std::vector; +using Args = std::vector; bool can_install(const Files& files); -std::optional install(const Files& files, bool silent); +std::optional install(const Files& files, const Args& passthrough_args, bool silent); enum class Result { Success, Failure, None }; Result wait_for_installation(int read_fd);