19 ответов:
вы можете установить apk на свой телефон, а затем
подключение с помощью adb, вы можете запустить adb shell и выполнить PM список пакетов-f, который показывает имя пакета для каждого установленного apk.
Это взято из найти имя пакета для Android-приложений, чтобы использовать намерение запустить приложение Market из интернета
Если вы откроете AndroidManifest.xml с помощью MS Notepad, поиск фразы
packageи вы найдете следующее:package manifest $xxx.xxxxxxx.xxxxxxx |где xxx. xxxxxxx.xxxxxxx-это имя вашего пакета, просто написанное пробелом после каждого символа.
это полезный способ, когда у вас нет каких-либо конкретных установленных инструментов.
Если вы смотрите на google play и хотите знать его имя пакета, то вы можете посмотреть на url или адресную строку. Вы получите имя пакета. Здесь
com.landshark.yaum- имя пакетаhttps://play.google.com/store/apps/details?id=com.landshark.yaum&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5sYW5kc2hhcmsueWF1bSJd
следующий сценарий bash отобразит имя пакета и имя основного действия:
apk_package.sh
package=$(aapt dump badging "$*" | awk '/package/{gsub("name=|'"'"'",""); print }') activity=$(aapt dump badging "$*" | awk '/activity/{gsub("name=|'"'"'",""); print }') echo echo " file : " echo "package : $package" echo "activity: $activity"запустите его так:
apk_package.sh /path/to/my.apk
на основе ответа @hackbod ... но связано с windows.
aaptкоманда находится наAndroid\SDK\build-tools\version. Если вам нужна дополнительная информация о том, чтоappt command(Android Asset Packaging Tool) прочитайте это https://stackoverflow.com/a/28234956/812915The
dumpсуб-командаaaptиспользуется для отображения значений отдельных элементов или частей пакет:
aapt dump badging <path-to-apk>если вы хотите видеть только строку с
package: nameинформация, используйтеfindstr
aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"надеюсь, что это поможет другим пользователям windows!
Программный Ответа
Если вам нужно сделать это программно, это немного больше, чем просто ответ в ваш мозг. У меня есть скрипт, который я использую для подписи всех наших приложений, но каждый использует другой ключ. Вот 2 способа получить только имя пакета как выход, так что вы можете поместить его в переменную или делать все, что вам нужно с ним.
пример:
com.example.appname(и ничего еще)требования
aapt- Android Asset Packaging Tool, часть SDK Tools downloadРешение 1
используя
awkуказать'в качестве разделителя полей найдите строку сpackage: name=, и вывести только 2-е "поле" в строке:aapt dump badging /path/to/file.apk | awk -v FS="'" '/package: name=/{print }'слабость этого метода заключается в том, что она опирается на 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 }'слабость этого метода заключается в том, что он полагается на aapt для вывода
package=только вAndroid Manifest:раздел вывода. У нас нет никаких обязательств от разработчиков, чтобы поддерживать это формат.решение 3
разверните файл apk с помощью
apktool dи читать AndroidManifest.XML.это был бы лучший метод, но AndroidManifest.xml-это двоичный файл, и все ответы SO, которые я вижу для преобразования его в текст, не работают. (Используя
apktool dвместо простогоunzipдолжен делать это для вас, но это не так.)прокомментируйте, пожалуйста, если у вас есть решение этой проблемы
Если вы просто хотите знать имя пакета, запустите adb logcat, запустите действие, которое вы хотите, вы получите подсказку по имени пакета.
другое решение-использовать список aapt и использовать sed для разбора этого:
aapt list -a $PATH_TO_YOUR_APK | sed -n "/^Package Group[^s]/s/.*name=//p"
Я думаю, что лучший и самый простой способ извлечь только имя пакета в Linux
aapt dump badging <APK_path> | grep package | sed -r "s/package: name='([a-z0-9.]*)'.*//"объяснение:
- aapt извлекает информацию APK
- Grep "пакет", чтобы сохранить только строку о пакете информации
- сделать sed заменить всю строку с именем пакета только с помощью следующего регулярного выражения:
package: name='([a-z0-9.]*)'.*и замена на первую (и только) соответствующую группу.
вы можете извлечь AndroidManifest.xml из APK, удалите все нулевые байты, пропустите все, пока после строки "манифест", а затем вы находитесь в байте длины, за которым следует имя пакета (и то, что происходит после него). Для трудной задачи я использую великий гема инструмент, поэтому команда выглядит так:
7z e -so MyApp.apk AndroidManifest.xml | gema '\x00=' | gema -match 'manifest<U1><U>=@substring{0;@char-int{};}'конечно, вы можете использовать любой другой инструмент для фильтрации.
есть очень простой способ, если вы получили свой APK уже на вашем смартфоне. Просто используйте одно из этих приложений:
простым решением было бы открыть Android Studio - > Build - > Analyze Apk... просмотрите и выберите APK теперь вы можете найти имя пакета и в значительной степени вы можете прочитать.
вы можете установить Package_Name_Viewer.apk на вашем эмуляторе, а затем вы можете увидеть имя пакета всех установленных приложений на вашем эмуляторе.
Я также пробовал де-компиляции вещь, она работает, но недавно я нашел самый простой способ:
скачать и установить 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 "" | 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 файл.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.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) установите pkgName=%%sимя_пакета`
- наконец-то
%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1запускает приложение.по существу приведенный выше код устанавливает apk из заданного места на рабочем столе "Desktop\APK\Instant_Instal\" на устройство и запускает приложение.
Как я не смог найти имя пакета в .apk-файл с редактором (как предлагалось выше), я проверил функции в приложении "ES Datei Explorer" / "ES File Explorer" (бесплатная версия), которые я уже установил. В этом средстве имя пакета отображается правильно.
Поскольку я думаю, что хороший проводник файлов не должен отсутствовать на телефоне, я предлагаю использовать этот инструмент (если вы уже установили apk на мобильном телефоне и должны знать имя пакета).
aapt list-a "path_to_apk"
Я рекомендую вам сохранить его .формате txt, поскольку это может быть очень долго. Итак:
aapt list-a" path_to_apk " > file.txt
см. файл.txt в текущей директории.
Comments