Szukam możliwości pobrania zarówno nazw pakietów, jak i nazw pospolitych aplikacji zainstalowanych na urządzeniu z systemem Android za pośrednictwem ADB - lub przynajmniej odzyskania nazwy pospolitej, jeśli nazwa pakietu jest znana. Szybkie wyszukiwanie w naszej witrynie przyniosło dwa powiązane pytania, ale nie rozwiązały mojego problemu:
- Jak uzyskać wspólną nazwę aplikacji o nazwie pakietu (np. Com.android.blabla)? (linia poleceń lub dołączona aplikacja) nie działa przez ADB (ale korzysta z aplikacji, z którą musisz ręcznie wyszukać), pasując do żądania OP
- Jak znaleźć aplikację na podstawie nazwy pakietu? po prostu wraca do wyszukiwania adresu URL w Google Play , co nie zawsze pasuje (ponieważ nie wszystkie aplikacje są tam dostępne).
Szukam sposobu, aby uzyskać informacje bezpośrednio z urządzenia, jeśli to możliwe - nie „w żaden sposób” (w tym „wyszukiwania w Internecie” lub „za pośrednictwem aplikacji”), ponieważ mają to dwa pytania.
Wiem, że dostępnych jest wiele narzędzi do uzyskania szczegółowych informacji o pakiecie:
adb dumpsys package
: Chociaż zawiera listę wszystkich pakietów z wieloma szczegółami, „nazwa zwyczajowa” nie jest wyświetlanaadb shell pm list
: podaje tylko nazwy pakietówaapt
byłby w stanie uzyskać wspólną nazwę, ale wymagałby najpierw pobrania.apk
pliku z urządzenia, co nie jest tak naprawdę wygodne (i oczywiście będzie dość powolne przy zainstalowanych wielu i / lub dużych aplikacjach)
Przegapiłem coś? Wiem, że informacje muszą znajdować się na urządzeniu (jak inaczej może wyświetlać nazwy aplikacji w GUI? Wątpię, czy Android analizuje .apk
plik za każdym razem, gdy GUI potrzebuje „nazwy pospolitej”). Czy jest więc sposób, aby go opanować, używając bezpośrednio ADB?
TL; DR
Tło (jeśli ktoś jest ciekawy): Chcę móc szybko uzyskać listę aplikacji użytkownika z dowolnego z moich urządzeń, bez konieczności powrotu do akrobatyki. Lista ich nazw pakietów, których mogę użyć adb shell pm list -3
, ale ponieważ są to tylko nazwy pakietów, rozpoznawanie aplikacji jest zgadywaniem. Więc jeśli byłoby jakieś polecenie ADB do odzyskania wspólnej nazwy dla danej nazwy pakietu, mógłbym po prostu użyć pętli podobnej do for pkg in $(adb shell pm list -3); do echo "- $(adb <whatever_the_command_is> $pkg) ($pkg)"; done
- i uzyskać listę wszystkich zainstalowanych aplikacji użytkownika w „czytelnym dla człowieka formacie” wraz z nazwami ich pakietów.
Przypadków użycia:
- Zobacz, jakie aplikacje „zbędne” są zainstalowane (które mogę usunąć)
- Listy kontrolne z wielu urządzeń
- Dokumentacja;)
- i prawdopodobnie więcej (ale do tego potrzebne są powyższe 3)
źródło
Odpowiedzi:
To nie jest ostateczna odpowiedź, ponieważ nie jest ogólna (działa tylko na niektórych urządzeniach) - ale to przynajmniej początek:
Jak się dowiedzieliśmy , przynajmniej ROM oparte na CM z Kitkat (Android 4.4) i wyżej są dostarczane z plikiem
aapt
binarnym dostępnym w/system/bin
1 . Jeśli twój ROM go nie ma, a instalacja pliku binarnego na urządzeniu jest opcją, możesz go znaleźć tutaj .Za pomocą
aapt
można pobrać nazwę aplikacjiWynik będzie podobny do tego
label='Funny App'
, który następnie możesz łatwo przeanalizować dla nazwy aplikacji, np(nie jest dobrze, jeśli nazwa aplikacji zawiera pojedyncze cudzysłowy, ale to może się liczyć jako kosmetyki - lub zastanawiasz się, jak poprawić część sed, aby sobie z tym poradzić).
1: nie znaleźliśmy tego w sprawdzonych ROM-ach Kitkat i powyżej, więc mogą to być tylko ROMy oparte na CM
źródło
aapt
binarnego, nie trzeba mieć zrootowanego urządzenia . Możesz bardzo dobrze pobrać i zmienić nazwę pliku binarnego naaapt
PC, ustawić uprawnienia do pliku wykonywalnego kompatybilnego z Linuksem na plik binarny i pchnąć go/data/local/tmp
, a następnie użyć bezwzględnej ścieżki/data/local/tmp/aapt
do użycia pliku binarnego w tych poleceniach.aapt d badging <path to apk> | grep 'package: name' | awk '{print $2}'
Oto moje rozwiązanie dla niezrootowanego telefonu, który wymagał drobnych zmian od powyższego, które uruchomiłem na Moto G 2. generacji z systemem Android 5.0.2.
Nie miałem aapt binary w / system / bin, więc najpierw spróbowałem pobrać z: https://android.izzysoft.de/downloads
ale kiedy próbowałem go uruchomić, wystąpił błąd:
błąd: obsługiwane są tylko pliki wykonywalne niezależne od pozycji (PIE).
Więc wtedy szukałem wersji SROKI i znalazłem: https://github.com/Calsign/APDE/blob/master/APDE/src/main/assets/aapt-binaries/aapt-arm-pie
i działało to poprzez skopiowanie pliku binarnego do / data / local / tmp:
Więc wtedy:
pobiera listę aplikacji innych firm (aplikacje, które zainstalowałeś, a nie aplikacje systemowe), a następnie możesz użyć pakietu z powyższego polecenia w aapt, aby uzyskać informacje o pakiecie - przykład:
Poniżej znajduje się skrypt (dla klienta Linux), aby uzyskać po prostu „powszechną” nazwę dla aplikacji innych firm: ``
Jeśli chcesz także pakiet i wersję, zmień ostatni wiersz z:
do:
Przykładowe dane wyjściowe:
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'
Mikrofon
źródło
aapt
! Sprawdzę to, gdy tylko pozwoli na to czas (obecnie trochę się spieszę). Na razie głosowany, być może zaakceptowany po weryfikacji :)