我需要从apk文件中提取应用程序图标。 我只需要一个图标,我不想在apk中提取其他所有内容。文件很容易掌握,但如何确定哪个图标文件是正确的应用程序图标。我想这是存储在资源表中的?所以我想我需要的是实际读取资源表,我希望从资源表中我可以确定图标文件namne然后我可以从应用程序中提取。
我需要一个简单的工具,我知道apktool可以提取整个apk文件,但这不是我想要的,因为
它做了我不需要的其他东西(反编译,解压缩其他文件等)
需要花费大量时间才能运行
我是否可以使用其他工具来获取图标文件路径?
赞赏所有建议
编辑:为了澄清,我不是试图在设备上执行此操作。我试图在PC上这样做。
答案 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);
您可以参考此链接
答案 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, xhdpi
或xhdpi
。
答案 3 :(得分:1)
您还可以尝试使用这些GUI工具轻松提取Android应用程序图标:
虽然Apktool是在幕后使用的,但GUI前端使得提取或更改APK图标变得非常简单。
从清单和内部结构中自动解析正确的应用程序图标,因此无需手动搜索所需的资源文件。
我是这些工具的作者。
答案 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 }},apkMirror,APKpure