it-swarm.com.de

Lesen Sie den Paketnamen eines Android-APK

Ich muss den Paketnamen einer Android-APK abrufen. Ich habe versucht, die APK zu entpacken und den Inhalt von AndroidManifest.xml zu lesen, aber es scheint keine Textdatei zu sein.

Wie kann ich den Paketnamen des APK extrahieren?

170
Dagang
aapt dump badging <path-to-apk> | grep package:\ name
276
hackbod

Sie können die apk dann auf Ihrem Handy installieren

verbinden sie sich mit adb, können sie adb Shell starten und pm list packages -f ausführen, die den Paketnamen für jede installierte apk anzeigt.

Dies wurde entnommen aus Paketnamen suchen, damit Android-Apps die Market-App über das Web starten können

66
Danail

Wenn Sie die AndroidManifest.xml mit MS Notepad öffnen, suchen Sie nach dem Ausdruck package und Sie finden Folgendes:

package manifest $xxx.xxxxxxx.xxxxxxx |

dabei ist xxx.xxxxxxx.xxxxxxx der Name Ihres Pakets und wird nach jedem Zeichen mit einem Leerzeichen geschrieben.

Dies ist nützlich, wenn Sie keine speziellen Tools installiert haben.

13
Wojciech

Wenn Sie sich Google Play ansehen und den Paketnamen erfahren möchten, können Sie URL oder Adressleiste anzeigen. Sie erhalten den Paketnamen. Hier ist com.landshark.yaum der Paketname

 https://play.google.com/store/apps/details?id=com.landshark.yaum&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5sYW5kc2hhcmsueWF1bSJd
12
Shahzad Imam

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ühre es so aus:

apk_package.sh /path/to/my.apk
12
Brad Parks

Basierend auf @hackbod Antwort ... aber im Zusammenhang mit Fenstern.

Der Befehl aapt befindet sich in 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

Der dump-Unterbefehl von aapt wird verwendet, um die Werte einzelner Elemente oder Teile eines Pakets anzuzeigen: 

aapt dump badging <path-to-apk>

Wenn Sie nur die Zeile mit package: name info sehen möchten, verwenden Sie findstr

aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"

Hoffe es hilft anderen Windows-Benutzern!

8
equiman

Eine programmatische Antwort

Wenn Sie dies programmgesteuert machen müssen, ist es etwas komplizierter, als nur die Antwort in Ihr Gehirn zu bekommen. Ich habe ein Skript, das ich zum Signieren aller unserer Apps benutze, aber jede verwendet einen anderen Schlüssel. Es gibt zwei Möglichkeiten, nur den Paketnamen als Ausgabe zu erhalten, sodass Sie ihn in eine Variable einfügen oder mit dem tun können, was Sie benötigen.

Beispielausgabe: com.example.appname (und nichts mehr)

Bedarf

aapt - Android Asset Packaging Tool, Teil des SDK-Tools herunterladen

Lösung 1

Verwenden Sie awk, geben Sie ' als Feldtrennzeichen an, suchen Sie mit package: name= nach einer Zeile und drucken Sie nur das 2. "Feld" in der Zeile:

aapt dump badging /path/to/file.apk | awk -v FS="'" '/package: name=/{print $2}'

Ein Schwachpunkt dieser Methode besteht darin, dass aapt die Paketinformationsfelder in der gleichen Reihenfolge ausgibt:

package: name='com.example.appname' versionCode='3461' versionName='2.2.4' platformBuildVersionName='4.2.2-1425461'

Wir haben keine Verpflichtungen von den Entwicklern, dieses Format beizubehalten.

Lösung 2

Verwenden Sie awk, geben Sie " als Feldtrennzeichen an, suchen Sie mit package= nach einer Zeile und drucken Sie nur das 2. "Feld" in der Zeile:

aapt list -a /path/to/file.apk | awk -v FS='"' '/package=/{print $2}'

Ein Schwachpunkt dieser Methode besteht darin, dass aapt nur zur Ausgabe von package= im Abschnitt Android Manifest: der Ausgabe benötigt wird. Wir haben keine Verpflichtungen von den Entwicklern, dieses Format beizubehalten.

Lösung 3

Erweitern Sie die APK-Datei mit apktool d und lesen Sie die Datei AndroidManifest.xml.

Dies wäre die beste Methode, aber AndroidManifest.xml ist eine binäre Datei und alle SO - Antworten, die ich für die Konvertierung in Text sehe, funktionieren nicht. (Die Verwendung von apktool d anstelle einer einfachen unzip sollte dies für Sie tun, aber nicht.) Bitte kommentieren Sie, wenn Sie eine Lösung für dieses Problem haben

4
Bruno Bronosky

Wenn Sie nur den Paketnamen wissen möchten, führen Sie adb logcat aus und starten Sie die gewünschte Aktivität. Sie erhalten einen Hinweis zum Paketnamen.

2
sat

Eine andere Lösung besteht darin, aapt list und sed zu verwenden, um das zu analysieren:

aapt list -a $PATH_TO_YOUR_APK | sed -n "/^Package Group[^s]/s/.*name=//p"

2
JohnnyLambada

