Відповіді:
aapt dump badging <path-to-apk> | grep package:\ name
|
натисніть трубу , натисніть клавішу Enter, а потім просто шукайте вихідний потрібний параметр. Пам’ятайте лише, що aapt
вам слід на шляху
aapt
команда знаходиться під Android\SDK\build-tools\version
. командою на Windows може бути 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 відповіді ... але пов'язана з 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!
Якщо ви дивитесь на 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
Якщо вам потрібно це зробити програмно, це трохи більше, ніж просто отримання відповіді в ваш мозок. У мене є сценарій, за допомогою якого я підписую всі наші програми, але кожен використовує інший ключ. Ось два способи отримати лише ім'я пакета як вихід, щоб ви могли помістити його в змінну або зробити з нею все необхідне.
Приклад виводу: 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}'
Слабкою стороною цього методу є те, що він покладається на aapt для виведення package=
тільки в Android Manifest:
розділі виводу. Ми не беремо на себе зобов’язань розробників підтримувати цей формат.
Розгорніть файл apk apktool d
і прочитайте AndroidManifest.xml.
Це був би найкращий метод, але AndroidManifest.xml - це двійковий файл, і всі відповіді ТА, які я бачу для перетворення його в текст, не працюють. (Використання 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 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}'
Звичайно, ви можете використовувати будь-який інший інструмент для фільтрації.
Якщо у вас немає встановленого пакета SDK для Android, як, наприклад, у деяких тестових сценаріях, ви можете отримати ім'я пакета за допомогою наступного методу 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. 'рядки' і 'разархівувати' є стандартними для більшості 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 uninstall `./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 = %% s 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...
з меню "Створення" в Android Studio, воно відобразить назву пакета вгорі нового вікна.