10

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

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

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

  • 运行需要很多时间

我可以使用其他任何工具来获取图标文件路径吗?

感谢所有建议

编辑:澄清一下,我不想在设备上这样做。我正在尝试在 PC 上执行此操作。

4

8 回答 8

13

aapt工具随 Android SDK 一起提供,可以在下面找到platform-tools您需要的详细信息。apktool 附带 aapt

aapt d --values badging payload.apk

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

于 2013-01-23T16:48:31.137 回答
11
  • 将 .apk 文件重命名为 .zip
  • 用7zip之类的工具解压
  • 在以下位置找到图标为 png 文件: /res/drawable-hdpi/icon.png

编辑:请注意,此文件并非存在于所有 apk 文件中,而是存在于大多数文件中。除了提取所有 .png 文件并从列表中选择一个之外,我找不到更好的解决方案。

于 2013-01-23T15:58:34.283 回答
7
//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);

你可以参考这个链接

获取 apk 图标

于 2014-02-19T13:35:53.227 回答
5

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

android:icon="@drawable/ic_launcher"

然后图标文件将是res/drawable-<dim>/ic_launcher.png,其中<dim>任何一个都ldpi, mdpi, hdpi, xhdpi可以代表不同的分辨率。最大的图像将在xhdpi或中hdpi

于 2012-09-28T12:59:52.413 回答
2

软件

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

描述

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

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

APK 图标编辑器

  • 这两种工具都可以帮助您通过用户友好的 GUI轻松编辑、替换或提取图标。
  • 这两种工具都适用于WindowsmacOSLinux
  • 这两个工具都是开源的(用 C++/Qt 编写)。

免责声明

我是这些工具的作者。

于 2014-06-01T17:35:34.463 回答
2

bash函数将提取图标并用 显示preview。如果您不在 Mac 上,则可以使用ImageMagickdisplay中的命令。

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
于 2015-01-28T20:03:23.430 回答
1

如果您像我一样是新手,您可以使用 Android 应用程序 Called My APK(Google Play 链接)在您的 android 手机上提取应用程序图标,或者安装此应用程序,或者您刚刚从apkMirrorAPKpureAppsAraby等外包下载了 apk 文件

于 2019-05-23T14:27:33.330 回答
0

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

至于图标文件名的确定,可以根据 AndroidManifest.xml 的内容来确定,但可能需要根据屏幕密度、方向、语言配置等因素考虑到图标的多个版本。

于 2012-09-28T12:54:12.793 回答