Intereting Posts
Phonegap – невозможно открыть URL-адрес ресурса: файл: ///android_asset/www/cordova_plugins.json Разница между RTC и RTC_WAKEUP в android Как отправлять почту программно в android с использованием маркера OAuth2.0 JQuery Mobile swipe events в Android 4.2.2 не работает С несколькими уведомлениями второе уведомление, показывающее в режиме слияния Android Метод jsonObject.addProperty добавляет ненужные значения котировок и слэшей к его значению Как я могу получить страшные разрешения WRITE_SECURE_SETTINGS для моего приложения для Android? Где установить Android SDK на Mac OS X? Android – Viewpager и фрагменты, методы не работают 0 в консоли разработчика Google Play Как вставлять видео Youtube в приложение для Android Cordova Пауза и возобновление записи звука на Android Подход к сериализации класса модели конечных точек облака для файловой системы Android App Widget не отображается в списке виджетов на устройствах Honeycomb до тех пор, пока Launcher не будет перезапущен Нити AsyncTask никогда не умирают

Извлечь значок приложения из файла 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.