Ответы:
aapt dump badging <path-to-apk> | grep package:\ name
|
, нажмите Enter, а затем просто искать выход для нужного параметра. Просто помните, что aapt
должно быть на вашем пути
aapt
Команда находится под Android\SDK\build-tools\version
. на окнах команда может быть aapt dump badging <path-to-apk> | findstr -i "package: name"
илиaapt dump badging <path-to-apk>
Вы можете установить APK на свой телефон, затем
подключившись с помощью adb, вы можете запустить оболочку adb и выполнить список пакетов pm -f, который показывает имя пакета для каждого установленного apk.
Это взято из Найти имя пакета для приложений Android, чтобы использовать намерение для запуска приложения Market из Интернета
su
сначала используйте команду.
pm list packages -f | grep term-to-search-for
Основано на ответе @hackbod ... но связано с окнами.
aapt
Команда расположена на Android\SDK\build-tools\version
. Если вам нужна дополнительная информация о том, что такое appt command
(Android Asset Packaging Tool), прочитайте эту https://stackoverflow.com/a/28234956/812915
dump
Суб-команда aapt
используется для отображения значений отдельных элементов или частей пакета:
aapt dump badging <path-to-apk>
Если вы хотите видеть только строку с package: name
информацией, используйтеfindstr
aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"
Надеюсь, что это поможет другим пользователям Windows!
Если вы смотрите на Google Play и хотите узнать название пакета, вы можете посмотреть URL или адресную строку. Вы получите название пакета. Вот com.landshark.yaum
название пакета
https://play.google.com/store/apps/details?id=com.landshark.yaum&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5sYW5kc2hhcmsueWF1bSJd
Если вы откроете AndroidManifest.xml с помощью MS Notepad, выполните поиск по фразе, 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
Если вам нужно сделать это программно, это немного сложнее, чем просто получить ответ в свой мозг. У меня есть скрипт, который я использую для подписи всех наших приложений, но у каждого из них свой ключ. Вот 2 способа получить только имя пакета в качестве вывода, чтобы вы могли поместить его в переменную или сделать с ним все, что вам нужно.
Пример вывода: com.example.appname
(и ничего более)
aapt
- Android Asset Packaging Tool, часть загрузки Инструментов SDK
Используя 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'
У нас нет обязательств от разработчиков поддерживать этот формат.
Используя awk
указать "
в качестве Разделителя полей, найдите строку с package=
и выведите только 2-е «поле» в строке:
aapt list -a /path/to/file.apk | awk -v FS='"' '/package=/{print $2}'
Недостатком этого метода является то, что он зависит от возможности вывода package=
только в Android Manifest:
разделе вывода. У нас нет обязательств от разработчиков поддерживать этот формат.
Разверните файл apk apktool d
и прочитайте файл AndroidManifest.xml.
Это был бы лучший метод, но AndroidManifest.xml - это двоичный файл, и все ответы SO, которые я вижу для преобразования его в текст, не работают. (Использование apktool d
вместо простого unzip
должно сделать это для вас, но это не так.) Пожалуйста, прокомментируйте, если у вас есть решение этой проблемы
Другое решение состоит в том, чтобы использовать список aapt и использовать sed для анализа этого:
aapt list -a $PATH_TO_YOUR_APK | sed -n "/^Package Group[^s]/s/.*name=//p"
A:package="com.example.appname"
в Android Manifest:
разделе, если вы это делаетеaapt list -a
Есть очень простой способ, если вы уже загрузили APK на свой смартфон. Просто используйте одно из этих приложений:
Очень простой способ - использовать apkanalyzer.
apkanalyzer manifest application-id "${_path_to_apk}"
Я думаю, что лучший и самый простой способ извлечь только имя пакета в Linux
aapt dump badging <APK_path> | grep package | sed -r "s/package: name='([a-z0-9.]*)'.*/\1/"
Объяснение:
package: name='([a-z0-9.]*)'.*
и заменив первую (и единственную) соответствующую группу.Вы можете извлечь 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}'
Конечно, вы можете использовать любой другой инструмент для фильтрации.
Если у вас не установлен 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.
Я также попробовал декомпиляцию, она работает, но недавно я нашел самый простой способ:
Загрузите и установите Appium с сайта Appium
Откройте 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 удалить `./getPackageName.sh file.apk`
Для 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 в вашей системе.
Работает:
%adb% install %apk%
устанавливает приложение, если устройство подключено.%aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt
выбирает имя пакета и некоторые другие детали, такие как версия и т. Д. Apk, и сохраняет его в файле temp.txt в том же месте, что и файл apk.extracts the package name and assigns to
pkgName` переменная%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1
запускает приложение.По сути, вышеприведенный код устанавливает apk из указанного местоположения на рабочем столе «Desktop \ APK \ Instant_Instal \» на устройство и запускает приложение.
Поскольку я не смог найти имя пакета в файле .apk с редактором (как предложено выше), я проверил функции в приложении «ES Datei Explorer» / «ES File Explorer» (бесплатная версия), которые я уже установлен. В этом инструменте имя пакета отображается правильно.
Так как я думаю, что хороший телефонный проводник не должен отсутствовать на телефоне, я предлагаю использовать этот инструмент (если вы уже установили apk на мобильный и должны знать имя пакета).
Поскольку в документации 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.
Вы можете использовать Analyze APK...
из меню Build в Android Studio, оно будет отображать имя пакета в верхней части нового окна.