Ermitteln Sie den Paketnamen und den allgemeinen Namen der Apps über ADB

14

Ich suche nach einer Möglichkeit, sowohl die Paketnamen als auch die allgemeinen Namen von Apps, die auf einem Android-Gerät installiert sind, über ADB abzurufen - oder zumindest den allgemeinen Namen abzurufen, wenn der Paketname bekannt ist. Eine schnelle Suche auf unserer Website hat zwei verwandte Fragen aufgeworfen, die mein Problem jedoch nicht lösen:

Ich suche nach einer Möglichkeit, die Informationen , wenn möglich, direkt vom Gerät abzurufen - nicht "auf irgendeine Weise" (einschließlich "Web-Lookups" oder "über eine App"), wie diese beiden Fragen es haben.

Ich weiß, dass mehrere Tools verfügbar sind, um Paketdetails abzurufen:

  • adb dumpsys package: Während dies alle Pakete mit einer Reihe von Details auflistet, wird der "allgemeine Name" nicht angezeigt
  • adb shell pm list: gibt nur die Paketnamen an
  • aaptwürde in der Lage sein, den allgemeinen Namen zu erhalten, müsste aber zuerst die .apkDatei vom Gerät ziehen, was nicht wirklich praktisch ist (und offensichtlich mit vielen und / oder großen installierten Apps ziemlich langsam sein wird)

Habe ich etwas verpasst? Ich weiß, dass sich die Informationen auf dem Gerät befinden müssen (wie sonst könnten die App-Namen in der GUI angezeigt werden? Ich bezweifle, dass Android die .apkDatei jedes Mal analysiert, wenn die GUI den "allgemeinen Namen" benötigt.) Gibt es also eine Möglichkeit, mit ADB direkt darauf zuzugreifen?


TL; DR

Hintergrund (wenn jemand neugierig ist): Ich möchte in der Lage sein, schnell eine Liste von Benutzer-Apps von jedem meiner Geräte abzurufen, ohne auf Akrobatik zurückgreifen zu müssen. Eine Liste der Paketnamen, die ich mithilfe von abrufen kann. Da es sich adb shell pm list -3jedoch nur um Paketnamen handelt, ist das Erkennen von Apps eine Vermutung. Wenn es also einen ADB-Befehl zum Abrufen des allgemeinen Namens für einen bestimmten Paketnamen gäbe, könnte ich einfach eine Schleife wie for pkg in $(adb shell pm list -3); do echo "- $(adb <whatever_the_command_is> $pkg) ($pkg)"; done- verwenden und eine Liste aller installierten Benutzer-Apps in einem "lesbaren Format" zusammen mit ihren Paketnamen abrufen.

Anwendungsfälle:

  • Sehen Sie, welche "überflüssigen" Apps installiert sind (die ich entfernen könnte)
  • Gegenchecklisten von mehreren Geräten
  • Dokumentation;)
  • und wahrscheinlich mehr (aber die oben genannten 3 sind, wofür ich es brauche)
