应用场景:1、在界面中显示应用程序的版本号;2、用户启动该应用,后台判断该应用是否是最新版本。上述情景都需要在程序中自动获取到应用的版本号。思路简介:在Android中,应用程序的版本号是在AndroidManifestxml文件中进行配置的
首先安装java环境,然后到google code里面下载apktool152tarbz2和apktool-install-windows-r05-ibottarbz2
从两个压缩包中解压aaptexe、apktoolbat和apktooljar三个文件,放在一个文件夹中(为方便命令行中使用apktool命令,可将解压到的路径放入path或者直接将这三个文件放入path路径下的文件夹,如C:\Windows)
通过cmd运行 Apktool 命令:
apktool d XXXapk ABC 反编译XXXapk到文件夹ABC
apktool b ABC 从文件夹ABC重建APK,输出到ABC\dist\outapk
安卓的APK么?
安卓的APK是个压缩包格式,我给你个思路 具体代码你去写 还是比较简单的
分为两步:①上传按钮点击时解压APK压缩包
②获取压缩包内AndroidManifestxml(apk的包名,版本号,版本名称都在此XML文件内)
③解析这个XML
既然答了 我就完善一下:(在codeplex上面找到的)
using AndroidXml;
using IonicZip;
using System;
using SystemCollectionsGeneric;
using SystemIO;
using SystemLinq;
using SystemText;
using SystemThreadingTasks;
using SystemXml;
namespace APKRead
{
class NamespaceInfo
{
public string Prefix { get; set; }
public string Uri { get; set; }
}
class Program
{
static List<AndroidInfo> androidInfos = new List<AndroidInfo>();
static void Main(string[] args)
{
//要分析的文件名称
var manifest = "AndroidManifestxml";
//读取apk,通过解压的方式读取
using (var zip = ZipFileRead("Newsapk"))
{
using (Stream zipstream = zip[manifest]OpenReader())
{
//将解压出来的文件保存到一个路径(必须这样)
using (var fileStream = FileCreate(manifest, (int)zipstreamLength))
{
// Initialize the bytes array with the stream length and then fill it with data
byte[] bytesInStream = new byte[zipstreamLength];
zipstreamRead(bytesInStream, 0, bytesInStreamLength);
// Use write method to write to the file specified above
fileStreamWrite(bytesInStream, 0, bytesInStreamLength);
}
}
}
//读取解压文件的字节数
byte[] data = FileReadAllBytes(manifest);
if (dataLength == 0)
{
throw new IOException("Empty file");
}
#region 读取文件内容
using (var stream = new MemoryStream(data))
{
var reader = new AndroidXmlReader(stream);
while (readerRead())
{
switch (readerNodeType)
{
case XmlNodeTypeElement:
{
AndroidInfo info = new AndroidInfo();
androidInfosAdd(info);
infoName = readerName;
infoSettings = new List<AndroidSetting>();
for (int i = 0; i < readerAttributeCount; i++)
{
readerMoveToAttribute(i);
AndroidSetting setting = new AndroidSetting() { Name = readerName, Value = readerValue };
infoSettingsAdd(setting);
}
readerMoveToElement();
break;
}
}
}
}
#endregion
FileDelete(manifest);
StringBuilder builder = new StringBuilder();
foreach (var androidInfo in androidInfos)
{
builderAppend(stringFormat("{0}:",androidInfoName));
foreach (var setting in androidInfoSettings)
{
builderAppend("{");
builderAppend(stringFormat("'{0}':'{1}'",settingName,settingValue));
builderAppend("},");
}
builderAppend("\n\n");
}
ConsoleWriteLine(builderToString());
}
}
/// <summary>
/// android应用程序信息
/// </summary>
public class AndroidInfo
{
public string Name { get; set; }
public List<AndroidSetting> Settings { get; set; }
}
/// <summary>
/// 设置
/// </summary>
public class AndroidSetting
{
public string Name { get; set; }
public string Value { get; set; }
}
}
//引用的IonicZip库可以直接通过 nuget下载。
在做APP UI自动化的时候,获取APK的包名、Activity信息是最基础的,问开发虽然是最快最简单的方式,但是这样就显得测试不是很专业了。下面我们就来看看应该怎样进行获取。
显示appApackage信息大致如下
这个很简单,你需要使用PackageManager,你查看这个类,就知道怎么获取Android手机里所有的应用程序的应用名称了,我的程序在linux里,若你查找了 还没搞定我可以给你一段代码
// 获取packageManager对象
PackageManager packageManager = thisgetPackageManager();
/getInstalledApplications 返回当前设备上安装的应用包集合
ApplicationInfo对应着androidManifestxml中的application标签。通过它可以获取该application对应的信息
/
List<ApplicationInfo> applicationInfos = packageManagergetInstalledApplications(0);
以上是主要代码
applicationInfos里的是ApplicationInfo类,ApplicationInfo applicationInfo = applicationInfosget(i);
String packageName = applicationInfopackageName;// 包名
String packageLabel = packageManagergetApplicationLabel(applicationInfo)toString();
packageLabel 这个就是应用程序名称
桌面的名字是第一个activity的android:label。
进程的名字是application的android:label。
getApplicationLabel获取的是application的android:label。
希望能帮到你。
以上就是关于安卓开发怎么获取第三方apk的包名全部的内容,包括:安卓开发怎么获取第三方apk的包名、如何通过反编译查询apk包名信息、C#中,上传apk时,怎样获取apk的基本信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)