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

Android 从apk文件中提取应用程序图标,android,apk,embedded-resource,android-resources,Android,Apk,Embedded Resource,Android Resources,我需要从apk文件中提取应用程序图标。 我只需要一个图标,我不想提取apk中的所有其他内容。这些文件很容易保存,但如何确定哪个图标文件是正确的应用程序图标。我猜这是存储在资源表中的?所以我想我需要的实际上是读取资源表,我希望从资源表中我可以确定图标文件namne,然后我可以从应用程序中提取它 我需要一个简单的工具,我知道apktool可以提取整个apk文件,但这不是我想要的,因为 它做了很多我不需要的东西(解压、解压其他文件等) 跑步需要很多时间 有没有其他工具可以用来获取图标文件路径 欢迎

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

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

  • 它做了很多我不需要的东西(解压、解压其他文件等)

  • 跑步需要很多时间

有没有其他工具可以用来获取图标文件路径

欢迎所有建议


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

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

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

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

android:icon=“@drawable/ic_launcher”

图标文件将是
res/drawable-/ic_launcher.png
,其中
可以是代表不同分辨率的
ldpi、mdpi、hdpi、xhdpi中的任何一种。最大的图像将位于
xhdpi
hdpi

  • 将.apk文件重命名为.zip
  • 用7zip之类的工具解压
  • 在以下目录下找到作为png文件的图标:
    /res/drawable hdpi/icon.png
编辑:请注意,此文件不存在于所有apk文件中,但存在于大多数apk文件中。
除了提取所有.png文件并从列表中选择一个文件之外,我找不到更好的解决方案。

aapt
工具随Android SDK提供,在
平台工具下可以找到。
应该会提供您需要的详细信息

aapt d——值标记有效负载.apk

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

你可以参考这个链接

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

  • –简单直观
  • –更先进但仍然易于使用
描述 虽然Apktool是在后台使用的,但GUI前端使提取或更改APK图标变得非常简单

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

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

bash
函数将提取图标,并使用
预览显示它。如果您不在mac电脑上,则可以使用来自的
display
命令

像这样使用它:

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

如果你像我一样是新手,你可以使用名为My APK()的android应用程序在你的android手机上提取应用程序图标,或者安装此应用程序,或者你刚刚从外包商下载了APK文件,比如,

实际上,您可以将应用程序图标设置为可编程绘图,然后将其转换为位图并保存到设备内存中。@dharmendra,我实际上是在web服务上而不是在实际设备上执行此操作。我将在问题中澄清这一点,感谢您的回答,但不幸的是,AndroidManisfest.xml文件被编译为二进制格式。如果有人能找到一个可以反编译AndroidManifest.xml的小实用程序,这将是一个很好的解决方案。谢谢你的回复。我也一直在考虑这些术语,并已开始从apktool中提取清单反编译部分。但是,如果能找到一些现成的工具来实现这一点,那就太好了。我希望在某个地方有这样一个工具。这不是正确的解决方案,因为你无法确定图标名称,而且一个应用程序中可能有许多图标。icon.png不一定意味着它是应用程序图标。是的,我编辑了我的答案。我认为没有办法找到合适的人;出于个人用途,我提取服务器上的所有文件并列出所有.png文件,然后选择其中一个。我在
/res/mipmap-xxxhdpi-v4/icon.png
中找到了图标,在
/res/drawable hdpi/
中只包含启动图像(可能是因为Android的最新版本(2019
:)
))它返回一些APK的ic_launcher.xml。我不明白为什么。@zakjma它可能是一个非PNG文件。这是一个很好的建议,但许多新的APK是不同的,这个命令不起作用。
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