Extract an .APK from your Android using the CLI

Sometime we want to analyze certain app that reside in your phone (an Android one), the way to extract this .APK (via the CLI) is using this commands (first you need to connect your android via USB with developer mode activated):

adb shell pm list packages

This list all the packages names of your installed APKs

select your desire package name (in the example: com.sgt.myapp) and run:

adb shell pm path com.sgt.myapp

This command will return a path like: adb pull /data/app/com.sgt.myapp-1.apk. So with this information, run:

adb pull /data/app/com.sgt.myapp-1.apk

Now you have you APK in your computer.


Another useful command is:

adb shell dumpsys package com.sgt.myapp | grep versionName

that return the version name


Generate keystore for Android

To generate an .APK to upload to Google Play Console, you need to “sign” the binary. So, keytool command is the way:

keytool -genkey -v -keystore app_name.keystore -alias app_name -keyalg RSA -keysize 2048 -validity 10000
 Before generate the keystore, you need to answer this questions:
  • What is your first and last name?
  • What is the name of your organizational unit?
  • What is the name of your organization?
  • What is the name of your City or Locality?
  • What is the name of your State or Province?
  • What is the two-letter country code for this unit?

You need to give a password for this file. Finally, the app_name.keystore is generated.

Assuming we are building an ionic app, here are the commands

sudo ionic cordova build android --release --prod

to compile, and generate the non-signed .APK file: android-armv7-release-unsigned.apk

sudo chmod 777 ./platforms/android/build/outputs/apk
to give full permission to the destination folder (to write the new file)

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore app_name.keystore ./platforms/android/build/outputs/apk/android-armv7-release-unsigned.apk app_name
sign the .APK

/Users/miguel/Library/Android/sdk/build-tools/27.0.0/zipalign -vf 4 ./platforms/android/build/outputs/apk/android-armv7-release-unsigned.apk ./platforms/android/build/outputs/apk/app_name.apk
generate the new app_name.APK file signed. You need to have the Android SDK tools installed.

adb install -r ./platforms/android/build/outputs/apk/app_name.apk
send (copy) the binary (.APK file) to your phone (via USB)

adb logcat

Just in case you need to see the console.log directly from you terminal. It will show you everything happening in your phone.