https://stackoverflow.com/a/18003462/348146
None of these suggestions worked for me, because Android was appending a sequence number to the package name to produce the final APK file name (this may vary with the version of Android OS). The following sequence of commands is what worked for me on a non-rooted device:
Determine the package name of the app, e.g.
com.example.someapp
. Skip this step if you already know the package name.
adb shell pm list packages
Look through the list of package names and try to find a match between the app in question and the package name. This is usually easy, but note that the package name can be completely unrelated to the app name. If you can't recognize the app from the list of package names, try finding the app in Google Play using a browser. The URL for an app in Google Play contains the package name.
Get the full path name of the APK file for the desired package.
adb shell pm path com.example.someapp
The output will look something like this:
package:/data/app/com.example.someapp-2.apk
Pull the APK file from the Android device to the development box.
adb pull /data/app/com.example.someapp-2.apk
There'll be a way to script it, but you likely don't want all APKs, as all the system apps would be included.
Simplest would be to pull the list with
adb shell pm list packages -f
and copy into a spreadsheet. Manipulate with text to columns, etc, then combineadb pull
with the file path to create a list of commands. Run them sequentially by copying back into the console window, or save as batch/shellscript and run.This will give you the opportunity to review the list; you'll likely find you're not interested in maybe two-thirds of what's there.