从apk文件中提取应用程序图标

时间:2012-09-28 12:49:39

标签: android apk embedded-resource android-resources

我需要从apk文件中提取应用程序图标。 我只需要一个图标,我不想在apk中提取其他所有内容。文件很容易掌握,但如何确定哪个图标文件是正确的应用程序图标。我想这是存储在资源表中的?所以我想我需要的是实际读取资源表,我希望从资源表中我可以确定图标文件namne然后我可以从应用程序中提取。

我需要一个简单的工具,我知道apktool可以提取整个apk文件,但这不是我想要的,因为

  • 它做了我不需要的其他东西(反编译,解压缩其他文件等)

  • 需要花费大量时间才能运行

我是否可以使用其他工具来获取图标文件路径?

赞赏所有建议

编辑:为了澄清,我不是试图在设备上执行此操作。我试图在PC上这样做。

7 个答案:

答案 0 :(得分:12)

附带aapt的Android SDK附带的

platform-tools工具可为您提供所需的详细信息。 apktool ships with aapt

aapt d --values badging payload.apk

使用此输出,您可以从apk(这是一个zip文件)中提取图标文件。

答案 1 :(得分:6)

//if your apk is not installed ..only having .apk on sdcard   
  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);

您可以参考此链接

Get-apk icon

答案 2 :(得分:5)

据我所知(并且根据维基百科), APK文件是ZIP文件格式的包。所以我认为你可以使用任何解压缩工具来解压缩apk文件并获取你想要的图标。对于启动器图标,只需打开AndroidManifest.xml文件,然后查看android:icon的{​​{1}}属性即可。它可能看起来像这样:

<application>

图标文件将为android:icon="@drawable/ic_launcher",其中res/drawable-<dim>/ic_launcher.png可以是代表不同分辨率的任何<dim>。最大的图片位于ldpi, mdpi, hdpi, xhdpixhdpi

答案 3 :(得分:1)

软件

您还可以尝试使用这些GUI工具轻松提取Android应用程序图标:

描述

虽然Apktool是在幕后使用的,但GUI前端使得提取或更改APK图标变得非常简单。

从清单和内部结构中自动解析正确的应用程序图标,因此无需手动搜索所需的资源文件。

APK Icon Editor

  • 这两款工具都可以帮助您通过用户友好的GUI轻松编辑,替换或提取图标
  • 这两种工具均适用于 Windows macOS Linux
  • 这两个工具都是open-source(用C ++ / Qt编写)。

声明

我是这些工具的作者。

答案 4 :(得分:1)

bash功能会提取图标并显示preview。如果您不在Mac上,则可以使用ImageMagick中的display命令。

preview-android-icon () { unzip -p $1 $(aapt d --values badging $1 | sed -n "/^application: /s/.*icon='\([^']*\).*/\1/p") > /tmp/$$.png && preview /tmp/$$.png; }

像这样使用:

preview-android-icon /path/to/your.apk

答案 5 :(得分:0)

apktool的源码可用。由于资源提取和代码反编译是完全不同的,我怀疑它很容易修改它以删除代码反编译,以最小化它到你需要的。

关于确定图标文件名,您可以根据AndroidManifest.xml的内容进行操作,但您可能需要根据屏幕密度,方向,语言配置等考虑图标的多个版本。

答案 6 :(得分:0)

如果您是像我这样的新手,则可以使用名为“我的APK”(Google Play Link)的Android应用程序在安装了此应用程序的Android手机上提取应用程序图标,或者您刚刚从{{3 }},apkMirrorAPKpure