有没有一种方式可以获取未安装应用程序的应用程序名称、版本和应用程序图标?(针对存储在SD卡上的某些APK文件)
有没有一种方式可以获取未安装应用程序的应用程序名称、版本和应用程序图标?(针对存储在SD卡上的某些APK文件)
我刚花费了比我愿意承认的更多时间来寻找这个解决方案...并且找到了! :) :)
在查看这个参考文献后: http://code.google.com/p/android/issues/detail?id=9151 我发现了一个小技巧,可以获取未安装的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 info = getPackageManager().getPackageArchiveInfo(fullPath, 0);
ApplicationInfo appinfo = info.applicationInfo;
label = getPackageManager().getApplicationLabel(appinfo).toString();
img = getPackageManager().getApplicationIcon(info.packageName);
但如果apk没有安装,这段代码将无法工作。
getPackageArchiveInfo(archiveFilePath, flags)
和getApplicationIcon(ApplicationInfo info)
来获取apk图标、版本和名称。// Install a known apk file from the SD-Card
// or launch it if installed.
// -hsigmond
protected void runAppFromApkFileOnSdCard() {
final PackageManager pm = getActivity().getPackageManager();
String apkFileName = "application_name.apk";
String fullPath = "/sdcard/"+apkFileName;
PackageInfo packageInfo = pm.getPackageArchiveInfo(fullPath, 0);
Intent intent = pm.getLaunchIntentForPackage(packageInfo.packageName);
if( intent == null ){
File file = new File(fullPath);
intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.fromFile(file),
"application/vnd.android.package-archive");
}
startActivity(intent);
}
使用:
packageInfo.applicationInfo.['name','icon','logo'] etc.
示例图标:
Drawable icon = packageInfo.applicationInfo.loadIcon(getActivity().getPackageManager());
正如您所发现的那样,PackageManager 只有在应用程序已安装时才对您有用。
为了解决您在不安装应用程序的情况下获取信息的问题,请使用APK提取器,请参见:http://code.google.com/p/apk-extractor/downloads/detail?name=APK-Extractor-src-1.0.zip&can=2&q=
该项目旨在开发一个公开可用的解析器,可以解析Android的二进制XML。AAPT(Android资产打包工具)以Google自己的专有二进制XML格式编码/解码XML资源。人们普遍认为这是一种通用的WBXML格式,任何支持WBXML的解析器都可以解析它。但这是不正确的。
如果您计划探索Android的二进制XML,则我的代码库可以帮助您开始并构建基于其上的服务。
版本1.0-能够解析Android清单、XML布局等,并将DEX / ODEX转换为CLASS,可以被任何反编译器打开。
他的博客在这里: http://prasanta-paul.blogspot.com/2012/03/android-apk-extractor.html