Прочитайте название пакета Android APK - PullRequest
179 голосов
/ 09 июня 2011

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

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

Ответы [ 21 ]

2 голосов
/ 09 июня 2011

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

1 голос
/ 22 января 2017

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

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

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

1 голос
/ 17 июля 2015

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

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

Пояснение:

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

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

0 голосов
/ 14 мая 2018

Для 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 выбирает имя пакета и некоторые другие сведения, такие как версия и т. Д. Apk, и сохраняет его во временном хранилище.Файл .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 \» и запускает его.приложение.

0 голосов
/ 26 ноября 2015

Чтобы использовать это в пакетном сценарии, удобно, чтобы скрипт возвращал только имя пакета (например, для удаления приложения, когда у вас есть 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

доступно в gist

Таким образом, вы можете написать:

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

0 голосов
/ 21 февраля 2013

aapt list -a "path_to_apk"

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

aapt list -a "path_to_apk"> file.txt

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

0 голосов
/ 18 января 2019

Поскольку в документации 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.

0 голосов
/ 28 января 2015

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

0 голосов
/ 25 июня 2019

Если у вас не установлен 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...