最近项目有个需求,需要拿到前端上传的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. keepalived的配置文件

    ! Configuration File for keepalived global_defs { notification_email { # acassen@firewall.loc # fail ...

  2. Arrays基本使用

    public static void main(String[] args) { String[] a = { "a", "b", "c" ...

  3. P2254 [NOI2005]瑰丽华尔兹

    链接P2254 [NOI2005]瑰丽华尔兹 首先有个很朴素的\(dp\),设\(f_{i,j,k}\)表示\(k\)时刻地点\(i,j\)的最长长度. 然后这样不能优化,考虑利用一段连续时间是同一个 ...

  4. thinkphp 响应对象response

    1.可以通过修改配置文件的 default_return_type修改输出类型 // 默认输出类型 'default_return_type' => 'html', 2. 可以通过Config类 ...

  5. [BZOJ2600] ricehub

    问题描述 乡间有一条笔直而长的路称为"米道".沿着这条米道上 R 块稻田,每块稻田的坐标均为一个 1 到 L 之间(含 1 和 L)的整数.这些稻田按照坐标以不减的顺序给出,即对于 ...

  6. [POJ1187] 陨石的秘密

    问题描述 公元11380年,一颗巨大的陨石坠落在南极.于是,灾难降临了,地球上出现了一系列反常的现象.当人们焦急万分的时候,一支中国科学家组成的南极考察队赶到了出事地点.经过一番侦察,科学家们发现陨石 ...

  7. AndroidManifest.xml里加入不同package的component (Activity、Service里android:name里指定的值一般为句号加类名),可以通过指定完全类名(包名+类名)来解决

    我们都知道对于多个Activity如果在同一个包中,在Mainfest中可以这样注册 <span style="font-size: small;"><?xml  ...

  8. gitHub pull Request记录

    1.fork开源项目到自己的gitHub,点fork,然后clone即可 2.提交本地修改,push到自己的代码库 3.点new pull Request,写点备忘信息 注意确保修改的正确性,如果运行 ...

  9. c#Main()方法,java 是小写main

    main 方法,staitc 静态关键首字母大写,区分大小写,java 是main小写,返回值 ,vodi,int参数:可选static void Main(string[] args){ }

  10. Angular:ViewProviders和Providers的区别

    在Angular中使用依赖注入(DI)的时候,我们一般会使用providers.其实要做同样的事我们还有另外一个选择:viewProviders. viewProviders允许我们定义只对组件的vi ...