分析原因
利用ICSharpCode.SharpZipLib.dll解析APK时,进入APK的AndroidXml获取时出现报错
出错代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| using (ICSharpCode.SharpZipLib.Zip.ZipInputStream zip = new ICSharpCode.SharpZipLib.Zip.ZipInputStream(File.OpenRead(path))) { using (var filestream = new FileStream(path, FileMode.Open, FileAccess.Read)) { ICSharpCode.SharpZipLib.Zip.ZipFile zipfile = new ICSharpCode.SharpZipLib.Zip.ZipFile(filestream); ICSharpCode.SharpZipLib.Zip.ZipEntry item; while ((item = zip.GetNextEntry()) != null) { if (item.Name.ToLower() == "androidmanifest.xml") { manifestData = new byte[50 * 1024]; using (Stream strm = zipfile.GetInputStream(item)) { strm.Read(manifestData, 0, manifestData.Length); } } if (item.Name.ToLower() == "resources.arsc") { using (Stream strm = zipfile.GetInputStream(item)) { using (BinaryReader s = new BinaryReader(strm)) { resourcesData = s.ReadBytes((int)s.BaseStream.Length); } } } } }
|
解决方法
经过查阅资料,解决方法如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| using (ZipInputStream zip = new ZipInputStream(File.OpenRead(path))) { using (var filestream = new FileStream(path, FileMode.Open, FileAccess.Read)) { System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); ZipFile zipfile = new ZipFile(filestream); foreach (ZipEntry entry in zipfile) { if (entry != null) { if (entry.Name.ToLower() == "androidmanifest.xml") { manifestData = new byte[50 * 1024]; Stream strm = zipfile.GetInputStream(entry); strm.Read(manifestData, 0, manifestData.Length); } if (entry.Name.ToLower() == "resources.arsc") { Stream strm = zipfile.GetInputStream(entry); using (BinaryReader s = new BinaryReader(strm)) { resourcesData = s.ReadBytes((int)entry.Size); } } } } } }
|
参考链接