Я ищу возможность получить как имена пакетов, так и общие имена приложений, установленных на устройстве Android через ADB, или, по крайней мере, получить общее имя, если имя пакета известно. Быстрый поиск на нашем сайте поднял два связанных вопроса, но они не решили мою проблему:
- Как получить общее имя приложения с именем пакета (например, com.android.blabla)? (командная строка или включенное приложение) не работает через ADB (но использует приложение, с которым вам нужно искать вручную), что соответствует запросу OP
- Как найти приложение по имени пакета? просто возвращается к поиску URL в Google Play , который не всегда подходит (так как там не все приложения доступны).
Я ищу способ получения информации непосредственно с устройства, если это возможно, а не "любым" способом (включая "поиск в Интернете" или "через приложение"), поскольку эти два вопроса имеют его.
Я знаю, что есть несколько инструментов для получения деталей пакета:
adb dumpsys package
: Хотя в этом списке перечислены все пакеты с подробной информацией, «общее имя» не отображаетсяadb shell pm list
: только дает имена пакетовaapt
сможет получить общее имя, но для этого потребуется сначала извлечь.apk
файл с устройства, что не очень удобно (и, очевидно, будет довольно медленным, если установлено много и / или больших приложений)
Я что-то пропустил? Я знаю, что информация должна быть на устройстве (как еще она может отображать имена приложений в графическом интерфейсе? Я сомневаюсь, что Android анализирует .apk
файл каждый раз, когда графическому интерфейсу нужно «общее имя»). Так есть ли способ получить его, используя ADB напрямую?
TL; DR
Фон (если кому-то любопытно): я хочу иметь возможность быстро получить список пользовательских приложений с любого из моих устройств, не возвращаясь к акробатике. Список имен их пакетов я могу получить, используя их adb shell pm list -3
, но так как они являются только именами пакетов, распознавание приложений является догадкой. Поэтому, если бы была какая-то команда ADB для получения общего имени для данного имени пакета, я мог бы просто использовать цикл вроде for pkg in $(adb shell pm list -3); do echo "- $(adb <whatever_the_command_is> $pkg) ($pkg)"; done
- и получить список всех установленных пользовательских приложений в «удобочитаемом формате» вместе с именами их пакетов.
Случаи использования:
- Посмотрите, какие «лишние» приложения установлены (которые я мог бы удалить)
- Перекрестные списки с нескольких устройств
- Документация ;)
- и, вероятно, больше (но выше 3 это то, что мне нужно)
источник
Ответы:
Это не окончательный ответ, так как он не является общим (работает только на некоторых устройствах), но это, по крайней мере, начало:
Как мы выяснили , по крайней мере, ПЗУ на базе CM с Kitkat (Android 4.4) и выше поставляются с
aapt
двоичным файлом, доступным в/system/bin
1 . Если в вашем ПЗУ его нет, и вы можете установить двоичный файл на устройство, вы можете найти его здесь .Использование
aapt
, получение имени приложения возможно сВывод будет выглядеть примерно так
label='Funny App'
, что вы легко сможете разобрать по имени приложения, например(не хорошо, если имя приложения содержит одинарные кавычки, но это может считаться косметикой - или вы придумали, как улучшить sed для решения этой проблемы).
1: мы не обнаружили этого в стандартных ПЗУ Kitkat и выше, которые мы проверили, так что это могут быть только ПЗУ на основе CM
источник
aapt
двоичного файла. Вы можете очень хорошо загрузить и переименовать двоичный файлaapt
в ПК, установить совместимое с Linux разрешение на выполнение исполняемого файла и передать его/data/local/tmp
, а затем использовать абсолютный путь/data/local/tmp/aapt
для использования двоичного файла в этих командах.aapt d badging <path to apk> | grep 'package: name' | awk '{print $2}'
Вот мое решение для телефона без рутирования, для которого потребовались некоторые небольшие изменения, которые я запустил на Moto G 2-го поколения под управлением Android 5.0.2.
У меня не было двоичного файла aapt в / system / bin, поэтому я сначала попытался скачать с: https://android.izzysoft.de/downloads
но когда я попытался запустить его, я получил сообщение об ошибке:
ошибка: поддерживаются только независимые от позиции исполняемые файлы (PIE).
Тогда я искал версию PIE и нашел: https://github.com/Calsign/APDE/blob/master/APDE/src/main/assets/aapt-binaries/aapt-arm-pie
и это работало путем копирования двоичного файла в / data / local / tmp:
Итак, тогда:
получает список сторонних приложений (установленных вами приложений, а не системных приложений), а затем вы можете использовать пакет из команды выше в aapt для получения информации о пакете - пример:
Ниже приведен скрипт (для клиента Linux), чтобы получить только «общее» имя для сторонних приложений: ``
Если вы также хотите указать пакет и версию, измените последнюю, но одну строку из:
чтобы:
Пример вывода:
name='com.ultimarom.launchnavigation' versionName='1.28' 'Navigation' name='com.enhanced.skineditorstudio' versionName='3.3' 'Custom Skin Creator' name='com.mojang.minecraftpe' versionName='1.2.6.60' 'Minecraft' name='org.videolan.vlc' versionName='2.5.13' 'VLC' name='com.jrustonapps.myauroraforecast' versionName='1.7.2' 'My Aurora Forecast' name='de.j4velin.wifiAutoOff' versionName='1.7.6' 'WiFi Automatic' name='com.facebook.katana' versionName='153.0.0.54.88' 'Facebook' name='com.metago.astro' versionName='6.0.5' 'ASTRO File Manager' name='za.co.hardrive.smartinfo.parkrun' versionName='2.0.2' 'My 5krun' name='com.PYOPYO.StarTrackerVR' versionName='1.0.1' 'StarTracker VR' name='cz.aponia.bor3.offlinemaps' versionName='1.1.19' 'Offline Maps' name='com.groupon' versionName='16.11.63973' 'Groupon' name='com.ebay.mobile' versionName='5.16.1.2' 'eBay' name='com.runtastic.android' versionName='8.1.1' 'Runtastic' name='com.google.android.diskusage' versionName='3.8.3' 'DiskUsage'
Майк
источник
aapt
! Проверьте это, как только позволит время (сейчас я немного спешу). На данный момент проголосовал, может быть принят после проверки :)