Ответы:
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 topkgName` переменная%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, оно будет отображать имя пакета в верхней части нового окна.