как узнать имя пакета apk
Получение списка приложений в Android
Android SDK предоставляет много средств для работы с системой. В том числе он позволяет получать список приложений, которые установлены на устройстве. Это может быть полезно, когда нужно получить сведения о сторонних приложениях (размер APK, путь до приложения, имя пакета и т.д.). Например, в наших приложениях получение списка, содержащего сторонние приложения, играет большую роль: в GreenBro с помощью этого списка выводятся сведения о приложениях, а также выполняются различные действия.
В Менеджере системных приложений и APK Extractor же список приложений необходим, чтобы удалять приложения и извлекать APK из приложений соответственно.
В этой статье мы рассмотрим, как можно получать список приложений, установленных на устройстве, а также как происходит установка приложений на устройство.
Класс PackageManager
PackageManager предоставляет API, который фактически управляет установкой, удалением и обновлением приложений. Когда мы устанавливаем файл APK, PackageManager анализирует этот APK и выводит результат.
Получить экземпляр класса PackageManager можно с помощью метода getPackageManager(). PackageManager предоставляет методы для запросов к установленным пакетам и соответствующим разрешениям.
Где хранятся файлы APK на Android?
В зависимости от типа данных, на Androiid файлы могут храниться в следующих местах:
Как PackageManager хранит информацию о приложении?
Менеджер пакетов хранит информацию о приложении в трёх файлах, расположенных в /data/system.
packages.xml
Этот XML-файл содержит список разрешений и пакеты\приложения. Он хранит две вещи: разрешения и пакет. Например:
Разрешения хранятся в теге
. Каждое разрешение имеет три атрибута: name, package и protection. Атрибут name это имя разрешения, которое мы используем в AndroidManifest.xml. Атрибут package указывает на пакет, которому принадлежит разрешение, в большинстве случаев это «android». Атрибут protection указывает на уровень безопасности.
содержит 10 атрибутов и несколько подтегов.
Атрибут | Описание |
name | Имя пакета |
codePath | Путь установки APK |
nativeLibraryPath | Нативная библиотека, расположенная по умолчанию в /data/data/ /lib |
flag | Хранит флаги ApplicationInfo |
ft | Время в шестнадцатtричном формате |
lt | Время установки в шестнадцатеричном формате |
ut | Время последнего обновления в шестнадцатеричном формате |
version | Код версии из AndroidManifest.xml |
sharedUserId | Идентификатор пользователя Linux, который будет использоваться совместно с другими приложениями. |
userId | Идентификатор пользователя Linux |
Подтеги же здесь следующие:
содержат разрешения, которые разработчик установил в AndroidManifest.xml
packages.list
Это простой текстовый файл, содержащий имя пакета, идентификатор пользователя, флаги и каталог data.
package-stopped.xml
Этот файл содержит список пакетов, которые были остановлены. Остановленные приложения не могут принимать широковещательные сообщения.
Получаем список приложений
Рассмотрим получение списка установленных приложений на примере GreenBro.
При запуске приложения запускается AsyncTask, внутри которого получаем экземпляр PackageManager и затем копируем в список List все данные об установленных приложениях.
Метод getInstalledApplications() принимает в качестве параметра флаг GET_META_DATA, который определяет, что нам нужные метаданные каждого пакета.
Результатом является список объектов ApplicationInfo для каждого установленного приложения. Класс ApplicationInfo предоставляет подробную информацию о пакете, собранную из тега в AndroidManifest.xml, нам оттуда нужны лишь самые важные данные.
Поэтому в цикле проверяем каждый объект из полученного списка и записывать данные в собственный класс AppInfo, чтобы затем использовать в основном потоке.
Здесь с помощью метода getPackageInfo() класса PackageManager мы получаем общую информацию о приложении по заданному имени пакета. После эта информация объединяется с информацией, полученной от getInstalledApplications() и сохраняется в объекте AppInfo со следующими полями:
Чтобы узнать название приложения, можно также воспользоваться PackageManager, как показано ниже.
Проверка же на то, является ли приложение системным, тоже достаточно проста и показана ниже.
В конце работы AsyncTask возвращает результат обратно в основной поток. Вот и всё, мы загрузили себе список всех установленных на устройстве приложений и можем продолжить с ним работу.
Получение списка приложений в Android : 4 комментария
Подскажите пожалуйста, в конструкции:
final PackageManager pm = context.getPackageManager();
List apps = new ArrayList();
List packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
Чем является «context»?
Это локальная переменная, Вы можете передавать контекст из активити или фрагмента
» List packages = pm.getInstalledApplications( »
а есть ли функция наподобие getRunnedApplications(), которая выдает список запущенных последних приложений?
как отличить приложение от сервиса? Проверка на системное приложение не помогает
Прочитайте имя пакета Android APK
Как я могу извлечь имя пакета APK?
19 ответов
вы можете установить apk на свой телефон, затем
connect используя adb, вы можете запустить adb shell и выполнить PM list packages-f, который показывает имя пакета для каждого установленного apk.
Если вы открываете AndroidManifest.xml с помощью MS Notepad, поиск фразы package и вы найдете следующее:
где XXX.ХХХХХХХ.xxxxxxx-это имя вашего пакета, просто написанное пробелом после каждого символа.
это полезный способ, когда у вас нет каких-либо конкретных установленных инструментов.
следующий скрипт bash отобразит имя пакета и основное имя действия:
apk_package.sh
на dump суб-команда aapt используется для отображения значений отдельных элементов или частей пакет:
если вы хотите увидеть только строку с package: name информация, использовать findstr
надеюсь, что это поможет другому пользователю windows!
Программный Ответа
Если вам нужно сделать это программно, это немного больше, чем просто ответ в ваш мозг. У меня есть скрипт, который я использую для подписи всех наших приложений, но каждый использует другой ключ. Вот 2 способа получить только имя пакета как выход, так что вы можете поместить его в переменную или сделать все, что вам нужно с ним.
пример: com.example.appname (и ничего еще)
требования
Решение 1
недостатком этого метода является то, что он полагается на aapt для вывода информационных полей пакета в том же порядок:
у нас нет обязательств от разработчиков поддерживать этот формат.
решение 2
слабость этого метода заключается в том, что он полагается на aapt для вывода package= только в Android Manifest: раздел вывода. У нас нет обязательств от разработчиков поддерживать это формат.
решение 3
разверните файл apk с помощью apktool d и прочитайте AndroidManifest.XML.
это был бы лучший метод, но AndroidManifest.xml-это двоичный файл, и все ответы SO, которые я вижу для преобразования его в текст, не работают. (Используя apktool d вместо простого unzip должен делать это для вас, но это не так.) прокомментируйте, пожалуйста, если у вас есть решение этой проблемы
Если вы просто хотите знать имя пакета, запустите adb logcat, запустите действие, которое вы хотите, вы получите подсказку об имени пакета.
другое решение-использовать список aapt и использовать sed для анализа этого:
Я думаю, что лучший и самый простой способ извлечь только имя пакета в Linux
вы можете извлечь AndroidManifest.xml из APK, удалите все нулевые байты, пропустите все до тех пор, пока после строки «манифест», а затем вы находитесь в байте длины, за которым следует имя пакета (и что происходит после него). Для трудной задачи я использую великое гема tool, поэтому команда выглядит так:
конечно, вы можете использовать любой другой инструмент для фильтрации.
есть очень простой способ, если у вас есть APK allready на вашем смартфоне. Просто используйте одно из этих приложений:
вы можете установить Package_Name_Viewer.apk на эмуляторе, а затем вы можете увидеть имя пакета всех установленных приложений на эмуляторе.
Я также пробовал де-компиляцию, она работает, но недавно я нашел самый простой способ:
Загрузите и установите Appium из веб-сайт Appium
чтобы использовать это в пакетных сценариях, удобно, чтобы скрипт возвращал только имя пакета (например, для удаления приложения, когда у вас есть APK).
вот скрипт, который я использую:
чтобы вы могли написать:
ADB uninstall`. /getPackageName.sh файл.apk’
для Windows следующее работало для меня:
Примечание
пожалуйста, отредактируйте пути АБР, aapt, APKPath по пути АБР, aapt, и место АПК в вашей системе.
работает:
по сути, приведенный выше код устанавливает apk из заданного местоположения на рабочем столе «Desktop\APK\Instant_Instal\» на устройство и запускает приложение.
Как узнать имя пакета apk
Краткое описание:
Инструментарий для работы с файлами apk и apks
Перевод приложений, в том числе и в автоматическом режиме (поддерживается более 100 языков).
Менеджер установленных приложений.
Настраиваемый текстовый редактор с подсветкой синтаксиса и подсказками, с возможностью просмотра исходного java-кода, с возможностью импорта собственных тем подсветки кода.
Удобный файловый менеджер с множеством функций.
Создание собственной подписи и подписание приложений.
Быстрое редактирование названия приложения, имени пакета (клонирование приложения), иконки приложения и прочего, без необходимости пересборки.
Root-права не нужны.
Приложение полностью бесплатно, поддерживается старыми устройствами начиная с Android 4.0 и не содержит никакой рекламы и аналитики.
Требуется Android: Android 4.0+
Русский интерфейс: Да
Версия: 2.4.0-200715
Apktool M_v2.4.0-200715(2020071501).apk ( 7,96 МБ )
Вопросы по редактированию содержимого apk-файлов обсуждаются не здесь, а в Клубе Mod APK
kormax2, у разработчика спроси, он здесь сидит. Я просто его творение сюда залил под его согласием, т.к проги здесь не было.
Пробовал создать собственную подпись, и собрать приложение, но оно не подписывается с пользовательской подписью. С дефолтной всё норм.
_Maximoff_, тип ключа: любой (пробовал все)
Вводимые данные: Алиас, Пароль хранилища, Пароль ключа, Срок действия и Имя
I: Using Apktool 2.4.0 on base.apk
I: Copying raw resources.
I: Baksmaling classes.dex.
I: Copying assets and libs.
I: Copying unknown files.
I: Copying original files.
I: Using Apktool 2.4.0 on split_config.armeabi_v7a.apk
I: Copying raw manifest.
I: Copying assets and libs.
I: Copying unknown files.
I: Copying original files.
I: Find odex file.
W: Deodex failed
W: Attempt to get length of null array
W: ru.maximoff.apktool.c.m.a(DecodeTask.java:187)
W: ru.maximoff.apktool.c.m.a(DecodeTask.java:185)
W: ru.maximoff.apktool.c.m.a(DecodeTask.java:134)
W: ru.maximoff.apktool.c.m.a(DecodeTask.java:122)
W: ru.maximoff.apktool.c.a.a(AbstractTask.java:38)
W: ru.maximoff.apktool.c.m.a(DecodeTask.java:76)
W: ru.maximoff.apktool.c.a.doInBackground(Unknown Source:2)
W: android.os.AsyncTask$3.call(AsyncTask.java:378)
W: java.util.concurrent.FutureTask.run(FutureTask.java:266)
W: android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)
W: java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
W: java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
W: java.lang.Thread.run(Thread.java:919)
I: Using Apktool 2.4.0 on split_config.en.apk
I: Copying raw resources.
I: Copying assets and libs.
I: Copying unknown files.
I: Copying original files.
I: Find odex file.
W: Deodex failed
W: Attempt to get length of null array
W: ru.maximoff.apktool.c.m.a(DecodeTask.java:187)
W: ru.maximoff.apktool.c.m.a(DecodeTask.java:185)
W: ru.maximoff.apktool.c.m.a(DecodeTask.java:134)
W: ru.maximoff.apktool.c.m.a(DecodeTask.java:122)
W: ru.maximoff.apktool.c.a.a(AbstractTask.java:38)
W: ru.maximoff.apktool.c.m.a(DecodeTask.java:76)
W: ru.maximoff.apktool.c.a.doInBackground(Unknown Source:2)
W: android.os.AsyncTask$3.call(AsyncTask.java:378)
W: java.util.concurrent.FutureTask.run(FutureTask.java:266)
W: android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)
W: java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
W: java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
W: java.lang.Thread.run(Thread.java:919)
I: Using Apktool 2.4.0 on split_config.xhdpi.apk
I: Copying raw resources.
I: Copying assets and libs.
I: Copying unknown files.
I: Copying original files.
I: Find odex file.
W: Deodex failed
W: Attempt to get length of null array
W: ru.maximoff.apktool.c.m.a(DecodeTask.java:187)
W: ru.maximoff.apktool.c.m.a(DecodeTask.java:185)
W: ru.maximoff.apktool.c.m.a(DecodeTask.java:134)
W: ru.maximoff.apktool.c.m.a(DecodeTask.java:122)
W: ru.maximoff.apktool.c.a.a(AbstractTask.java:38)
W: ru.maximoff.apktool.c.m.a(DecodeTask.java:76)
W: ru.maximoff.apktool.c.a.doInBackground(Unknown Source:2)
W: android.os.AsyncTask$3.call(AsyncTask.java:378)
W: java.util.concurrent.FutureTask.run(FutureTask.java:266)
W: android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)
W: java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
W: java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
W: java.lang.Thread.run(Thread.java:919)
Не работает поиск (вылет)
Тип: Beta
Версия: 2.4.0-201016-beta
Краткое описание: Beta
Что нового:
— исправление ошибок (в частности: исправлен запуск на Android версии ниже 4.4, исправлена ошибка быстрого редактирования, найденная gar_alex);
— оптимизация некоторых функций;
Прочитать имя пакета Android APK
Как я могу извлечь имя пакета APK?
Вы можете установить apk на свой телефон, затем
Если вы смотрите на игру Google и хотите узнать ее имя пакета, вы можете посмотреть адресную строку или адресную строку. Вы получите имя пакета. Здесь com.landshark.yaum – это имя пакета
где xxx.xxxxxxx.xxxxxxx – это ваше имя пакета, просто написанное пробелом после каждого символа.
Это полезно, когда у вас нет определенных установленных инструментов.
Следующий скрипт bash отобразит имя пакета и имя основного действия:
apk_package.sh
На основании ответа @hackbod… но связанного с окнами.
Подкоманда dump aapt используется для отображения значений отдельных элементов или частей пакета:
Надеемся, что это поможет другим пользователям Windows!
Программный ответ
Если вам нужно сделать это программно, это немного больше, чем просто получить ответ в ваш мозг. У меня есть script, который я использую для подписания всех наших приложений, но каждый использует другой ключ. Вот два способа получить только имя пакета как вывод, чтобы вы могли поместить его в переменную или сделать все, что вам нужно.
Пример вывода: com.example.appname (и ничего более)
Требования
aapt – Инструмент упаковки приложений для Android, часть Загрузка SDK файлов
Решение 1
Используя awk укажите ‘ в качестве разделителя полей, найдите строку с package: name= и напечатайте только 2-е поле в строке:
Слабостью этого метода является то, что он полагается на aapt для вывода полей информации пакета в том же порядке:
У нас нет обязательств от разработчиков поддерживать этот формат.
Решение 2
Используя awk укажите » в качестве разделителя полей, найдите строку с package= и напечатайте только 2-е “поле” в строке:
Слабостью этого метода является то, что он полагается на aapt для вывода package= только в разделе Android Manifest: вывода. У нас нет обязательств от разработчиков поддерживать этот формат.
Решение 3
Разверните файл apk с помощью apktool d и прочитайте файл AndroidManifest.xml.
Это был бы лучший способ, но AndroidManifest.xml – это двоичный файл, и все ответы SO, которые я вижу для преобразования его в текст, не работают. (Использование apktool d вместо простого unzip должно сделать это для вас, но это не так.) Прокомментируйте, если у вас есть решение этой проблемы
Если вы просто хотите узнать имя пакета, запустите adb logcat, запустите нужную операцию, вы получите подсказку о названии пакета.
Другим решением является использование списка aapt и использование sed для его анализа:
Там очень простой способ, если вы получили свой APK allready на своем смартфоне. Просто используйте один из этих APP:
Простым решением было бы открыть Android Studio → Build → Analyze Apk…, просмотреть и выбрать APK, теперь вы можете найти имя пакета и почти все, что можете прочитать.
Я думаю, что лучший и самый простой способ извлечь только имя пакета в Linux –
Вы можете извлечь AndroidManifest.xml из APK, удалить все NULL байты, пропустить все до тех пор, пока не появится строка “манифест”, а затем вы находитесь в байте длины, за которым следует имя пакета (и что происходит после него). Для трудной задачи я использую большой GEMA, поэтому команда выглядит следующим образом:
Конечно, вы можете использовать любой другой инструмент для фильтрации.
вы можете установить Package_Name_Viewer.apk на свой эмулятор, а затем вы можете увидеть имя пакета для всех установленных приложений на вашем эмуляторе.
Я также попробовал декомпилировать, он работает, но в последнее время я нашел самый простой способ:
Загрузите и установите Appium из веб-сайт Appium
Откройте приложение Appium- > Android, выберите целевой файл apk. И затем вы получите все, что хотите, информацию о пакете, информацию о деятельности.
Чтобы использовать это при пакетном сценарии, удобно, чтобы script возвращал только имя пакета (например, для удаления приложения, когда у вас есть APK).
Здесь script я использую:
Итак, вы можете написать:
adb uninstall `./getPackageName.sh file.apk`
Для Windows у меня работает следующее:
Заметка
Отредактируйте пути adb, aapt, APKPath в соответствии с путями adb, aapt и местоположением apk в вашей системе.
За работой:
По сути, вышеприведенный код устанавливает apk из указанного местоположения на рабочем столе “Desktop\APK\Instant_Instal \” на устройство и запускает приложение.
Поскольку в документации Android указано, что AAPT устарел, получение имени пакета с помощью команды AAPT2 в Linux выглядит следующим образом:
./aapt2 dump packagename
Поскольку я использую более старую версию сборки Gradle, мне пришлось загрузить более новую версию AAPT2, как указано здесь:
При использовании инструментов сборки в моем SDK – 25.0.3, 26.0.1 и 27.0.3 при выполнении команды aapt2 выдается ошибка: Невозможно открыть “имя_пакета”: такого файла или каталога нет. Вот почему я пошел на более новые версии AAPT2.
Я использовал 3.3.0-5013011 для Linux.
Если у вас не установлен Android SDK, как в некоторых тестовых сценариях, вы можете получить имя пакета, используя следующий метод bash:
Проверено на Mac. ‘strings’ и ‘unzip’ являются стандартными в большинстве Linux, поэтому должны работать и в Linux.
Как узнать имя пакета apk
Краткое описание:
Информация о APK файле
В информации указывается следующее:
1. Установщик APK файла
2. Полный путь к APK файлу
3. Название пакета
4. Полный размер APK файла
5. Иконка в Меню приложений
6. Размер иконки
7. Внутреннее имя пакета
8. Имя приложения
9. Версия приложения
10. Код версии
11. Время сборки
12. Минимальная версия Android SDK
13. Целевая версия Android SDK
14. Поддерживаемые библиотеки ABIs
15. Запрашиваемые разрешения
16. Флаги
17. Действующие активити
18. Сервисы
19. Контент провайдеры
20. Ресиверы передач
21. Подписи
22. Отпечаток сертификата
23. Дата начала действия сертификата
24. Дата окончания действия сертификата
Если во время просмотра информации о пакете поставить галочку возле пункта “Показать установленные”, то будет показана информация не только о выбранном APK, но и о версии APK этого же приложения, которое уже установлено в системе. При этом в информации об APK файле дополнительно будут указаны:
*Первая установка
*Последнее обновление
Чтобы продолжить установку, нажмите на кнопку «УСТАНОВИТЬ».
— Функция сохранения иконки приложения
— Функция переименования APK файла
В приложении также есть приятный бонус: функция пакетного переименования нескольких *.apk-файлов с помощью любого файлового менеджера (описание способа можно прочитать при включении данной функции в программном меню настроек).
ПРОГРАММА ЯВЛЯЕТСЯ ПРЕДВАРИТЕЛЬНЫМ ИНФОРМЕРОМ УСТАНАВЛИВАЕМЫХ ПАКЕТОВ ПРИЛОЖЕНИЙ И НЕ ЗАМЕНЯЕТ СИСТЕМНЫЙ УСТАНОВЩИК ПАКЕТОВ!
ROOT: Не нужен
Сервисы Google: Не требуются
Требуется Android: 2.3+
Русский интерфейс: Есть
Разработчик: syk