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!
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?
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
$ 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!