Get Application Name/ Label via ADB Shell or Terminal

AndroidShellLabelAdb

Android Problem Overview


I'm developing an application that uses ADB Shell to interface with android devices, and I need some way of printing out the application name or label of an application, given maybe their package name.

In short, I need a way of getting app names (i.e. "Angry Birds v1.0.0") for user installed applications through adb shell.

Any light on the matter? Any help is appreciated on this.

Android Solutions


Solution 1 - Android

adb shell pm list packages will give you a list of all installed package names.

You can then use dumpsys | grep -A18 "Package \[my.package\]" to grab the package information such as version identifiers etc

Solution 2 - Android

just enter the following command on command prompt after launching the app:

adb shell dumpsys window windows | find "mCurrentFocus"

if executing the command on linux terminal replace find by grep

Solution 3 - Android

If you know the app id of the package (like org.mozilla.firefox), it is easy. First to get the path of actual package file of the appId,

$  adb shell pm list packages -f com.google.android.apps.inbox
package:/data/app/com.google.android.apps.inbox-1/base.apk=com.google.android.apps.inbox

Now you can do some grep|sed magic to extract the path : /data/app/com.google.android.apps.inbox-1/base.apk

After that aapt tool comes in handy :

$  adb shell aapt dump badging /data/app/com.google.android.apps.inbox-1/base.apk
...
application-label:'Inbox'
application-label-hi:'Inbox'
application-label-ru:'Inbox'
...

Again some grep magic to get the Label.

Solution 4 - Android

A shell script to accomplish this:

#!/bin/bash

# Remove whitespace
function remWS {
    if [ -z "${1}" ]; then
        cat | tr -d '[:space:]'
    else
        echo "${1}" | tr -d '[:space:]'
    fi
}

for pkg in $(adb shell pm list packages -3 | cut -d':' -f2); do
    apk_loc="$(adb shell pm path $(remWS $pkg) | cut -d':' -f2 | remWS)"
    apk_name="$(adb shell aapt dump badging $apk_loc | pcregrep -o1 $'application-label:\'(.+)\'' | remWS)"
    apk_info="$(adb shell aapt dump badging $apk_loc | pcregrep -o1 '\b(package: .+)')"

    echo "$apk_name v$(echo $apk_info | pcregrep -io1 -e $'\\bversionName=\'(.+?)\'')"
done

Solution 5 - Android

Inorder to find an app's name (application label), you need to do the following:
(as shown in other answers)

  1. Find the APK path of the app whose name you want to find.
  2. Using aapt command, find the app label.

But devices don't ship with the aapt binary out-of-the-box.
So you will need to install it first. You can download it from here:
https://github.com/Calsign/APDE/tree/master/APDE/src/main/assets/aapt-binaries


Check this guide for complete steps:
How to find an app name using package name through ADB Android?
(Disclaimer: I am the author of that blog post)

Solution 6 - Android

This is what I just came up with. It gives a few errors but works well enough for my needs, matching package names to labels.

It pulls copies of all packages into subdirectories of $PWD, so keep that in mind if storage is a concern.

#!/bin/bash
TOOLS=~/Downloads/adt-bundle-linux-x86_64-20130717/sdk/build-tools/19.1.0
AAPT=$TOOLS/aapt
PMLIST=adb_shell_pm_list_packages_-f.txt
TEMP=$(echo $(adb shell mktemp -d -p /data/local/tmp) | sed 's/\r//')
mkdir -p packages
[ -f $PMLIST ] || eval $(echo $(basename $PMLIST) | tr '_' ' ') > $PMLIST
while read line; do
 package=${line##*:}
 apk=${package%%=*}
 name=${package#*=}
 copy=packages$apk
 mkdir -p $(dirname $copy)
 if [ ! -s $copy ]; then  # copy it because `adb pull` doesn't see /mnt/expand/
  adb shell cp -f $apk $TEMP/copy.apk
  adb pull $TEMP/copy.apk $copy
 fi
 label=$($AAPT dump badging $copy || echo ERROR in $copy >&2 | \
  sed -n 's/^application-label:\(.\)\(.*\)\1$/\2/p')
 echo $name:$label
done < <(sed 's/\r//' $PMLIST)
adb shell rm -rf $TEMP

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionhamsteyrView Question on Stackoverflow
Solution 1 - AndroidrcbevansView Answer on Stackoverflow
Solution 2 - Androidakshaykadam_100View Answer on Stackoverflow
Solution 3 - AndroidLove_for_CODEView Answer on Stackoverflow
Solution 4 - Androidsmac89View Answer on Stackoverflow
Solution 5 - AndroidGokul NCView Answer on Stackoverflow
Solution 6 - Androidjcomeau_ictxView Answer on Stackoverflow