Home  >  Article  >  Backend Development  >  I want to decompress the .ab file backed up by adb and write it into a tar package

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

WBOY
WBOYforward
2024-02-10 08:15:171074browse

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()

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)
    }
}

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

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

Triedhttps://www.php.cn/link/6e67691b60ed3e4a55935261314dd534 a> 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

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!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete