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

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

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

19 ответов


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

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

connect используя adb, вы можете запустить adb shell и выполнить PM list packages-f, который показывает имя пакета для каждого установленного apk.

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


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

package manifest $xxx.xxxxxxx.xxxxxxx |

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

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


Если вы смотрите на google play и хотите узнать его имя пакета, вы можете посмотреть url или адресную строку. Вы получите имя пакета. Вот!--1--> - имя пакета

 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/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!


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

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

пример: com.example.appname (и ничего еще)

требования

aapt - Android инструмент упаковки активов, часть SDK Tools загрузить

Решение 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.]*)'.*//"

объяснение:

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

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

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

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


есть очень простой способ, если у вас есть APK allready на вашем смартфоне. Просто используйте одно из этих приложений:

Имя Пакета Просмотра Приложений


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


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


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

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

  2. открыть 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

доступно на gist

чтобы вы могли написать:

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

Примечание

пожалуйста, отредактируйте пути АБР, aapt, APKPath по пути АБР, aapt, и место АПК в вашей системе.

работает:

  • здесь я добавил apk в папку на рабочем столе " \Desktop\APK\Instant_Instal\".
  • команда %adb% install %apk% устанавливает приложение, если устройство подключено.
  • этот %aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt извлекает имя пакета и несколько других деталей, таких как версия и т. д. из apk и магазинов в temp.txt файл в том же месте, что и apk.
  • FOR / F "tokens=2 delims= '" %%s IN (temp.txt) установите pkgName=%%sextracts 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 на мобильном телефоне и должны знать имя пакета).


список aapt - "path_to_apk"

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

список aapt - "path_to_apk" > файл.txt

см. файл.txt в текущей директории.