首页 > 后端开发 > Golang > 正文

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

WBOY
发布: 2024-02-10 08:15:17
转载
1079 人浏览过

我想将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
<...list of files truncated...>
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,也得到了相同的结果。因此 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包的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!