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 aaptmusi być na twojej drodze
aaptpolecenie 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
sunajpierw użyj polecenia.
pm list packages -f | grep term-to-search-for
Na podstawie odpowiedzi @hackbod ... ale dotyczy systemu Windows.
aaptpolecenie 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 dumppodrzędne aaptsł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: nameinformacjami, 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.yaumnazwa 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ę, packagea 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 awkokreś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 awkokreś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 di 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 dzamiast zwykłego unzippowinno 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 1uruchamia 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.