Es ist ein sehr einfacher Weg, wenn Sie Ihre APPS bereits auf Ihrem Smartphone haben. Verwenden Sie einfach eine dieser APPs:

Paketnamen-Viewer-Apps

1
Hexodus

Eine einfache Lösung wäre Open Android Studio -> Build -> Analyze Apk ... Durchsuchen und wählen Sie das APK.

1
Sai Kiran

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:

  1. AAPT extrahiert die APK-Informationen
  2. Grep "package", um nur die Zeile über die Paketinformationen zu behalten
  3. Lassen Sie sed die gesamte Zeile nur durch den Paketnamen ersetzen, indem Sie folgenden Regex verwenden: package: name='([a-z0-9.]*)'.* und Ersetzen durch die erste (und einzige) übereinstimmende Gruppe.
1
m0skit0

Sie können AndroidManifest.xml aus dem APK extrahieren, alle NULL-Bytes entfernen, alles bis nach der Zeichenfolge "Manifest" überspringen, und Sie befinden sich auf einem langen Byte, gefolgt von dem Paketnamen (und was danach kommt). Für die schwierige Aufgabe benutze ich das große GEMA - Tool, so dass der Befehl so aussieht:

7z e -so MyApp.apk AndroidManifest.xml | gema '\x00=' | gema -match 'manifest<U1><U>[email protected]{0;@char-int{$1};$2}'

Natürlich können Sie auch jedes andere Werkzeug zum Filtern verwenden.

1

Wenn Sie das SDK Android 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"
}

Getestet auf einem Mac. 'strings' und 'unzip' sind bei den meisten Linux-Versionen Standard, sollten also auch unter Linux funktionieren.

0
mmccabe

Da ich den Paketnamen nicht in der .apk-Datei mit Editor finden konnte (wie oben vorgeschlagen), habe ich die Funktionen in der App "ES Datei-Explorer"/"ES Datei-Explorer" (kostenlose Version), die ich überprüft habe, überprüft hatte schon installiert. In diesem Tool wird der Paketname richtig angezeigt.
Da ich denke, dass ein guter Datei-Explorer auf einem Telefon nicht fehlen sollte, empfehle ich die Verwendung dieses Tools (wenn Sie die apk bereits auf einem mobilen Gerät installiert haben und den Paketnamen kennen müssen).

0
FredyWenger

Um dies beim Batch-Scripting zu verwenden, ist es praktisch, wenn das Skript nur den Paketnamen zurückgibt (z. B. zum Deinstallieren einer App, wenn Sie den APK haben). 

Hier ist das Skript, das ich verwende:

# 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

verfügbar auf Gist

Sie könnten also schreiben:

adb deinstallieren `./getPackageName.sh file.apk`

0
Ben Clayton

Für Windows funktionierte folgendes für mich:

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

Bearbeiten Sie die Pfade von Adb, Aapt und APKPath entsprechend den Pfaden von Adb, Aapt und dem APK-Speicherort in Ihrem System.

Arbeiten:

  • Hier habe ich die apk in einem Ordner auf dem Desktop "\ Desktop\APK\Instant_Instal \" hinzugefügt. 
  • Der Befehl %adb% install %apk% installiert die Anwendung, wenn das Gerät angeschlossen ist.
  • Dieser %aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt ruft den Paketnamen und einige andere Details wie die Version usw. der apk ab und speichert sie in einer temp.txt-Datei am selben Ort wie die der apk.
  • FOR/F "tokens = 2 delims = '" %% s IN (temp.txt) SET SET pkgName = %% sextracts the package name and assigns topkgName` Variable
  • Schließlich startet %adb% Shell monkey -p %pkgName% -c Android.intent.category.LAUNCHER 1 die App.

Im Wesentlichen installiert der obige Code die apk von einem bestimmten Ort im Desktop "Desktop\APK\Instant_Instal \" auf dem Gerät und startet die Anwendung.

0
Kailas

Ich habe auch die Entkompilierungssache ausprobiert, es funktioniert, aber kürzlich fand ich den einfachsten Weg:

  1. Appium von der Appium-Website herunterladen und installieren

  2. Öffnen Sie die Appium-> Android-Einstellung und wählen Sie die Zieldatei (apk) aus. Und dann erhalten Sie alles, was Sie wollen, die Paketinformationen, Aktivitätsinformationen.

0
wenwen

Seit der Erwähnung in der Android-Dokumentation, dass AAPT veraltet wurde [], lautet das Abrufen des Paketnamens mit dem AAPT2-Befehl in 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:

AAPT2 von Google Maven herunterladen

Bei Verwendung der Build-Tools in my sdk - 25.0.3, 26.0.1 und 27.0.3 wird beim Ausführen des Befehls aapt2 ein Fehler angezeigt: 'packagename' kann nicht geöffnet werden: Keine solche Datei oder ein solches Verzeichnis. Deshalb habe ich mich für die neueren Versionen von AAPT2 entschieden.

Ich habe 3.3.0-5013011 für Linux verwendet.

0
user198530

sie können Package_Name_Viewer.apk auf Ihrem Emulator installieren. Als Nächstes können Sie den Paketnamen aller installierten Apps auf Ihrem Emulator sehen.

0
esideli