最近项目有个需求,需要拿到前端上传的Apk或者Aar文件里面的包名.

在这里贡献出来,方便有需求的小伙伴.

项目是 asp.net core 2.2

需要安装 nuget :

AndroidXml
SharpCompress
using AndroidXml;
using SharpCompress.Archives;
using System.Data;
using System.IO;
using System.Linq;
using System.Xml; namespace ********
{
/// <summary>
/// 包阅读器
/// </summary>
public static class PackageReader
{ /// <summary>
/// 获取Apk包名
/// </summary>
/// <param name="stream">文件流</param>
/// <returns></returns>
public static string GetPackageNameFromApk(Stream stream)
{
using (IArchive zipReader = ArchiveFactory.Open(stream))
{
IArchiveEntry adf = zipReader.Entries.FirstOrDefault(w => w.Key == "AndroidManifest.xml"); if (adf == null)
{
return string.Empty;
} using (MemoryStream memoryStream = new MemoryStream())
{
adf.OpenEntryStream().CopyTo(memoryStream);
memoryStream.Seek(, SeekOrigin.Begin);
AndroidXmlReader reader = new AndroidXmlReader(memoryStream);
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
for (int i = ; i < reader.AttributeCount; i++)
{
reader.MoveToAttribute(i);
if (reader.Name != "package")//只读取包名的过滤条件
{
continue;
}
return reader.Value;
}
reader.MoveToElement();
break;
}
}
} return string.Empty;
}
} /// <summary>
/// 获取aar包名
/// </summary>
/// <param name="stream">文件流</param>
/// <returns></returns>
public static string GetPackageNameFromAar(Stream stream)
{
using (IArchive zipReader = ArchiveFactory.Open(stream))
{
IArchiveEntry adf = zipReader.Entries.FirstOrDefault(w => w.Key == "AndroidManifest.xml"); if (adf == null)
{
return string.Empty;
} DataSet ds = new DataSet();
using (MemoryStream memoryStream = new MemoryStream())
{
adf.OpenEntryStream().CopyTo(memoryStream);
memoryStream.Seek(, SeekOrigin.Begin);
ds.ReadXml(memoryStream);
}
DataRowCollection rows = ds.Tables["manifest"].Rows;
object result = rows[]["package"];
return result?.ToString() ?? string.Empty;
}
}
}
}

c# 获取 Apk ,Aar 文件包名的更多相关文章

  1. 在Android手机上获取其它应用的包名及版本

    转载请注明出处:http://blog.csdn.net/jason_src/article/details/37757661 获取Android手机上其它应用的包名及版本方法有非常多,能够通过AAP ...

  2. Android 在Android手机上获取其他应用的包名及版本号

    获取Android手机上其他应用的包名及版本号方法有很多,可以通过AAPT从APK包中直接获取,也可以通过代码在手机上获取.显然,对于产品或者用户来说要获取这些信息,在手机上获取更为简便. 下面我们来 ...

  3. 如何获取到app的包名

    相信很多朋友在刚开始接触测试app的时候都不清楚app的包名是什么,接下来给大家介绍几种方法去获取. 一.手机设备已连接到电脑,点击进入app中,前提是电脑上装备了android-SDK,tools文 ...

  4. apk签名、包名

    //通过各手机管理软件,如如360.豌豆荚等查看 //使用命令行,可以查看到permission.packagename.title.versionCode等 aapt dump badging ~/ ...

  5. C#获取并修改文件扩展名的方法

    本文实例讲述了C#获取并修改文件扩展名的方法.分享给大家供大家参考.具体分析如下: 这里使用C#编程的方法改变文件扩展名的文件,必须使用Path类. Path类用来解析文件系统路径的各个部分.静态方法 ...

  6. 查看apk文件包名的一些方法

    1,如果有源码 直接将apk包修改为zip,并解压找到AndroidManifest.xml文件,在文件中搜索“package”找到相应的包名 2,使用adb命令 前提是已经下载android SDK ...

  7. 获取APP应用的包名信息

    语言: python 3.7 需求:获取APP的包名和程序入口信息,以便在 Appium 脚本中配置 appPackage 和 appActivity 参数. 场景一 资源:已有APP应用的apk安装 ...

  8. appium获取android app的包名和主Activity

    方法一在appium的android setting中选择下载到电脑上的app包,获取Activity. 方法二在android-sdk中安装build-tools包,进入这个目录.aapt dump ...

  9. appium 获取app的应用包名package和activity

    第一种,使用sdk自带的工具aapt,在sdk\builds-tools\目录下,切换到aapt所在目录 命令:aapt dump badging app的路径,运行后的结果中以下两行分别是应用包名p ...

随机推荐

  1. 使用C#解析XMIND文件格式

    static void Main(string[] args) { var tempPath = @"c:\Temp"; if (Directory.Exists(tempPath ...

  2. 13Ajax和JQuery

    1.Ajax 1.1是什么? “Asynchronous Javascript And XML”(异步JavaScript和XML), 并不是新的技术,只是把原有的技术,整合到一起而已. 1.使用CS ...

  3. mysql +keeplive+drbd高可用架构(MHA基于监听端口VIP的高可用)

    1MySQL+DRBD+keepalived高可用架构 DRBD(DistributedReplicatedBlockDevice)是一个基于块设备级别在远程服务器直接同步和镜像数据的开源软件,类似于 ...

  4. CSS3 Transform实例

    移动translate <!doctype html> <html> <head> <meta charset="utf-8"> & ...

  5. flask之环境的搭建

    一.查看ubantu上是否安装虚拟环境的包 virtualenv --version 这里显示的是:15.0.1的版本,如果没有的话, sudo pip install virtualenv sudo ...

  6. mybatis返回新增对象的主键

    加这两行就可以返回这个插入对象的自增的主键<insert id="insertSeatPortraitData" parameterType="seatPortra ...

  7. postman接口自动化测试之如何使用)

    postman 是一款强大网页调试工具的客户端,postman为用户提供强大的 Web API & HTTP 请求调试功能.postman能够发送任何类型的HTTP 请求 (GET, HEAD ...

  8. 使用linkedlist封装简单的先进先出队列

    创建一个类Queue代表队列(先进先出),添加add(Object obj) 及get()方法, 并添加main()方法进行验证 思路: 使用LinkedList实现队列,在向LinkedList中添 ...

  9. linux运维、架构之路-keepalived高可用

    一.Keepalived介绍          Keepalived起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能,Ke ...

  10. 饿了么CTO张雪峰:允许90后的技术人员“浮躁“一点

    编者按:今年4月,饿了么正式加入了阿里新零售战队,进一步加速其在本地生活市场的扩张速度.在创业9年的时间中,饿了么在外卖领域经历了真正的“从0到1”,尤其是在外卖平台的技术升级方面,越过了一个又一个的 ...