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:
- Wie erhalte ich den allgemeinen Namen einer App mit dem Paketnamen (wie com.android.blabla)? (Befehlszeile oder mitgelieferte App) funktioniert nicht über ADB (sondern verwendet eine App, mit der Sie manuell suchen müssen) und entspricht der Anforderung des OP
- Wie finde ich eine App basierend auf dem Paketnamen? Geht einfach zu einer URL-Suche bei Google Play zurück , die nicht immer passt (da nicht alle Apps dort verfügbar sind).
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 angezeigtadb shell pm list
: gibt nur die Paketnamen anaapt
würde in der Lage sein, den allgemeinen Namen zu erhalten, müsste aber zuerst die.apk
Datei 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 .apk
Datei 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 -3
jedoch 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)
quelle
Antworten:
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
aapt
in/system/bin
1 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
aapt
können Sie den Namen der App abrufenDie Ausgabe wird ungefähr so aussehen
label='Funny App'
, dass Sie dann leicht nach dem App-Namen suchen können, z(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
quelle
aapt
Binärdatei zu verwenden. Sie können die Binärdatei sehr gutaapt
in PC herunterladen und umbenennen , die Linux-kompatible ausführbare Berechtigung für die Binärdatei festlegen und sie auf pushen/data/local/tmp
und dann den absoluten Pfad verwenden/data/local/tmp/aapt
, um die Binärdatei in diesen Befehlen zu verwenden.aapt d badging <path to apk> | grep 'package: name' | awk '{print $2}'
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:
Also dann:
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:
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: ``
Wenn Sie auch Paket und Version möchten, ändern Sie die vorletzte Zeile von:
zu:
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
quelle
aapt
! Werde das überprüfen, sobald es die Zeit erlaubt (bin momentan etwas in Eile). Fürs Erste upvoted, nach Überprüfung vielleicht angenommen :)