Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 获取apk文件图标、版本、名称_Android - Fatal编程技术网

Android 获取apk文件图标、版本、名称

Android 获取apk文件图标、版本、名称,android,Android,对于尚未安装的软件包,是否有办法获取应用程序名称、应用程序版本和应用程序图标?(对于SD卡上的某些apk文件)我可以使用getPackageGearchiveInfo(archiveFilePath,flags)和getApplicationInfo(ApplicationInfo)获取apk图标、版本、名称。 使用: 示例图标: Drawable icon = packageInfo.applicationInfo.loadIcon(getActivity().getPackageManage

对于尚未安装的软件包,是否有办法获取应用程序名称、应用程序版本和应用程序图标?(对于SD卡上的某些apk文件)

我可以使用
getPackageGearchiveInfo(archiveFilePath,flags)
getApplicationInfo(ApplicationInfo)获取apk图标、版本、名称。

使用:

示例图标:

Drawable icon = packageInfo.applicationInfo.loadIcon(getActivity().getPackageManager());
我试过:

PackageInfo info = getPackageManager().getPackageArchiveInfo(fullPath, 0);
ApplicationInfo appinfo = info.applicationInfo;
label = getPackageManager().getApplicationLabel(appinfo).toString();
img = getPackageManager().getApplicationIcon(info.packageName);

但是如果没有安装apk,此代码将无法工作。

正如您可能已经发现的那样,PackageManager仅在安装了应用程序后才对您有用

要解决在不安装应用程序的情况下获取信息的问题,请使用APK提取器,请参阅:

这个项目是一个开发公共可用解析器的尝试 它可以解析Android的二进制XML。AAPT(安卓资产包装) 工具)以谷歌自己的专有二进制编码/解码XML资源 XML格式。人们普遍认为这是一种通用的WBXML格式 任何支持WBXML的解析器都可以解析它。但事实并非如此

如果您打算探索Android的二进制XML,我的代码库可以 帮助您启动并在其上构建服务

版本1.0-能够解析Android清单、XML布局等。 以及将DEX/ODEX转换为类,该类可以由任何用户打开 反编译

他的博客在这里:

我只是花了比我承认的更多的时间来寻找这个问题的解决方案。。找到了!:):)

在进入此参考之后: 我发现了从尚未安装的.apk文件中获取图标和名称(即标签)的诀窍

我希望在这方面帮助他人不会太迟:

 String APKFilePath = "mnt/sdcard/myapkfile.apk"; //For example...
 PackageManager pm = getPackageManager();
 PackageInfo    pi = pm.getPackageArchiveInfo(APKFilePath, 0);

 // the secret are these two lines....
 pi.applicationInfo.sourceDir       = APKFilePath;
 pi.applicationInfo.publicSourceDir = APKFilePath;
 //

 Drawable APKicon = pi.applicationInfo.loadIcon(pm);
 String   AppName = (String)pi.applicationInfo.loadLabel(pm);

经过光照测试,它似乎起作用了。。。唷。

我试过了,但packageInfo总是空的。我缺少任何权限?请在三星Galaxy Tab 8.9 Android 3.2版为我工作。packageInfo不为null,如果尚未安装应用程序,则intent为null。对于未安装的应用程序不起作用:(,仅返回默认的应用程序图标。这不应该是一个可接受的答案,因为它不能回答问题。@POMATu请标记Tam的答案,因为可接受的答案必须是market作为正确答案:D帮助很大,谢谢:)版本如何?如何获得它?@Shirisherwade它已经在“pi”中了变量。版本代码:,版本名称:是否可以找到apk的目的过滤器?这两条保密线使
APKFilePath
处于打开状态。如何关闭该文件?您是否能够找到验证号,如果是,请发布您的答案。
PackageInfo info = getPackageManager().getPackageArchiveInfo(fullPath, 0);
ApplicationInfo appinfo = info.applicationInfo;
label = getPackageManager().getApplicationLabel(appinfo).toString();
img = getPackageManager().getApplicationIcon(info.packageName);
 String APKFilePath = "mnt/sdcard/myapkfile.apk"; //For example...
 PackageManager pm = getPackageManager();
 PackageInfo    pi = pm.getPackageArchiveInfo(APKFilePath, 0);

 // the secret are these two lines....
 pi.applicationInfo.sourceDir       = APKFilePath;
 pi.applicationInfo.publicSourceDir = APKFilePath;
 //

 Drawable APKicon = pi.applicationInfo.loadIcon(pm);
 String   AppName = (String)pi.applicationInfo.loadLabel(pm);