获取apk文件图标,版本,名称

时间:2011-04-14 09:51:56

标签: android

对于尚未安装的软件包,有没有办法获取应用程序名称,应用程序版本和应用程序图标? (对于sdcard上的一些apk文件)

5 个答案:

答案 0 :(得分:60)

我花了更多时间,而不是承认寻找解决方案......并找到了它! :):)

徘徊在这个参考之后: 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);

经过轻度测试后,它似乎有效......哇。

答案 1 :(得分:13)

我试过了:

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

但如果未安装apk则无法使用此代码

答案 2 :(得分:7)

我可以使用getPackageArchiveInfo(archiveFilePath, flags)getApplicationIcon (ApplicationInfo info)

获取apk图标,版本,名称

答案 3 :(得分:5)

// 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());

答案 4 :(得分:0)

正如您可能已经发现的那样,如果安装了应用程序,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 Manifest,XML布局等。   并将DEX / ODEX转换为CLASS,任何人都可以打开   解编译器。

他的博客在这里: http://prasanta-paul.blogspot.com/2012/03/android-apk-extractor.html