我想将adb备份的.ab文件解压并写入tar包

2024年 2月 10日 131.7k 0

我想将adb备份的.ab文件解压并写入tar包

php小编子墨可以帮你解答关于adb备份的.ab文件解压并写入tar包的问题。adb备份是Android系统中的一种备份方式,生成的备份文件后缀名为.ab。如果你想解压和写入tar包,可以通过使用ADB工具和tar命令来完成。首先,使用ADB命令将.ab文件转换为tar包,然后再使用tar命令解压tar包。这样就可以将备份文件还原到tar包中。希望这个回答对你有帮助!

问题内容

我按照以下方式处理

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

登录后复制

发生错误:io.copy backup.ab -> backup.ab.tar 失败:意外的 eof

出现这种情况是因为 .ab 文件已损坏还是处理方法错误?

解决方法

很可能是 .ab 文件已损坏。

但是您的代码也存在问题。从 .ab 文件读取时应跳过前 24 个字节。否则,您应该看到此错误:zlib:无效的标头。由于您看到其他内容,我会假设您的 .ab 文件已损坏。

顺便说一句,不需要 rd := bufio.newreader(bf)

这是适合我的演示:

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

登录后复制

更新:

使用backup.ab测试了演示,没有错误报道称。但生成的tar文件无效:

$ tar tvf backup.tar

tar: unexpected eof in archive
tar: error is not recoverable: exiting now

登录后复制

尝试使用 zlib-flate,得到相同的结果:

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

登录后复制

尝试过https://www.php.cn/link/6e67691b60ed3e4a55935261314dd534 a>,也得到了相同的结果。因此 backup.ab 文件应该已损坏。

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

登录后复制

以上就是我想将adb备份的.ab文件解压并写入tar包的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论