Antworten:
aapt dump badging <path-to-apk> | grep package:\ name
|
Eingabetaste drücken und dann einfach die Ausgabe nach Ihrem gewünschten Parameter durchsuchen. Denken Sie daran, dass aapt
das auf Ihrem Weg sein muss
aapt
Befehl befindet sich unter Android\SDK\build-tools\version
. unter Windows Befehl kann aapt dump badging <path-to-apk> | findstr -i "package: name"
oderaapt dump badging <path-to-apk>
Sie können die apk dann auf Ihrem Telefon installieren
Wenn Sie eine Verbindung mit adb herstellen, können Sie die adb-Shell starten und pm list-Pakete -f ausführen, in denen der Paketname für jede installierte apk angezeigt wird.
Dies stammt aus dem Paketnamen für Android-Apps suchen, um mit Intent die Market-App über das Web zu starten
su
zuerst den Befehl.
pm list packages -f | grep term-to-search-for
Basierend auf @hackbod Antwort ... aber im Zusammenhang mit Windows.
aapt
Befehl befindet sich auf Android\SDK\build-tools\version
. Wenn Sie weitere Informationen zu appt command
(Android Asset Packaging Tool) benötigen, lesen Sie diese https://stackoverflow.com/a/28234956/812915
Mit dem dump
Unterbefehl von aapt
werden die Werte einzelner Elemente oder Teile eines Pakets angezeigt:
aapt dump badging <path-to-apk>
Wenn Sie nur die Zeile mit package: name
Informationen sehen möchten , verwenden Siefindstr
aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"
Hoffe es hilft anderen Windows-Benutzern!
Wenn Sie sich Google Play ansehen und den Paketnamen wissen möchten, können Sie sich die URL oder die Adressleiste ansehen. Sie erhalten den Paketnamen. Hier com.landshark.yaum
ist der Paketname
https://play.google.com/store/apps/details?id=com.landshark.yaum&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5sYW5kc2hhcmsueWF1bSJd
Wenn Sie die Datei AndroidManifest.xml mit MS Notepad öffnen, suchen Sie nach Phrasen package
und Sie werden Folgendes finden:
package manifest $xxx.xxxxxxx.xxxxxxx |
Dabei ist xxx.xxxxxxx.xxxxxx Ihr Paketname, der nur mit einem Leerzeichen nach jedem Zeichen geschrieben wird.
Dies ist nützlich, wenn Sie keine bestimmten Tools installiert haben.
Das folgende Bash-Skript zeigt den Paketnamen und den Namen der Hauptaktivität an:
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"
Führen Sie es so aus:
apk_package.sh /path/to/my.apk
Wenn Sie dies programmgesteuert tun müssen, ist es etwas komplizierter, als nur die Antwort in Ihr Gehirn zu bekommen. Ich habe ein Skript, mit dem ich alle unsere Apps signiere, aber jede verwendet einen anderen Schlüssel. Hier sind zwei Möglichkeiten, um nur den Paketnamen als Ausgabe abzurufen, damit Sie ihn in eine Variable einfügen oder alles tun können, was Sie benötigen.
Beispielausgabe: com.example.appname
(und nichts weiter)
aapt
- Android Asset Packaging Tool, Teil des Downloads der SDK-Tools
Mit awk
angeben '
als Feldtrennzeichen , die Suche nach einer Linie mit package: name=
, und nur das zweite „Feld“ in der Zeile drucken:
aapt dump badging /path/to/file.apk | awk -v FS="'" '/package: name=/{print $2}'
Eine Schwäche dieser Methode besteht darin, dass aapt die Paketinformationsfelder in derselben Reihenfolge ausgibt:
package: name='com.example.appname' versionCode='3461' versionName='2.2.4' platformBuildVersionName='4.2.2-1425461'
Wir haben keine Zusagen der Entwickler, dieses Format beizubehalten.
Mit awk
angeben "
als Feldtrennzeichen , die Suche nach einer Linie mit package=
, und nur das zweite „Feld“ in der Zeile drucken:
aapt list -a /path/to/file.apk | awk -v FS='"' '/package=/{print $2}'
Eine Schwäche dieser Methode besteht darin, dass sie package=
nur im Android Manifest:
Abschnitt der Ausgabe für die Ausgabe geeignet ist . Wir haben keine Zusagen der Entwickler, dieses Format beizubehalten.
Erweitern Sie die apk-Datei mit apktool d
und lesen Sie die Datei AndroidManifest.xml.
Dies wäre die beste Methode, aber die Datei AndroidManifest.xml ist eine Binärdatei, und alle SO-Antworten, die ich für die Konvertierung in Text sehe, funktionieren nicht. (Die Verwendung apktool d
anstelle einer einfachen unzip
soll dies für Sie tun, tut dies jedoch nicht.) Bitte kommentieren Sie, ob Sie eine Lösung für dieses Problem haben
Eine andere Lösung besteht darin, eine Aapt-Liste zu verwenden und sed zu verwenden, um Folgendes zu analysieren:
aapt list -a $PATH_TO_YOUR_APK | sed -n "/^Package Group[^s]/s/.*name=//p"
A:package="com.example.appname"
in der Android Manifest:
Sektion verwenden, wenn Sie dies tunaapt list -a
Es gibt einen sehr einfachen Weg, wenn Sie Ihre APK bereits auf Ihrem Smartphone haben. Verwenden Sie einfach eine dieser APPs:
Eine sehr einfache Methode ist die Verwendung von apkanalyzer.
apkanalyzer manifest application-id "${_path_to_apk}"
Ich denke, der beste und einfachste Weg, nur den Paketnamen unter Linux zu extrahieren, ist
aapt dump badging <APK_path> | grep package | sed -r "s/package: name='([a-z0-9.]*)'.*/\1/"
Erläuterung:
package: name='([a-z0-9.]*)'.*
und durch die erste (und einzige) übereinstimmende Gruppe ersetzen.Sie können AndroidManifest.xml aus der APK extrahieren, alle NULL-Bytes entfernen, alles bis nach der Zeichenfolge 'manifest' überspringen und dann ein langes Byte gefolgt vom Paketnamen (und dem, was danach kommt). Für die schwierige Aufgabe verwende ich das großartige GEMA- Tool, daher sieht der Befehl folgendermaßen aus:
7z e -so MyApp.apk AndroidManifest.xml | gema '\x00=' | gema -match 'manifest<U1><U>=@substring{0;@char-int{$1};$2}'
Natürlich können Sie jedes andere Tool verwenden, um die Filterung durchzuführen.
Wenn Sie das Android SDK nicht installiert haben, wie in einigen Testszenarien, können Sie den Paketnamen mithilfe der folgenden Bash-Methode abrufen:
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"
}
Auf einem Mac getestet. 'Strings' und 'Unzip' sind bei den meisten Linux-Geräten Standard und sollten daher auch unter Linux funktionieren.
Ich habe auch die Dekompilierungssache ausprobiert, sie funktioniert, aber kürzlich habe ich den einfachsten Weg gefunden:
Laden Sie Appium von der Appium-Website herunter und installieren Sie es
Öffnen Sie Appium-> Android und wählen Sie die Ziel-APK-Datei. Und dann bekommen Sie alles, was Sie wollen, die Paketinformationen, Aktivitätsinformationen.
Um dies in Batch-Skripten zu verwenden, ist es praktisch, wenn das Skript nur den Paketnamen zurückgibt (z. B. zum Deinstallieren einer App, wenn Sie über die APK verfügen).
Hier ist das Skript, das ich benutze:
# 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
Sie könnten also schreiben:
adb deinstallieren `./getPackageName.sh file.apk`
Für Windows hat folgendes bei mir funktioniert:
:: // 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
Hinweis
Bitte bearbeiten Sie die Pfade von adb, aapt, APKPath entsprechend den Pfaden von adb, aapt und dem apk-Speicherort in Ihrem System.
Arbeiten:
%adb% install %apk%
installiert die Anwendung, wenn das Gerät angeschlossen ist.%aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt
Paketname und einige andere Details wie die Version usw. der apk abgerufen und in einer temp.txt-Datei am selben Speicherort wie die der apk gespeichert.extracts the package name and assigns to
pkgName` Variable%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1
startet die App.Im Wesentlichen installiert der obige Code die apk von einem bestimmten Speicherort im Desktop "Desktop \ APK \ Instant_Instal \" auf dem Gerät und startet die Anwendung.
Da ich den Paketnamen in der APK-Datei mit dem Editor nicht finden konnte (wie oben vorgeschlagen), habe ich die Funktionen in der App "ES Datei Explorer" / "ES File Explorer" (kostenlose Version) überprüft, die ich hatte bereits installiert. In diesem Tool wird der Paketname korrekt angezeigt.
Da ich denke, dass ein guter Datei-Explorer auf einem Telefon nicht fehlen sollte, empfehle ich, dieses Tool zu verwenden (wenn Sie die apk bereits auf einem Mobiltelefon installiert haben und den Paketnamen kennen müssen).
Da in der Android-Dokumentation erwähnt wird, dass AAPT veraltet ist, lautet der Abruf des Paketnamens mithilfe des Befehls AAPT2 unter Linux wie folgt:
./aapt2 dump packagename <path_to_apk>
Da ich eine ältere Version von Gradle Build verwende, musste ich eine neuere Version von AAPT2 herunterladen, wie hier erwähnt:
Laden Sie AAPT2 von Google Maven herunter
Wenn Sie die Build-Tools in meinem SDK - 25.0.3, 26.0.1 und 27.0.3 verwenden, wird beim Ausführen des Befehls aapt2 ein Fehler angezeigt: 'Paketname' kann nicht geöffnet werden: Keine solche Datei oder kein solches Verzeichnis. Deshalb habe ich mich für die neueren Versionen von AAPT2 entschieden.
Ich habe 3.3.0-5013011 für Linux verwendet.
Sie können Analyze APK...
das Menü "Erstellen" in Android Studio verwenden. Der Paketname wird oben im neuen Fenster angezeigt.