c# 获取 Apk ,Aar 文件包名
最近项目有个需求,需要拿到前端上传的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 文件包名的更多相关文章
- 在Android手机上获取其它应用的包名及版本
转载请注明出处:http://blog.csdn.net/jason_src/article/details/37757661 获取Android手机上其它应用的包名及版本方法有非常多,能够通过AAP ...
- Android 在Android手机上获取其他应用的包名及版本号
获取Android手机上其他应用的包名及版本号方法有很多,可以通过AAPT从APK包中直接获取,也可以通过代码在手机上获取.显然,对于产品或者用户来说要获取这些信息,在手机上获取更为简便. 下面我们来 ...
- 如何获取到app的包名
相信很多朋友在刚开始接触测试app的时候都不清楚app的包名是什么,接下来给大家介绍几种方法去获取. 一.手机设备已连接到电脑,点击进入app中,前提是电脑上装备了android-SDK,tools文 ...
- apk签名、包名
//通过各手机管理软件,如如360.豌豆荚等查看 //使用命令行,可以查看到permission.packagename.title.versionCode等 aapt dump badging ~/ ...
- C#获取并修改文件扩展名的方法
本文实例讲述了C#获取并修改文件扩展名的方法.分享给大家供大家参考.具体分析如下: 这里使用C#编程的方法改变文件扩展名的文件,必须使用Path类. Path类用来解析文件系统路径的各个部分.静态方法 ...
- 查看apk文件包名的一些方法
1,如果有源码 直接将apk包修改为zip,并解压找到AndroidManifest.xml文件,在文件中搜索“package”找到相应的包名 2,使用adb命令 前提是已经下载android SDK ...
- 获取APP应用的包名信息
语言: python 3.7 需求:获取APP的包名和程序入口信息,以便在 Appium 脚本中配置 appPackage 和 appActivity 参数. 场景一 资源:已有APP应用的apk安装 ...
- appium获取android app的包名和主Activity
方法一在appium的android setting中选择下载到电脑上的app包,获取Activity. 方法二在android-sdk中安装build-tools包,进入这个目录.aapt dump ...
- appium 获取app的应用包名package和activity
第一种,使用sdk自带的工具aapt,在sdk\builds-tools\目录下,切换到aapt所在目录 命令:aapt dump badging app的路径,运行后的结果中以下两行分别是应用包名p ...
随机推荐
- keepalived的配置文件
! Configuration File for keepalived global_defs { notification_email { # acassen@firewall.loc # fail ...
- Arrays基本使用
public static void main(String[] args) { String[] a = { "a", "b", "c" ...
- P2254 [NOI2005]瑰丽华尔兹
链接P2254 [NOI2005]瑰丽华尔兹 首先有个很朴素的\(dp\),设\(f_{i,j,k}\)表示\(k\)时刻地点\(i,j\)的最长长度. 然后这样不能优化,考虑利用一段连续时间是同一个 ...
- thinkphp 响应对象response
1.可以通过修改配置文件的 default_return_type修改输出类型 // 默认输出类型 'default_return_type' => 'html', 2. 可以通过Config类 ...
- [BZOJ2600] ricehub
问题描述 乡间有一条笔直而长的路称为"米道".沿着这条米道上 R 块稻田,每块稻田的坐标均为一个 1 到 L 之间(含 1 和 L)的整数.这些稻田按照坐标以不减的顺序给出,即对于 ...
- [POJ1187] 陨石的秘密
问题描述 公元11380年,一颗巨大的陨石坠落在南极.于是,灾难降临了,地球上出现了一系列反常的现象.当人们焦急万分的时候,一支中国科学家组成的南极考察队赶到了出事地点.经过一番侦察,科学家们发现陨石 ...
- AndroidManifest.xml里加入不同package的component (Activity、Service里android:name里指定的值一般为句号加类名),可以通过指定完全类名(包名+类名)来解决
我们都知道对于多个Activity如果在同一个包中,在Mainfest中可以这样注册 <span style="font-size: small;"><?xml ...
- gitHub pull Request记录
1.fork开源项目到自己的gitHub,点fork,然后clone即可 2.提交本地修改,push到自己的代码库 3.点new pull Request,写点备忘信息 注意确保修改的正确性,如果运行 ...
- c#Main()方法,java 是小写main
main 方法,staitc 静态关键首字母大写,区分大小写,java 是main小写,返回值 ,vodi,int参数:可选static void Main(string[] args){ }
- Angular:ViewProviders和Providers的区别
在Angular中使用依赖注入(DI)的时候,我们一般会使用providers.其实要做同样的事我们还有另外一个选择:viewProviders. viewProviders允许我们定义只对组件的vi ...