123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- using AndroidXml;
- using ICSharpCode.SharpZipLib.Zip;
- using LJLib.Tools.Helper;
- using System.IO;
- using System.Xml;
- namespace LJLib
- {
- public class APKHelper
- {
- public string GetVersionName(string apkPath)
- {
- using (var fs = new FileStream(apkPath, FileMode.Open, FileAccess.Read))
- {
- return GetVersionName(fs);
- }
- }
- public string GetVersionName(byte[] apkbytes)
- {
- using (var fs = new MemoryStream(apkbytes))
- {
- return GetVersionName(fs);
- }
- }
- public string GetVersionName(Stream apkStream)
- {
- byte[] xmlbytes;
- using (var zipfile = new ZipFile(apkStream))
- {
- var item = zipfile.GetEntry("AndroidManifest.xml");
- using (var ms = new MemoryStream())
- using (var strm = zipfile.GetInputStream(item))
- {
- StreamHelper.StreamCopy(ms, strm);
- xmlbytes = ms.ToArray();
- }
- }
- using (var ms = new MemoryStream(xmlbytes))
- {
- XmlReader reader;
- if (xmlbytes[0] == '<' || char.IsWhiteSpace((char) xmlbytes[0]))
- {
- // Normal XML file
- reader = new XmlTextReader(ms)
- {
- WhitespaceHandling = WhitespaceHandling.None
- };
- }
- else
- {
- // Android binary XML
- reader = new AndroidXmlReader(ms);
- }
- using (reader)
- while (reader.Read())
- {
- if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "manifest")
- {
- for (int i = 0; i < reader.AttributeCount; i++)
- {
- reader.MoveToAttribute(i);
- if (reader.LocalName.ToLower() == "versionname")
- {
- return reader.Value;
- }
- }
- reader.MoveToElement();
- }
- }
- return string.Empty;
- }
- }
- }
- }
|