【问题标题】:Get icon from an apk file从 apk 文件中获取图标
【发布时间】:2013-06-09 08:31:51
【问题描述】:

我正在开发一个 Winform 应用程序,使用 aapt 从 apk 文件中获取一些信息。我得到了应用程序图标的路径,如下所示:*res/drawable-mdpi/app_icon.png* 我想从其路径中获取图标并将其推送到 ImageList。我该怎么做? 谢谢先进!

【问题讨论】:

  • 您可以将其作为存档打开并获取图标。

标签: android winforms aapt


【解决方案1】:

从 APK 文件中获取图标:

File file = new File("/mnt/sdcard/thinkandroidsimple/pam.apk");
String sourcePath = file.getPath();

if (sourcePath.endsWith(".apk")) {
        PackageInfo packageInfo = context.getPackageManager()
                   .getPackageArchiveInfo(filePath, PackageManager.GET_ACTIVITIES);
        if(packageInfo != null) {
            ApplicationInfo appInfo = packageInfo.applicationInfo;
            if (Build.VERSION.SDK_INT >= 8) {
                appInfo.sourceDir = sourcePath;
                appInfo.publicSourceDir = sourcePath;
            }
            Drawable icon = appInfo.loadIcon(context.getPackageManager());
            Bitmap bmpIcon = ((BitmapDrawable) icon).getBitmap();
        }
    }

查看详情:How to get Icon from APK files in Android

【讨论】:

    【解决方案2】:

    使用 WinRar/WinZip 或等效工具打开 apk 文件(就像打开 .zip 文件一样)并从该路径中提取文件。

    【讨论】:

      【解决方案3】:

      看下面的代码可能对你有帮助

         public Drawable getFullResDefaultActivityIcon() {
                  return getFullResIcon(Resources.getSystem(), android.R.mipmap.sym_def_app_icon);
              }
      
      public Drawable getFullResIcon(Resources resources, int iconId) {
          Drawable d;
          try {
              ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
              int iconDpi = activityManager.getLauncherLargeIconDensity();
              d = resources.getDrawableForDensity(iconId, iconDpi);
          } catch (Resources.NotFoundException e) {
              d = null;
          }
      
          return (d != null) ? d : getFullResDefaultActivityIcon();
      }
      
      public Drawable getFullResIcon(String packageName, int iconId) {
          Resources resources;
          try {
              resources = mContext.getPackageManager().getResourcesForApplication(packageName);
          } catch (PackageManager.NameNotFoundException e) {
              resources = null;
          }
          if (resources != null) {
              if (iconId != 0) {
                  return getFullResIcon(resources, iconId);
              }
          }
          return getFullResDefaultActivityIcon();
      }
      
      public Drawable getFullResIcon(ResolveInfo info) {
          return getFullResIcon(info.activityInfo);
      }
      
      public Drawable getFullResIcon(ActivityInfo info) {
          Resources resources;
          try {
              resources = mContext.getPackageManager().getResourcesForApplication(info.applicationInfo);
          } catch (PackageManager.NameNotFoundException e) {
              resources = null;
          }
          if (resources != null) {
              int iconId = info.getIconResource();
              if (iconId != 0) {
                  return getFullResIcon(resources, iconId);
              }
          }
          return getFullResDefaultActivityIcon();
      }
      
      private Drawable getAppIcon(ResolveInfo info) {
          return getFullResIcon(info.activityInfo);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-20
        • 2012-09-20
        • 1970-01-01
        • 1970-01-01
        • 2013-05-14
        相关资源
        最近更新 更多