Eu estou procurando uma possibilidade para recuperar tanto , os nomes dos pacotes e os nomes comuns de aplicativos instalados em um dispositivo Android via ADB - ou, pelo menos, para recuperar o nome comum, se o nome do pacote é conhecido. Uma pesquisa rápida em nosso site levantou duas questões relacionadas, mas elas não resolvem o meu problema:
- Como obtenho o nome comum de um aplicativo com o nome do pacote (como com.android.blabla)? (linha de comando ou aplicativo incluído) não funciona via ADB (mas usa um aplicativo que você precisa pesquisar manualmente), correspondendo à solicitação do OP
- Como encontrar um aplicativo com base no nome do pacote? apenas reverte para uma pesquisa de URL no Google Play , que nem sempre se encaixa (pois nem todos os aplicativos estão disponíveis lá).
Estou procurando uma maneira de recuperar as informações diretamente do dispositivo, se possível - não de maneira alguma (incluindo "pesquisas na web" ou "através de um aplicativo"), conforme essas duas perguntas.
Eu sei que existem várias ferramentas disponíveis para obter detalhes do pacote:
adb dumpsys package
: Enquanto isso lista todos os pacotes com vários detalhes, o "nome comum" não é mostradoadb shell pm list
: fornece apenas os nomes dos pacotesaapt
conseguiria obter o nome comum, mas exigiria primeiro extrair o.apk
arquivo do dispositivo, o que não é realmente conveniente (e obviamente será muito lento com muitos e / ou aplicativos grandes instalados)
Perdi algo? Sei que as informações devem estar no dispositivo (de que outra forma poderia mostrar os nomes dos aplicativos na GUI? Duvido que o Android analise o .apk
arquivo toda vez que a GUI precisar do "nome comum"). Então, existe uma maneira de contatá-lo, usando o ADB diretamente?
TL; DR
Histórico (se alguém estiver curioso): desejo obter rapidamente uma lista de aplicativos do usuário em qualquer um dos meus dispositivos, sem precisar reverter para acrobacias. Uma lista dos nomes de pacotes que posso recuperar usando adb shell pm list -3
, mas como esses são apenas nomes de pacotes, reconhecer aplicativos é uma suposição. Portanto, se houvesse algum comando do ADB para recuperar o nome comum de um determinado nome de pacote, eu poderia simplesmente usar um loop como for pkg in $(adb shell pm list -3); do echo "- $(adb <whatever_the_command_is> $pkg) ($pkg)"; done
- e obter uma lista de todos os aplicativos de usuário instalados em um "formato legível por humanos", juntamente com os nomes dos pacotes.
Casos de uso:
- Veja quais aplicativos "supérfluos" estão instalados (que eu poderia remover)
- Listas de verificação cruzada de vários dispositivos
- Documentação;)
- e provavelmente mais (mas os 3 acima são para o que eu preciso)
fonte
Respostas:
Esta não é uma resposta final, pois não é genérica (funciona apenas em alguns dispositivos) - mas é pelo menos um começo:
Como descobrimos , pelo menos as ROMs baseadas em CM com Kitkat (Android 4.4) e acima são fornecidas com o
aapt
binário disponível em/system/bin
1 . Se a sua ROM não possui, e instalar o binário no dispositivo é uma opção, você pode encontrá-lo aqui .Usando
aapt
, é possível recuperar o nome do aplicativo comA saída será algo como
label='Funny App'
, que você poderá analisar facilmente o nome do aplicativo, por exemplo(não é bom se o nome do aplicativo contiver aspas simples, mas isso pode ser considerado cosmético - ou você imagina como melhorar a parte sed para lidar com isso).
1: não encontramos isso nas ROMs de estoque Kitkat e acima que verificamos, portanto, podem ser apenas ROMs baseadas em CM
fonte
aapt
binário. Você pode muito bem fazer o download e renomear o binário paraaapt
no PC, definir a permissão executável compatível com Linux no binário e pressioná-la para/data/local/tmp
, em seguida, usar o caminho absoluto/data/local/tmp/aapt
para usar o binário nesses comandos.aapt d badging <path to apk> | grep 'package: name' | awk '{print $2}'
Aqui está a minha solução para um telefone não enraizado que precisava de algumas pequenas alterações acima das que eu executei em um Moto G 2ª geração com o Android 5.0.2.
Eu não tinha o aapt binário em / system / bin, então tentei fazer o download em: https://android.izzysoft.de/downloads
mas quando tentei executá-lo, recebi um erro dizendo:
erro: apenas executáveis independentes de posição (PIE) são suportados.
Então, procurei uma versão do PIE e encontrei: https://github.com/Calsign/APDE/blob/master/APDE/src/main/assets/aapt-binaries/aapt-arm-pie
e isso funcionou copiando o binário para / data / local / tmp:
Então:
obtém a lista de aplicativos de terceiros (aplicativos que você instalou, não aplicativos do sistema) e, em seguida, você pode usar o pacote do comando acima no aapt para obter informações sobre o pacote - exemplo:
Então, abaixo, está o script (para um cliente Linux) para obter apenas o nome "comum" para aplicativos de terceiros: ``
Se você também deseja pacote e versão, altere a última, mas uma linha, de:
para:
Exemplo de saída:
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
fonte
aapt
! Irá verificar isso assim que o tempo permitir (estou com pressa atualmente). Upvoted por agora, talvez aceite depois de ter verificado :)