Uzyskaj nazwę wersji aplikacji za pomocą adb


94

Czy istnieje łatwy sposób uzyskania nazwy wersji aplikacji na urządzeniu z systemem Android przy użyciu powłoki adb?

Znalazłem numer wersji aplikacji (nie nazwę wersji) w /data/system/packages.xml.

Byłoby miło, gdyby istniał plik zawierający informacje o aplikacji.

Odpowiedzi:


188
adb shell dumpsys package my.package | grep versionName

jak wspomnieli @david i @Jeremy Fishman . Będzie to znacznie szybsze niż:

adb shell dumpsys | grep -A18 "Package \[my.package\]"

1
To pokazuje mi informacje o pakiecie, ale z jakiegoś powodu brakuje informacji o wersji dla dowolnego pakietu, który próbowałem znaleźć na moim tablecie (Android 2.2). Na moim telefonie znajdują się wszystkie informacje o wersji (Android 2.3).
frognosis

1
cóż, jeśli nalegasz na zrobienie tego w adb, możesz zrobić: adb shell service call pakiet 1 s16 "my.package" i32 0. numer wersji będzie gdzieś blisko 0x1F, a ciąg nazwy po 0x20 (powinien być 3. linijką)
arbuz

35
adb shell dumpsys package my.packagemoże być znacznie szybszy
Jeremy Fishman

6
dumpsys package my.package | grep versionNamedziała idealnie
david

3
@david, ale czasami zwraca wiele wyników, np. z adb shell dumpsys package com.google.android.apps.photos | grep versionName powodu Hidden system packages:sekcji. Może head -n1rozwiązałoby to ...
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

18

Pakiet Dumpsys to Twój przyjaciel

~/# adb shell
shell@mo:/ dumpsys package tld.comp.app_name | grep version


Wróci

versionCode=X targetSdk=YY
versionName=Z.Z

8

Jeśli ktoś potrzebuje wszystkich wersji aplikacji do celów porównawczych, oto mój oneliner:

for p in `adb shell pm list package | awk -F"package:" '{print $2}'`; do echo -n "$p: "; adb shell dumpsys package $p | grep -i versionName | awk -F"=" '{print $2}'; done

Może to będzie pomocne dla kogoś, ale pamiętaj, że używam versionName i ignoruję versionCode, więc używaj ostrożnie.


5

Jeśli chcesz uzyskać wszystkie wersje pakietów, wypróbuj ten skrypt awk:

adb shell dumpsys package | awk '/^[ ]*Package \[.*\] (.*)/ { i = index($0, "[") + 1; pkg = substr($0, i, index($0, "]") - i); } /[ ]*versionName=/ { { print pkg "\t" substr($0, index($0, "=") + 1); pkg = ""; } }'

1
ŁADNY! Jest to znacznie szybsza droga niż ta w odpowiedzi @ LLL
MichaelR

1

Jeśli nie chcesz instalować * .apk na urządzeniu, ale potrzebujesz wersji aplikacji, możesz to zrobić w następujący sposób

$ANDROID_HOME/build-tools/28.0.3/aapt dump badging app/build/outputs/apk/app.app
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.