首页 / C# / c# 获取APK 包的包名
c# 获取APK 包的包名
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# 获取APK 包的包名,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3463字,纯文字阅读大概需要5分钟。
内容图文
![c# 获取APK 包的包名](/upload/InfoBanner/zyjiaocheng/739/fd89ccdc44784f0cbaba960821232bca.jpg)
打开nuget 搜索两个包
其中 SharpZipLib用来 解压读取 apk 的文件,
androidxmldotnet 用来解析加密的 apk包里的文件
示例代码如下
static string path = System.Environment.CurrentDirectory + @"\Youku_V7.6.10.0325.0001_ab235fdcb823d83f.apk";
static void Main(string[] args)
{
GetApkInfo3();
Console.WriteLine("end");
Console.Read();
}
static void GetApkInfo3()
{
byte[] manifestData = null;
using (var filestream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
ICSharpCode.SharpZipLib.Zip.ZipFile zipfile = new ICSharpCode.SharpZipLib.Zip.ZipFile(filestream);
foreach (ICSharpCode.SharpZipLib.Zip.ZipEntry item in zipfile)
{
if (item.Name.ToLower() == "androidmanifest.xml")
{
using (Stream strm = zipfile.GetInputStream(item))
{
using (BinaryReader s = new BinaryReader(strm))
{
manifestData = s.ReadBytes((int)item.Size);
}
}
break;
}
}
}
#region 读取文件内容
using (var stream = new MemoryStream(manifestData))
{
var reader = new AndroidXmlReader(stream);
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
{
AndroidInfo info = new AndroidInfo();
androidInfos.Add(info);
info.Name = reader.Name;
info.Settings = new List<AndroidSetting>();
for (int i = 0; i < reader.AttributeCount; i++)
{
reader.MoveToAttribute(i);
AndroidSetting setting = new AndroidSetting() { Name = reader.Name, Value = reader.Value };
info.Settings.Add(setting);
}
reader.MoveToElement();
break;
}
}
}
}
#endregion
#region 打印内容
StringBuilder builder = new StringBuilder();
foreach (var androidInfo in androidInfos)
{
//只打印需要的信息
if (androidInfo.Name == "manifest")
{
#region 拼接信息字符串
builder.Append(string.Format("{0}:", androidInfo.Name));
foreach (var setting in androidInfo.Settings)
{
builder.Append("{");
builder.Append(string.Format("'{0}':'{1}'", setting.Name, setting.Value));
builder.Append("},");
}
builder.Append("\n\n");
#endregion
break;
}
}
Console.WriteLine(builder.ToString());
#endregion
}
封装下代码
using AndroidXml;
using System.Collections.Generic;
using System.IO;
using System.Xml;
namespace Library.ApkInfo
{
public static class ApkHelper
{
public static List<AndroidInfo> GetManifestInfo(Stream filestream)
{
List<AndroidInfo> androidInfos = new List<AndroidInfo>();
byte[] manifestData = null;
ICSharpCode.SharpZipLib.Zip.ZipFile zipfile = new ICSharpCode.SharpZipLib.Zip.ZipFile(filestream);
foreach (ICSharpCode.SharpZipLib.Zip.ZipEntry item in zipfile)
{
if (item.Name.ToLower() == "androidmanifest.xml")
{
using (Stream strm = zipfile.GetInputStream(item))
{
using (BinaryReader s = new BinaryReader(strm))
{
manifestData = s.ReadBytes((int)item.Size);
}
}
break;
}
}
#region 读取文件内容
using (var stream = new MemoryStream(manifestData))
{
var reader = new AndroidXmlReader(stream);
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
{
AndroidInfo info = new AndroidInfo();
androidInfos.Add(info);
info.Name = reader.Name;
info.Settings = new List<AndroidSetting>();
for (int i = 0; i < reader.AttributeCount; i++)
{
reader.MoveToAttribute(i);
AndroidSetting setting = new AndroidSetting() { Name = reader.Name, Value = reader.Value };
info.Settings.Add(setting);
}
reader.MoveToElement();
break;
}
}
}
}
#endregion
return androidInfos;
}
}
/// <summary>
/// android应用程序信息
/// </summary>
public class AndroidInfo
{
/// <summary>
/// 节点名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 节点属性集合
/// </summary>
public List<AndroidSetting> Settings { get; set; }
}
/// <summary>
/// 节点属性
/// </summary>
public class AndroidSetting
{
public string Name { get; set; }
public string Value { get; set; }
}
}
内容总结
以上是互联网集市为您收集整理的c# 获取APK 包的包名全部内容,希望文章能够帮你解决c# 获取APK 包的包名所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。