I want to decompress the .ab file backed up by adb and write it into a tar package

WBOY
Release: 2024-02-10 08:15:17
forward
1125 people have browsed it

I want to decompress the .ab file backed up by adb and write it into a tar package

php editor Zimo can help you answer the question about decompressing the .ab file backed up by adb and writing it into a tar package. adb backup is a backup method in the Android system, and the generated backup file has the suffix name .ab. If you want to decompress and write a tarball, you can do so by using the ADB tool and the tar command. First, use the ADB command to convert the .ab file into a tar package, and then use the tar command to decompress the tar package. This way you can restore the backup file to the tarball. Hope this answer is helpful to you!

Question content

I will handle it as follows

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()
Copy after login

An error occurred: io.copy backup.ab -> backup.ab.tar failed: unexpected eof

Is this happening because the .ab file is damaged or the processing method is wrong?

Solution

It is possible that the .ab file is damaged.

But there is also a problem with your code. The first 24 bytes should be skipped when reading from .ab files. Otherwise, you should see this error: zlib: Invalid header . Since you see something else, I'm going to assume your .ab file is corrupted.

BTW, no need for rd := bufio.newreader(bf).

This is the demo that works for me:

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)
    }
}
Copy after login

renew:

Tested the demo using backup.ab and no errors were reported. But the generated tar file is invalid:

$ tar tvf backup.tar
<...list of files truncated...>
tar: unexpected eof in archive
tar: error is not recoverable: exiting now
Copy after login

Tried using zlib-flate, got the same result:

$ dd if=backup.ab ibs=24 skip=1 | zlib-flate -uncompress > backup2.tar
$ md5sum backup*.tar
3eff01578dec035367688e03b6ec7a72  backup2.tar
3eff01578dec035367688e03b6ec7a72  backup.tar
Copy after login

Triedhttps://www.php.cn/link/6e67691b60ed3e4a55935261314dd534 and got the same result. Therefore the backup.ab file should be corrupted.

$ java -jar ~/Downloads/abe.jar unpack backup.ab backup3.tar
$ md5sum backup*.tar
3eff01578dec035367688e03b6ec7a72  backup2.tar
3eff01578dec035367688e03b6ec7a72  backup3.tar
3eff01578dec035367688e03b6ec7a72  backup.tar
Copy after login

The above is the detailed content of I want to decompress the .ab file backed up by adb and write it into a tar package. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template