Ich möchte die von adb gesicherte .ab-Datei dekomprimieren und in ein TAR-Paket schreiben

WBOY
Freigeben: 2024-02-10 08:15:17
nach vorne
1079 Leute haben es durchsucht

Ich möchte die von adb gesicherte .ab-Datei dekomprimieren und in ein TAR-Paket schreiben

Der PHP-Editor Zimo kann Ihnen bei der Beantwortung der Frage helfen, wie Sie die von adb gesicherte .ab-Datei dekomprimieren und in ein TAR-Paket schreiben können. adb backup ist eine Sicherungsmethode im Android-System. Das Suffix der generierten Sicherungsdatei ist .ab. Wenn Sie einen Tarball dekomprimieren und schreiben möchten, können Sie dies mit dem ADB-Tool und dem Befehl tar tun. Verwenden Sie zunächst den ADB-Befehl, um die .ab-Datei in ein TAR-Paket zu konvertieren, und dekomprimieren Sie dann das TAR-Paket mit dem Befehl tar. Auf diese Weise können Sie die Sicherungsdatei im Tarball wiederherstellen. Ich hoffe, diese Antwort ist hilfreich für Sie!

Frageninhalt

Ich werde wie folgt damit umgehen

bf, err := os.Open(backupFilePath)
if err != nil {
    fmt.Println("os.Open: ", err)
    return
}
defer bf.Close()
rd := bufio.NewReader(bf)

tarFile, err := os.Create(tarFilePath)
if err != nil {
    fmt.Println("os.Create: ", err)
    return
}
defer tarFile.Close()

zf, zerr := zlib.NewReader(rd)
if zerr != nil {
    return "", zerr
}
_, err = io.Copy(tarFile, zf)
if err != nil {
    fmt.Println("io.Copy backup.ab -> backup.ab.tar failed:  ", err)
}
zf.Close()
Nach dem Login kopieren

Fehler aufgetreten: io.copy backup.ab -> backup.ab.tar fehlgeschlagen: unerwartetes eof

Liegt das daran, dass die .ab-Datei beschädigt ist oder die Verarbeitungsmethode falsch ist?

Lösung

Höchstwahrscheinlich ist die .ab-Datei beschädigt.

Aber es gibt auch ein Problem mit Ihrem Code. Beim Lesen aus .ab-Dateien sollten die ersten 24 Bytes übersprungen werden. Andernfalls sollte dieser Fehler angezeigt werden: zlib:无效的标头. Da Sie etwas anderes sehen, gehe ich davon aus, dass Ihre .ab-Datei beschädigt ist.

Übrigens ist kein rd := bufio.newreader(bf) nötig.

Das ist die Demo, die für mich funktioniert:

package main

import (
    "compress/zlib"
    "io"
    "os"
)

func main() {
    bf, err := os.open("temp.ab")
    if err != nil {
        panic(err)
    }
    defer bf.close()
    if _, err := bf.seek(24, 0); err != nil {
        panic(err)
    }

    zf, err := zlib.newreader(bf)
    if err != nil {
        panic(err)
    }
    defer zf.close()

    tarfile, err := os.create("temp.tar")
    if err != nil {
        panic(err)
    }
    defer tarfile.close()

    _, err = io.copy(tarfile, zf)
    if err != nil {
        panic(err)
    }
}
Nach dem Login kopieren

Update:

Testete die Demo mit backup.ab und es wurden keine Fehler gemeldet. Aber die generierte TAR-Datei ist ungültig:

$ tar tvf backup.tar
<...list of files truncated...>
tar: unexpected eof in archive
tar: error is not recoverable: exiting now
Nach dem Login kopieren

Habe es mit zlib-flate versucht und habe das gleiche Ergebnis erhalten:

$ dd if=backup.ab ibs=24 skip=1 | zlib-flate -uncompress > backup2.tar
$ md5sum backup*.tar
3eff01578dec035367688e03b6ec7a72  backup2.tar
3eff01578dec035367688e03b6ec7a72  backup.tar
Nach dem Login kopieren

Versucht https://www.php.cn/link/6e67691b60ed3e4a55935261314dd534 und habe das gleiche Ergebnis erhalten. Daher backup.ab sollte die Datei beschädigt sein.

$ java -jar ~/Downloads/abe.jar unpack backup.ab backup3.tar
$ md5sum backup*.tar
3eff01578dec035367688e03b6ec7a72  backup2.tar
3eff01578dec035367688e03b6ec7a72  backup3.tar
3eff01578dec035367688e03b6ec7a72  backup.tar
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonIch möchte die von adb gesicherte .ab-Datei dekomprimieren und in ein TAR-Paket schreiben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!