Izzy
quelle
Nur eine Idee (ich denke du hast es schon versucht?). Warum kompilierst du aapt nicht für Android und rennst stattdessen von der Shell aus? : D
user3344236
1
@ user3344236 Mir ist diese Möglichkeit bekannt. Es ist jedoch nicht immer eine Option, etwas auf dem betreffenden Gerät zu installieren, insbesondere keine selbst kompilierte Binärdatei (manchmal werden Geräte übergeben, die nicht als Root-Geräte fungieren und "forensikähnliche Bedingungen" - dh "do" - einhalten müssen das Gerät nicht verändern, einfach erkunden ").
Izzy
Die zweite Idee ist, sich selbst ein Tool zu schreiben, das über die AdB-Shell läuft ... ohne das modifizierte AdBD auf dem Gerät zu verwenden und ohne einige Dateien dort abzulegen. Ich denke, Sie werden einige Zeit
brauchen
@ user3344236 zu besorgniserregend, zumal ich kein Android-Entwickler bin. Ich verwende derzeit eine "webbasierte Lösung" (ähnlich der "Google Play-Suche"), da es hier (noch?) Keine native Lösung zu geben scheint.
Izzy
Hallo Izzy! Bedeutet dies in Anbetracht der Kommentare (oben), dass Sie eine Lösung für ein nicht gerootetes Gerät benötigen?
Firelord

Antworten:

8

Dies ist keine endgültige Antwort, da es nicht generisch ist (funktioniert nur auf einigen Geräten) - aber es ist zumindest ein Anfang:

Wie wir herausgefunden haben , werden mindestens CM-basierte ROMs mit Kitkat (Android 4.4) und höher mit der aaptin /system/bin1 verfügbaren Binärdatei ausgeliefert . Wenn Ihr ROM es nicht hat und die Installation der Binärdatei auf dem Gerät eine Option ist, finden Sie sie hier .

Mit aaptkönnen Sie den Namen der App abrufen

aapt d badging <path to apk> | grep "application: label" |awk '{print $2}'

Die Ausgabe wird ungefähr so ​​aussehen label='Funny App', dass Sie dann leicht nach dem App-Namen suchen können, z

aapt d badging <path to apk> | grep 'application: label' | sed -n \"s/.*label\='\([^']*\)'.*/\1/p\"

(Nicht gut, wenn der Name der App einfache Anführungszeichen enthält, dies kann jedoch als Kosmetik gelten - oder Sie überlegen, wie Sie den Sed-Teil verbessern können, um damit umzugehen).


1: Wir haben dies nicht in den von uns überprüften Kitkat-ROMs und höher gefunden, daher handelt es sich möglicherweise nur um CM-basierte ROMs

Izzy
quelle
3
Hinweis für Leser: Sie benötigen kein Root-Gerät, um diese aaptBinärdatei zu verwenden. Sie können die Binärdatei sehr gut aaptin PC herunterladen und umbenennen , die Linux-kompatible ausführbare Berechtigung für die Binärdatei festlegen und sie auf pushen /data/local/tmpund dann den absoluten Pfad verwenden /data/local/tmp/aapt, um die Binärdatei in diesen Befehlen zu verwenden.
Firelord
Für den Namen des Pakets (erster Teil der ursprünglichen Frage) würden Sie also tunaapt d badging <path to apk> | grep 'package: name' | awk '{print $2}'
gmoz22
7

Hier ist meine Lösung für ein nicht gerootetes Telefon, das einige geringfügige Änderungen von oben benötigte, die ich auf einem Moto G 2nd Gen unter Android 5.0.2 ausführte.

Ich hatte kein aapt-Binary in / system / bin, also habe ich zuerst versucht, es von folgender Adresse herunterzuladen: https://android.izzysoft.de/downloads

Aber als ich versuchte, es auszuführen, bekam ich eine Fehlermeldung:

Fehler: Es werden nur positionsunabhängige ausführbare Dateien (PIE) unterstützt.

Also suchte ich nach einer PIE-Version und fand: https://github.com/Calsign/APDE/blob/master/APDE/src/main/assets/aapt-binaries/aapt-arm-pie

und dies funktionierte durch Kopieren der Binärdatei nach / data / local / tmp:

adb push aapt-arm-pie /data/local/tmp
adb shell chmod 0755 /data/local/tmp/aapt-arm-pie

Also dann:

adb shell pm list packages -3 -f

Ruft eine Liste der Apps von Drittanbietern ab (Apps, die Sie installiert haben, keine System-Apps). Anschließend können Sie das Paket aus dem obigen Befehl in aapt verwenden, um Informationen zum Paket abzurufen. Beispiel:

adb shell /data/local/tmp/aapt-arm-pie d badging /data/app/com.facebook.katana-3/base.apk

Im Folgenden finden Sie ein Skript (für einen Linux-Client), mit dem Sie nur den "gebräuchlichen" Namen für Apps von Drittanbietern ermitteln können: ``

for pkg in `adb shell pm list packages -3 -f | awk -F= '{sub("package:","");print $1}'`
do
  adb shell /data/local/tmp/aapt-arm-pie d badging $pkg | awk -F: '
      $1 == "application-label" {print $2}'
done

Wenn Sie auch Paket und Version möchten, ändern Sie die vorletzte Zeile von:

$1 == "application-label" {print $2}'

zu:

$1 == "package" { split($2,space," ")
name=space[1];version=space[3]}
$1 == "application-label" {print name, version, $2 }'

Beispielausgabe:

name='com.ultimarom.launchnavigation' versionName='1.28' 'Navigation' name='com.enhanced.skineditorstudio' versionName='3.3' 'Custom Skin Creator' name='com.mojang.minecraftpe' versionName='1.2.6.60' 'Minecraft' name='org.videolan.vlc' versionName='2.5.13' 'VLC' name='com.jrustonapps.myauroraforecast' versionName='1.7.2' 'My Aurora Forecast' name='de.j4velin.wifiAutoOff' versionName='1.7.6' 'WiFi Automatic' name='com.facebook.katana' versionName='153.0.0.54.88' 'Facebook' name='com.metago.astro' versionName='6.0.5' 'ASTRO File Manager' name='za.co.hardrive.smartinfo.parkrun' versionName='2.0.2' 'My 5krun' name='com.PYOPYO.StarTrackerVR' versionName='1.0.1' 'StarTracker VR' name='cz.aponia.bor3.offlinemaps' versionName='1.1.19' 'Offline Maps' name='com.groupon' versionName='16.11.63973' 'Groupon' name='com.ebay.mobile' versionName='5.16.1.2' 'eBay' name='com.runtastic.android' versionName='8.1.1' 'Runtastic' name='com.google.android.diskusage' versionName='3.8.3' 'DiskUsage'

Mike

Mike Bounds
quelle
Vielen Dank und zweimal, Mike: einmal für das Shell-Skript und zweitens für den Zeiger auf die ARM-Variante von aapt! Werde das überprüfen, sobald es die Zeit erlaubt (bin momentan etwas in Eile). Fürs Erste upvoted, nach Überprüfung vielleicht angenommen :)
Izzy
PS: Meine Download-Seite verweist jetzt auch auf die von Ihnen angegebene Quelle - nur "eine Ebene höher", sodass die Leute zwischen ARM- und x86-Builds wählen können.
Izzy