首頁  >  文章  >  後端開發  >  我想將adb備份的.ab檔解壓縮並寫入tar包

我想將adb備份的.ab檔解壓縮並寫入tar包

WBOY
WBOY轉載
2024-02-10 08:15:171074瀏覽

我想將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 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包的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除