Odpowiedzi:
aapt dump badging <path-to-apk> | grep package:\ name
|
, naciśnij klawisz enter, a następnie po prostu wyszukaj dane wyjściowe dla żądanego parametru. Pamiętaj tylko, że to aapt
musi być na twojej drodze
aapt
polecenie znajduje się pod Android\SDK\build-tools\version
. komendą w aapt dump badging <path-to-apk> | findstr -i "package: name"
aapt dump badging <path-to-apk>
Następnie możesz zainstalować apk na swoim telefonie
połącz używając adb, możesz uruchomić powłokę adb i wykonać pakiety listy pm -f, która pokazuje nazwę pakietu dla każdego zainstalowanego apka.
To pochodzi z Znajdź nazwę pakietu dla aplikacji na Androida, aby używać aplikacji Intent do uruchomienia aplikacji Market z sieci
su
najpierw użyj polecenia.
pm list packages -f | grep term-to-search-for
Na podstawie odpowiedzi @hackbod ... ale dotyczy systemu Windows.
aapt
polecenie znajduje się na Android\SDK\build-tools\version
. Jeśli potrzebujesz więcej informacji na temat tego, co to jest appt command
(Android Asset Packaging Tool), przeczytaj to https://stackoverflow.com/a/28234956/812915
Polecenie dump
podrzędne aapt
służy do wyświetlania wartości poszczególnych elementów lub części pakietu:
aapt dump badging <path-to-apk>
Jeśli chcesz zobaczyć tylko linię z package: name
informacjami, użyjfindstr
aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"
Mam nadzieję, że pomoże to innemu użytkownikowi systemu Windows!
Jeśli patrzysz na Google Play i chcesz poznać jego nazwę pakietu, możesz spojrzeć na adres URL lub pasek adresu. Otrzymasz nazwę pakietu. Oto com.landshark.yaum
nazwa pakietu
https://play.google.com/store/apps/details?id=com.landshark.yaum&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5sYW5kc2hhcmsueWF1bSJd
Jeśli otworzysz plik AndroidManifest.xml za pomocą MS Notepad, wyszukaj frazę, package
a znajdziesz następujące informacje:
package manifest $xxx.xxxxxxx.xxxxxxx |
gdzie xxx.xxxxxxx.xxxxxxx to nazwa pakietu, zapisana po prostu spacją po każdym znaku.
Jest to przydatny sposób, gdy nie masz zainstalowanych żadnych konkretnych narzędzi.
Poniższy skrypt bash wyświetli nazwę pakietu i główną nazwę działania:
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"
uruchom tak:
apk_package.sh /path/to/my.apk
Jeśli musisz to zrobić programowo, jest to trochę bardziej zaangażowane niż tylko uzyskanie odpowiedzi w twoim mózgu. Mam skrypt, którego używam do podpisywania wszystkich naszych aplikacji, ale każdy używa innego klucza. Oto 2 sposoby uzyskania samej nazwy pakietu jako wyniku, dzięki czemu można umieścić ją w zmiennej lub zrobić z nią, co trzeba.
Przykładowe dane wyjściowe: com.example.appname
(i nic więcej)
aapt
- Android Asset Packaging Tool, część do pobrania SDK Tools
Używając awk
określenia '
jako separatora pól, wyszukaj wiersz za pomocą package: name=
i wypisz tylko drugie „pole” w wierszu:
aapt dump badging /path/to/file.apk | awk -v FS="'" '/package: name=/{print $2}'
Słabością tej metody jest to, że polega ona na aapt, aby wyświetlała pola informacji o pakiecie w tej samej kolejności:
package: name='com.example.appname' versionCode='3461' versionName='2.2.4' platformBuildVersionName='4.2.2-1425461'
Nie mamy żadnych zobowiązań ze strony programistów do utrzymania tego formatu.
Używając awk
określenia "
jako separatora pól, wyszukaj wiersz za pomocą package=
i wypisz tylko drugie „pole” w wierszu:
aapt list -a /path/to/file.apk | awk -v FS='"' '/package=/{print $2}'
Słabością tej metody jest to, że polega ona na aapt na wyjściu package=
tylko w Android Manifest:
sekcji danych wyjściowych. Nie mamy żadnych zobowiązań ze strony programistów do utrzymania tego formatu.
Rozwiń plik apk za pomocą apktool d
i przeczytaj plik AndroidManifest.xml.
To byłaby najlepsza metoda, ale AndroidManifest.xml jest plikiem binarnym i wszystkie odpowiedzi SO, które widzę w celu konwersji na tekst, nie działają. (Używanie apktool d
zamiast zwykłego unzip
powinno robić to za Ciebie, ale tak nie jest.) Proszę o komentarz, jeśli masz rozwiązanie tego problemu
Innym rozwiązaniem jest użycie listy aapt i użycie sed do analizy:
aapt list -a $PATH_TO_YOUR_APK | sed -n "/^Package Group[^s]/s/.*name=//p"
A:package="com.example.appname"
w Android Manifest:
części, jeśli nieaapt list -a
Jest bardzo prosty sposób, jeśli masz już APK na swoim smartfonie. Wystarczy użyć jednej z tych aplikacji:
Bardzo prostą metodą jest użycie apkanalizatora.
apkanalyzer manifest application-id "${_path_to_apk}"
Myślę, że najlepszym i najprostszym sposobem na wyodrębnienie tylko nazwy pakietu w systemie Linux jest
aapt dump badging <APK_path> | grep package | sed -r "s/package: name='([a-z0-9.]*)'.*/\1/"
Wyjaśnienie:
package: name='([a-z0-9.]*)'.*
i zastąpi pierwszą (i jedyną) pasującą grupą.Możesz wyodrębnić plik AndroidManifest.xml z pliku APK, usunąć wszystkie bajty NULL, pomijać wszystko aż do napisu „manifest”, a następnie znajdujesz się w bajcie długości, po którym następuje nazwa pakietu (i co następuje po nim). Do trudnego zadania używam doskonałego narzędzia GEMA , więc polecenie wygląda następująco:
7z e -so MyApp.apk AndroidManifest.xml | gema '\x00=' | gema -match 'manifest<U1><U>=@substring{0;@char-int{$1};$2}'
Oczywiście do filtrowania można użyć dowolnego innego narzędzia.
Jeśli nie masz zainstalowanego zestawu Android SDK, jak w niektórych scenariuszach testowych, możesz uzyskać nazwę pakietu, używając następującej metody 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"
}
Testowane na komputerze Mac. „strings” i „unzip” są standardem w większości Linuksów, więc powinny działać również na Linuksie.
Próbowałem też rzeczy do dekompilacji, działa, ale ostatnio znalazłem najłatwiejszy sposób:
Pobierz i zainstaluj Appium ze strony Appium
Otwórz Appium-> ustawienia Androida, wybierz docelowy plik apk. A potem dostajesz wszystko, czego chcesz, informacje o pakiecie, informacje o aktywności.
Aby użyć tego w skryptach wsadowych, przydatne jest, aby skrypt zwrócił tylko nazwę pakietu (np. Do odinstalowania aplikacji, gdy masz APK).
Oto skrypt, którego używam:
# 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
Abyś mógł napisać:
adb odinstaluj `./getPackageName.sh file.apk`
W przypadku systemu Windows działało dla mnie:
:: // 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
Uwaga
Edytuj ścieżki adb, aapt, APKPath zgodnie ze ścieżkami adb, aapt i lokalizacją apk w twoim systemie.
Pracujący:
%adb% install %apk%
instaluje aplikację, jeśli urządzenie jest podłączone.%aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt
nazwa pakietu pobierające i kilka innych szczegółów, takich jak wersja itp z apk i zapisuje w pliku temp.txt w tym samym miejscu, co ich apk.extracts the package name and assigns to
pkgName`%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1
uruchamia aplikację.Zasadniczo powyższy kod instaluje apk z podanej lokalizacji na pulpicie „Desktop \ APK \ Instant_Instal \” na urządzenie i uruchamia aplikację.
Ponieważ nie byłem w stanie znaleźć nazwy pakietu w pliku apk za pomocą edytora (jak sugerowano powyżej), sprawdziłem funkcje w aplikacji „ES Datei Explorer” / „ES File Explorer” (wersja darmowa) już zainstalowałem. W tym narzędziu nazwa pakietu jest wyświetlana poprawnie.
Ponieważ uważam, że na telefonie nie powinno zabraknąć dobrego eksploratora plików, sugeruję skorzystanie z tego narzędzia (jeśli już zainstalowałeś apk na telefonie komórkowym i musisz znać nazwę pakietu).
Ponieważ w dokumentacji Androida wspomniano, że AAPT jest przestarzałe , uzyskanie nazwy pakietu za pomocą komendy AAPT2 w systemie Linux wygląda następująco:
./aapt2 dump packagename <path_to_apk>
Ponieważ używam starszej wersji kompilacji Gradle, musiałem pobrać nowszą wersję AAPT2, jak wspomniano tutaj:
Używając narzędzi kompilacji w moim pliku SDK - 25.0.3, 26.0.1 i 27.0.3, wykonanie polecenia aapt2 pokazuje błąd: Nie można otworzyć „nazwa-pakietu”: Brak takiego pliku lub katalogu. Właśnie dlatego wybrałem nowsze wersje AAPT2.
Użyłem 3.3.0-5013011 dla Linuksa.
Możesz użyć Analyze APK...
z menu kompilacji w Android Studio, wyświetli nazwę pakietu w górnej części nowego okna.