Прочитать имя пакета Android APK

Мне нужно получить имя пакета Android APK. Я попытался разархивировать APK и прочитать содержимое AndroidManifest.xml , но похоже, что это не текстовый файл.

Как я могу извлечь имя пакета APK?

 aapt dump badging <path-to-apk> | grep package:\ name 

Вы можете установить apk на свой телефон, затем

Подключитесь с помощью adb, вы можете запустить оболочку adb и выполнить пакеты списка pm -f, который показывает имя пакета для каждого установленного apk.

Это взято из поиска имени пакета для приложений Android для использования Intent для запуска приложения Market из Интернета

Если вы откроете AndroidManifest.xml с помощью MS Notepad, выполните поиск package фраз package и вы найдете следующее:

 package manifest $xxx.xxxxxxx.xxxxxxx | 

Где xxx.xxxxxxx.xxxxxxx – это ваше имя пакета, просто написанное пробелом после каждого символа.

Это полезно, когда у вас нет каких-либо определенных инструментов.

Следующий скрипт bash отобразит имя пакета и название основной деятельности:

apk_package.sh

 package=$(aapt dump badging "$*" | awk '/package/{gsub("name=|'"'"'",""); print $2}') activity=$(aapt dump badging "$*" | awk '/activity/{gsub("name=|'"'"'",""); print $2}') echo echo " file : $1" echo "package : $package" echo "activity: $activity" 

Запустите его так:

 apk_package.sh /path/to/my.apk 

Если вы смотрите на игру Google и хотите узнать ее имя пакета, вы можете посмотреть адресную строку или адресную строку. Вы получите имя пакета. Здесь com.landshark.yaum – это название пакета

  https://play.google.com/store/apps/details?id=com.landshark.yaum&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5sYW5kc2hhcmsueWF1bSJd 

Основано на ответе @hackbod … но связано с окнами.

aapt находится в Android\SDK\build-tools\version . Если вам нужна дополнительная информация о том, что такое appt command (Android Asset Packaging Tool), прочитайте это https://stackoverflow.com/a/28234956/812915

aapt используется для отображения значений отдельных элементов или частей пакета:

aapt dump badging <path-to-apk>

Если вы хотите увидеть только строку с package: name , используйте findstr

aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"

Надеюсь, что это поможет другим пользователям Windows!

Если вы просто хотите узнать имя пакета, запустите adb logcat, запустите нужную операцию, вы получите подсказку о названии пакета.

Другим решением является использование списка aapt и использование sed для синтаксического анализа:

aapt list -a $PATH_TO_YOUR_APK | sed -n "/^Package Group[^s]/s/.*name=//p"

Программный ответ

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

Пример вывода: com.example.appname (и ничего более)

Требования

aapt – Инструмент упаковки активов Android, входящий в состав инструментов SDK

Решение 1

Используя awk укажите ' как разделитель полей», найдите строку с package: name= и напечатайте только 2-е «поле» в строке:

 aapt dump badging /path/to/file.apk | awk -v FS="'" '/package: name=/{print $2}' 

Слабостью этого метода является то, что он полагается на aapt для вывода полей информации пакета в том же порядке:

 package: name='com.example.appname' versionCode='3461' versionName='2.2.4' platformBuildVersionName='4.2.2-1425461' 

У нас есть обязательства от разработчиков поддерживать этот формат.

Решение 2

Используя awk укажите " как разделитель полей», найдите строку с package= и напечатайте только 2-е «поле» в строке:

 aapt list -a /path/to/file.apk | awk -v FS='"' '/package=/{print $2}' 

Слабостью этого метода является то, что он использует apapt для вывода package= только в разделе Android Manifest: Man Android Manifest: выход. У нас есть обязательства от разработчиков поддерживать этот формат.

Решение 3

Разверните файл apk с помощью apktool d и прочитайте файл AndroidManifest.xml.

Это был бы лучший способ, но AndroidManifest.xml является двоичным файлом, и все ответы SO, которые я вижу для преобразования его в текст, не работают. (Использование apktool d вместо простого unzip должно сделать это для вас, но это не так.) Прокомментируйте, если у вас есть решение этой проблемы

Я думаю, что лучший и самый простой способ извлечь только имя пакета в Linux – это

 aapt dump badging <APK_path> | grep package | sed -r "s/package: name='([a-z0-9.]*)'.*/\1/" 

Объяснение:

  1. AAPT извлекает информацию APK
  2. Grep «package», чтобы сохранить только строку о информации пакета
  3. Создайте sed, заменив всю строку именем пакета только с помощью следующего regex: package: name='([a-z0-9.]*)'.* И заменив первую (и только) соответствующую группу.

Вы можете установить Package_Name_Viewer.apk на свой эмулятор, а затем вы можете увидеть имя пакета для всех установленных приложений на вашем эмуляторе.

Я также попробовал декомпиляцию, это работает, но в последнее время я нашел самый простой способ:

  1. Загрузите и установите Appium с сайта Appium

  2. Откройте приложение Appium-> Android, выберите целевой файл apk. И тогда вы получите все, что хотите, информацию о пакете, информацию о деятельности.

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

Вот сценарий, который я использую:

 # extract the android package id from a built apk file # usage ./getPackageName.sh <path-to-apk> line=`aapt dump badging "$1" | grep package:\ name` # above returns: # package: name='com.calvium.myapp' versionCode='1' versionName='1.0' if [[ $line =~ name=\'(.+)\'\ versionCode ]]; then echo ${BASH_REMATCH[1]} else echo "Failed to find package name" exit 1 fi 

Доступный по сути

Поэтому вы можете написать:

Adb uninstall `./getPackageName.sh file.apk`

Вы можете извлечь AndroidManifest.xml из APK, удалить все NULL байты, пропустить все до тех пор, пока строка «манифест» не появится, а затем вы находитесь в байте с последующим именем пакета (и что после него). Для трудной задачи я использую отличный инструмент GEMA , поэтому команда выглядит так:

 7z e -so MyApp.apk AndroidManifest.xml | gema '\x00=' | gema -match 'manifest<U1><U>=@substring{0;@char-int{$1};$2}' 

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

Это очень простой способ, если вы получили свой APK allready на своем смартфоне. Просто используйте один из этих APP:

Приложения для просмотра имен пакетов

Aapt list -a "path_to_apk"

Я рекомендую вам сохранить его в .txt, потому что он может быть очень длинным. Так:

Aapt list -a "path_to_apk"> file.txt

Затем посмотрите файл file.txt в текущем каталоге.