Obtenha o nome da versão do aplicativo usando adb

94

Existe uma maneira fácil de obter o nome da versão de um aplicativo em um dispositivo Android usando adb shell?

Encontrei o número da versão do aplicativo (não o nome da versão) em /data/system/packages.xml.

Seria bom se houvesse um arquivo que contivesse as informações do aplicativo.

frognose
fonte

Respostas:

184
adb shell dumpsys package my.package | grep versionName

conforme mencionado por @david e @Jeremy Fishman . Isso será muito mais rápido do que:

adb shell dumpsys | grep -A18 "Package \[my.package\]"
arbuz
fonte
1
Isso me mostra as informações do pacote, mas por algum motivo estão faltando as informações da versão de qualquer pacote que tentei procurar em meu tablet (android 2.2). No meu telefone, todas as informações da versão estão lá (android 2.3).
Frognosis
1
bem, se você insistir em fazê-lo no adb, você pode fazer: adb shell service call package 1 s16 "my.package" i32 0. o número da versão estará em algum lugar próximo a 0x1F e a string de nome após 0x20 (deve ser a 3ª linha)
arbuz
35
adb shell dumpsys package my.packagepode ser significativamente mais rápido
Jeremy Fishman
6
dumpsys package my.package | grep versionNamefunciona perfeito
david
3
@david, mas às vezes retorna vários resultados, por exemplo, por adb shell dumpsys package com.google.android.apps.photos | grep versionName causa da Hidden system packages:seção. Talvez um head -n1resolvesse isso ...
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
17

O pacote Dumpsys é seu amigo

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


Retornará

versionCode=X targetSdk=YY
versionName=Z.Z
MonoThreaded
fonte
8

Caso alguém precise de todas as versões de aplicativos para fins de comparação, aqui está o meu 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

Talvez seja útil para alguém, mas observe que eu uso versionName e ignoro versionCode, então use com cuidado.

EU VOU
fonte
5

Se você deseja obter todas as versões do pacote, tente este script 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 = ""; } }'
user541686
fonte
1
LEGAIS! Esta é uma maneira muito mais rápida do que a resposta da
@LLL
1

Se você não deseja instalar * .apk no dispositivo, mas precisa obter a versão do aplicativo, pode fazer da seguinte forma

$ANDROID_HOME/build-tools/28.0.3/aapt dump badging app/build/outputs/apk/app.app
SergeyUr
fonte