Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 455f1244 authored by Dario Freni's avatar Dario Freni Committed by Gerrit Code Review
Browse files

Merge "Support splitAPK in install-multi-package."

parents d5345f58 6dc6157b
Loading
Loading
Loading
Loading
+32 −27
Original line number Original line Diff line number Diff line
@@ -638,20 +638,24 @@ int install_multi_package(int argc, const char** argv) {
        fprintf(stdout, "Created child session ID %d.\n", session_id);
        fprintf(stdout, "Created child session ID %d.\n", session_id);
        session_ids.push_back(session_id);
        session_ids.push_back(session_id);


        // Support splitAPKs by allowing the notation split1.apk:split2.apk:split3.apk as argument.
        std::vector<std::string> splits = android::base::Split(file, ":");

        for (const std::string& split : splits) {
            struct stat sb;
            struct stat sb;
        if (stat(file, &sb) == -1) {
            if (stat(split.c_str(), &sb) == -1) {
            fprintf(stderr, "adb: failed to stat %s: %s\n", file, strerror(errno));
                fprintf(stderr, "adb: failed to stat %s: %s\n", split.c_str(), strerror(errno));
                goto finalize_multi_package_session;
                goto finalize_multi_package_session;
            }
            }


        std::string cmd =
            std::string cmd = android::base::StringPrintf(
                android::base::StringPrintf("%s install-write -S %" PRIu64 " %d %d_%s -",
                    "%s install-write -S %" PRIu64 " %d %d_%s -", install_cmd.c_str(),
                                            install_cmd.c_str(), static_cast<uint64_t>(sb.st_size),
                    static_cast<uint64_t>(sb.st_size), session_id, i,
                                            session_id, i, android::base::Basename(file).c_str());
                    android::base::Basename(split).c_str());


        unique_fd local_fd(adb_open(file, O_RDONLY | O_CLOEXEC));
            unique_fd local_fd(adb_open(split.c_str(), O_RDONLY | O_CLOEXEC));
            if (local_fd < 0) {
            if (local_fd < 0) {
            fprintf(stderr, "adb: failed to open %s: %s\n", file, strerror(errno));
                fprintf(stderr, "adb: failed to open %s: %s\n", split.c_str(), strerror(errno));
                goto finalize_multi_package_session;
                goto finalize_multi_package_session;
            }
            }


@@ -666,11 +670,11 @@ int install_multi_package(int argc, const char** argv) {
            read_status_line(remote_fd.get(), buf, sizeof(buf));
            read_status_line(remote_fd.get(), buf, sizeof(buf));


            if (strncmp("Success", buf, 7)) {
            if (strncmp("Success", buf, 7)) {
            fprintf(stderr, "adb: failed to write %s\n", file);
                fprintf(stderr, "adb: failed to write %s\n", split.c_str());
                fputs(buf, stderr);
                fputs(buf, stderr);
                goto finalize_multi_package_session;
                goto finalize_multi_package_session;
            }
            }

        }
        all_session_ids += android::base::StringPrintf(" %d", session_id);
        all_session_ids += android::base::StringPrintf(" %d", session_id);
    }
    }


@@ -718,6 +722,7 @@ finalize_multi_package_session:
        fputs(buf, stderr);
        fputs(buf, stderr);
    }
    }


    session_ids.push_back(parent_session_id);
    // try to abandon all remaining sessions
    // try to abandon all remaining sessions
    for (std::size_t i = 0; i < session_ids.size(); i++) {
    for (std::size_t i = 0; i < session_ids.size(); i++) {
        service = android::base::StringPrintf("%s install-abandon %d", install_cmd.c_str(),
        service = android::base::StringPrintf("%s install-abandon %d", install_cmd.c_str(),