C# 解压Android备份(adb)文件

C# 解压Android备份(adb)文件,c#,android,adb,archive,zlib,C#,Android,Adb,Archive,Zlib,我正在尝试使用该算法解压缩Android adb文件。我尝试过NetZips-Ionic-Zlib以及Net4.5中引入的微软内置软件,但这两种软件都会导致归档文件损坏。它们都有完全相同的文件大小,但哈希值在损坏的和良好的归档文件之间不匹配 我使用下面的代码来解压 byte[]app=File.ReadAllBytes(tb_keyOutDir.Text+“\\app_stripped.ab”); MemoryStream ms=新的MemoryStream(应用程序); //跳过前两个字节以避

我正在尝试使用该算法解压缩Android adb文件。我尝试过NetZips-Ionic-Zlib以及Net4.5中引入的微软内置软件,但这两种软件都会导致归档文件损坏。它们都有完全相同的文件大小,但哈希值在损坏的和良好的归档文件之间不匹配

我使用下面的代码来解压

byte[]app=File.ReadAllBytes(tb_keyOutDir.Text+“\\app_stripped.ab”);
MemoryStream ms=新的MemoryStream(应用程序);
//跳过前两个字节以避免无效的块长度错误
Seek女士(2,SeekOrigin.Begin);
DeflateStream deflate=新的DeflateStream(毫秒,压缩模式。解压缩);
string dec=new StreamReader(deflate,Encoding.ASCII).ReadToEnd();
File.writealText(tb_keyOutDir.Text+“\\app.tar”,dec);
我可以用OpenSSL通过CygWin解压它,它正在正确地解压,这样我就知道我的文件没有损坏或任何东西

cat app_stripped.ab | openssl zlib -d > app.tar
使用离子库

尝试使用此方法解压缩:

    public static byte[] Decompress(byte[] gzip) {
        using (var stream = new Ionic.Zlib.ZlibStream(new MemoryStream(gzip), Ionic.Zlib.CompressionMode.Decompress)) {
            const int size = 1024;
            byte[] buffer = new byte[size];
            using (MemoryStream memory = new MemoryStream()) {
                int count = 0;
                do {
                    count = stream.Read(buffer, 0, size);
                    if (count > 0) {
                        memory.Write(buffer, 0, count);
                    }
                }
                while (count > 0);
                return memory.ToArray();
            }
        }
    }
当你想打电话时:

    byte[] app = Decompress(File.ReadAllBytes(tb_keyOutDir.Text + "\\app_stripped.ab"));
    File.WriteAllBytes(tb_keyOutDir.Text + "\\app.tar", app);

谢谢你,这就成功了!由于我们现在写的是字节而不是文本,所以我对您的答案进行了轻微的编辑。