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

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

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

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

package manifest $xxx.xxxxxxx.xxxxxxx |

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

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

Ответ 5

Следующий скрипт 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

Ответ 6

На основании ответа @hackbod... но связанного с окнами.

Команда

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

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

aapt dump badging <path-to-apk>

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

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

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

Ответ 7

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

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

Пример вывода: 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}'

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

Решение 3

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

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

Ответ 8

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

Ответ 9

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

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

Ответ 11

Простым решением было бы открыть Android Studio → Build → Analyze Apk..., просмотреть и выбрать APK, теперь вы можете найти имя пакета и почти все, что можете прочитать.

Ответ 12

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

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

Пояснение:

  • AAPT извлекает информацию APK
  • Grep "package", чтобы сохранить только строку о информации о пакете
  • Сделать sed заменить всю строку на имя пакета только с помощью следующего регулярного выражения: package: name='([a-z0-9.]*)'.* и заменить на первую (и только) соответствующую группу.

Ответ 13

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

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

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

Ответ 14

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

Ответ 15

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

  • Загрузите и установите Appium из веб-сайт Appium

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

Ответ 16

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

Здесь script я использую:

# 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`

Ответ 17

Для Windows у меня работает следующее:

:: // Initializing variables
SET adb="C:\Users\<User name>\AppData\Local\Android\Sdk\platform-tools\adb"
SET aapt="C:\Users\<User name>\AppData\Local\Android\Sdk\build-tools\22.0.0\aapt"
SET APKPath=C:\Users\<User name>\Desktop\APK\Instant_Instal\

CD %APKPath%

:: // Searching for apk file and storing it
FOR /F "delims=" %%f IN ('dir /S /B *.apk') DO SET "APKFullPath=%%f"
SET apk=%APKFullPath%

:: // Command adb install apk, run apk
%adb% install %apk%

:: // Fetching package name from apk
%aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt
FOR /F "tokens=2 delims='" %%s IN (temp.txt) DO SET pkgName=%%s
del temp.txt

:: // Launching apk
%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1

pause

Заметка

Отредактируйте пути adb, aapt, APKPath в соответствии с путями adb, aapt и местоположением apk в вашей системе.

За работой:

  • Здесь я добавил apk в папку на рабочем столе "\ Desktop\APK\Instant_Instal \".
  • Команда %adb% install %apk% устанавливает приложение, если устройство подключено.
  • Этот %aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt %aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt извлекает имя пакета и некоторые другие детали, такие как версия и т.д. Apk, и сохраняет их в файле temp.txt в том же месте, что и apk.
  • FOR/F "tokens = 2 delims = '" %% s IN (temp.txt) DO SET pkgName = %% s extracts the package name and assigns to переменной pkgName'
  • Наконец, %adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1 запускает приложение.

По сути, вышеприведенный код устанавливает apk из указанного местоположения на рабочем столе "Desktop\APK\Instant_Instal \" на устройство и запускает приложение.

Ответ 18

Так как мне не удалось найти имя пакета в файле .apk с редактором (как предложено выше), я проверил функции в приложении "ES Datei Explorer"/"ES File Explorer" (бесплатная версия), которые я уже установлен. В этом инструменте имя пакета отображается правильно.
Так как я думаю, что хороший телефонный проводник не должен отсутствовать на телефоне, я предлагаю использовать этот инструмент (если вы уже установили apk на мобильный и должны знать имя пакета).

Ответ 19

Поскольку в документации Android указано, что AAPT устарел, получение имени пакета с помощью команды AAPT2 в Linux выглядит следующим образом:

./aapt2 dump packagename <path_to_apk>

Поскольку я использую более старую версию сборки Gradle, мне пришлось загрузить более новую версию AAPT2, как указано здесь:

Загрузите AAPT2 из Google Maven

При использовании инструментов сборки в моем SDK - 25.0.3, 26.0.1 и 27.0.3 при выполнении команды aapt2 выдается ошибка: Невозможно открыть "имя_пакета": такого файла или каталога нет. Вот почему я пошел на более новые версии AAPT2.

Я использовал 3.3.0-5013011 для Linux.

Ответ 20

Если у вас не установлен Android SDK, как в некоторых тестовых сценариях, вы можете получить имя пакета, используя следующий метод bash:

getAppIdFromApk() {
  local apk_path="$1"

  # regular expression (required)
  local re="^\"L.*/MainActivity;"
  # sed substitute expression
  local se="s:^\"L\(.*\)/MainActivity;:\1:p"
  # tr expression
  local te=' / .';

  local app_id="$(unzip -p $apk_path classes.dex | strings | grep -Eo $re | sed -n -e $se | tr $te)"

  echo "$app_id"
}

Проверено на Mac. 'strings' и 'unzip' являются стандартными в большинстве Linux, поэтому должны работать и в Linux.

Ответ 21

aapt list -a "path_to_apk"

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

aapt list -a "path_to_apk" > file.txt

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