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

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

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

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

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

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

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

РЕДАКТИРОВАТЬ: Чтобы уточнить, я не пытаюсь сделать это на устройстве. Я пытаюсь сделать это на ПК.


person www.jensolsson.se    schedule 28.09.2012    source источник
comment
На самом деле вы получаете значок приложения как программный, после чего вы можете преобразовать его в растровое изображение и сохранить в памяти вашего устройства.   -  person Dharmendra    schedule 28.09.2012
comment
@dharmendra, на самом деле я пытаюсь сделать это в веб-службе, а не на самом устройстве. Я уточню это в вопросе   -  person www.jensolsson.se    schedule 01.10.2012


Ответы (8)


Инструмент aapt поставляется с Android SDK, который находится в разделе platform-tools и должен предоставить вам необходимые сведения. apktool поставляется с aapt.

aapt d --values badging payload.apk

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

person Community    schedule 23.01.2013
comment
он возвращает ic_launcher.xml для некоторых apks. Я не мог понять, почему. - person zakjma; 11.04.2020
comment
@zakjma Вероятно, это адаптивный значок, а не PNG. - person Eugen Pechanec; 11.08.2020

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

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

person adrianTNT    schedule 23.01.2013
comment
Это неправильное решение, поскольку вы не можете определить имя значка, а в приложении может быть много значков. icon.png не обязательно означает, что это значок приложения. - person www.jensolsson.se; 04.02.2013
comment
Да, я отредактировал свой ответ. Я думаю, что нет способа найти правильный; для личного использования я извлекаю все файлы на сервере и перечисляю все файлы .png, затем выбираю один из них. - person adrianTNT; 05.02.2013
comment
Я нашел значок в /res/mipmap-xxxhdpi-v4/icon.png, в /res/drawable-hdpi/ содержит только заставку (вероятно, потому что в более поздних версиях Android (2019 :)) все изменилось) - person Guilherme Nascimento; 13.06.2019

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

person Dipak Sonnar    schedule 19.02.2014

Насколько мне известно (а также согласно Википедии), файлы 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.

person Ridcully    schedule 28.09.2012
comment
Спасибо за ответ, но, к сожалению, файл AndroidManisfest.xml скомпилирован в двоичный формат. Если кто-то может найти небольшую утилиту, которая декомпилирует AndroidManifest.xml, это будет хорошим решением. - person www.jensolsson.se; 01.10.2012

Эта функция 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
person JohnnyLambada    schedule 28.01.2015
comment
Это хороший совет, но многие новые APK отличаются, и эта команда не будет работать. - person Zdenek; 29.11.2020

Программное обеспечение

Вы также можете попробовать эти инструменты с графическим интерфейсом, чтобы легко извлечь значок приложения Android:

Описание

Хотя Apktool используется «под капотом», внешний интерфейс с графическим интерфейсом позволяет очень просто извлекать или изменять значки APK.

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

Значок APK  Редактор

  • Оба инструмента помогают легко редактировать, заменять или извлекать значки с помощью удобного графического интерфейса.
  • Оба инструмента доступны для Windows, macOS и Linux.
  • Оба инструмента имеют открытый код (написаны на C++/Qt).

Отказ от ответственности

Я автор этих инструментов.

person kefir500    schedule 01.06.2014

если вы новичок, как и я, вы можете использовать приложение для Android под названием My APK (Ссылка на Google Play), чтобы извлечь значки приложений на вашем телефоне Android, либо это приложение установлено, либо вы только что загрузили файлы apk из сторонних источников, таких как apkMirror, APKpure, AppsAraby

person Joe    schedule 23.05.2019

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

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

person mah    schedule 28.09.2012
comment
Спасибо за ответ. Я тоже думал об этом и начал работу по извлечению части декомпиляции манифеста из apktool. Но было бы очень неплохо найти какие-то инструменты, которые делали бы это из коробки. Я надеялся, что где-то есть такой инструмент. - person www.jensolsson.se; 01.10.2012