Извлечь значок приложения из файла apk

Мне нужно извлечь значок приложения из apk-файла. Мне просто нужен один значок, я не хочу извлекать все остальное в apk. Файлы легко получить, но как определить, какой файл значков является правильным приложением. Думаю, это хранится в таблице ресурсов? Поэтому я думаю, что мне нужно на самом деле прочитать таблицу ресурсов, и я надеюсь, что из таблицы ресурсов я могу определить файл значка namne, который я могу извлечь из приложения.

Мне нужен простой инструмент для этого, я знаю об apktool, который может извлечь весь файл apk, но это не то, что я хочу с тех пор

  • Он делает много других вещей, которые мне не нужны (декомпилировать, распаковывать другие файлы и т. Д.),

  • Требуется много времени для запуска

Есть ли какой-нибудь другой инструмент, который я могу использовать только для того, чтобы получить путь к файлу значка?

Все предложения приветствуются

EDIT: Чтобы уточнить, я не пытаюсь сделать это на устройстве. Я пытаюсь сделать это на ПК.

Инструмент aapt поставляется с Android SDK, найденным в platform-tools чтобы предоставить вам необходимую информацию. Apktool поставляется с aapt .

aapt d --values badging payload.apk

Используя этот вывод, вы можете извлечь файл значка из apk (который является zip-файлом).

  • Переименуйте файл .apk в .zip
  • Распакуйте его с помощью инструмента, такого как 7zip
  • Найдите значки в виде файлов png в разделе: /res/drawable-hdpi/icon.png

Изменить: обратите внимание, что этот файл отсутствует во всех файлах apk, но в большинстве из них. Я не мог найти лучшее решение самостоятельно, кроме того, чтобы извлечь все .png-файлы и выбрать один из списка.

Что касается моих знаний (и, согласно Википедии), файлы APK являются файлами в формате ZIP . Поэтому я думаю, что вы можете просто использовать любой инструмент распаковки, чтобы распаковать файл apk и взять нужный значок. Для значка launcher просто откройте файл AndroidManifest.xml и посмотрите на свойство android:icon для <application> . Вероятно, это выглядит примерно так:

android:icon="@drawable/ic_launcher"

Тогда файл значков будет res/drawable-<dim>/ic_launcher.png , где <dim> может быть любым из ldpi, mdpi, hdpi, xhdpi которые обозначают разные разрешения. Наибольшее изображение будет в xhdpi или hdpi .

 //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»

Эта функция bash извлечет значок и отобразит его с preview . Если вы не на Mac, вы можете использовать команду display из ImageMagick .

 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 

Доступен источник apktool. Поскольку извлечение ресурсов и декомпиляция кода совершенно разные, я подозреваю, что было бы легко изменить его, чтобы удалить декомпиляцию кода, чтобы свести его к минимуму.

Что касается определения имени файла значка, вы основываете его на содержимом AndroidManifest.xml, но вам может потребоваться учет нескольких версий значка на основе плотности экрана, ориентации, настройки языка и т. Д.

Для этой цели вы также можете использовать редактор значков APK .

Хотя он извлекает содержимое APK во временную папку, он позволяет вам легко редактировать, заменять или извлекать только значки . Редактор Icon APK использует aapt (metioned в ответе kxb ), выступая в качестве упрощающей оболочки над ним.

Инструмент является открытым исходным кодом, написанным на C ++ / Qt. Доступны бинарные файлы для Windows.