Generate Apk file from aab file (android app bundle) Generate Apk file from aab file (android app bundle) android android

Generate Apk file from aab file (android app bundle)


So far nobody has provided the solution to get the APK from an AAB.

This solution will generate a universal binary as an apk.

  1. Add --mode=universal to your bundletool command (if you need a signed app, use the --ks parameters as required).

    bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks    --mode=universal
  2. MAIN STEP: Change the output file name from .apks to .zip

  3. Unzip and explore

  4. The file universal.apk is your app

This universal binary will likely be quite big but is a great solution for sending to the QA department or distributing the App anywhere other than the Google Play store.


By default, the IDE does not use app bundles to deploy your app to alocal device for testing

Refer bundletool command

For Debug apk command,

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

For Release apk command,

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks--ks=/MyApp/keystore.jks--ks-pass=file:/MyApp/keystore.pwd--ks-key-alias=MyKeyAlias--key-pass=file:/MyApp/key.pwd

Edit:

I have been using following commands while testing my release build for aab(I hope it helps others too):

  1. Download bundletool jar file from Github Repository (Latest release > Assets > bundletool-all-version.jar file). Rename that file to bundletool.jar

  2. Generate your aab file from Android Studio eg: myapp-release.aab

  3. Run following command:

    java -jar "path/to/bundletool.jar" build-apks --bundle=myapp-release.aab --output=myapp.apks --ks="/path/to/myapp-release.keystore" --ks-pass=pass:myapp-keystore-pass --ks-key-alias=myapp-alias --key-pass=pass:myapp-alias-pass
  4. myapp.apks file will be generated

  5. Make sure your device is connected to your machine

  6. Now run following command to install it on your device:

    java -jar "path/to/bundletool.jar" install-apks --apks=myapp.apks

Edit 2:

If you need to extract a single .apk file from the .aab file, you can add a extra param --mode=universal to the bundletool command:

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks \    --mode=universal \    --ks=/MyApp/keystore.jks \    --ks-pass=file:/MyApp/keystore.pwd \    --ks-key-alias=MyKeyAlias \    --key-pass=file:/MyApp/key.pwd

and execute

unzip -p /MyApp/my_app.apks universal.apk > /MyApp/my_app.apk

this will generate a single a /MyApp/my_app.apk file that can be shared an installed by any device app installer


Ok here is the complete way I had to do:

  1. Download bundletool-all-0.10.3.jar from this link, download the latest version available

  2. Create an app bundle using android studio and locate its path:

    In my case its E:\Projects\Android\Temp\app\build\outputs\bundle\debug\app.aab

  3. Copy the bundletools jar to some location and get its path

In my case its E:\Temp\bundletool-all-0.6.0.jar

Use this command:

java -jar "BUNDLE_TOOL_JAR_PATH" build-apks --bundle="BUNDLE_PATH" --output=YOUR_OUTPUT_NAME.apks

In my case it will be

    java -jar "E:\Temp\bundletool-all-0.6.0.jar" build-apks \        --bundle="E:\Projects\Android\Temp\app\build\outputs\bundle\debug\app.aab" \        --output=out_bundle_archive_set.apks
  1. This will create a file out_bundle_archive_set.apks , rename it to .zip out_bundle_archive_set.zip , extract this file and done You will have multiple apk files

To install directly on external device use :

java -jar "E:\Temp\bundletool-all-0.6.0.jar" install-apks --apks=out_bundle_archive_set.apks

Check this blog post for more info . also check out official site