Want to publish an Android app or stumbled across the term APK? Here's what the Android Application Package actually is, how it's used in app development, and what changed with the newer AAB format.
Quick Summary
An APK file (Android Application Package) is the file format used to package and distribute Android apps. Everything your app needs to run is packed into a single file: code, images, layouts, configuration. When you install an app from the Google Play Store, an APK is downloaded and installed on your device behind the scenes.
What is an APK?
APK stands for Android Application Package. It's the standard format for installing apps on Android devices. Every app you've ever used on an Android phone was installed as or through an APK.
Technically, an APK file is a ZIP archive with a specific structure. You could open an APK file with any ZIP tool and look at its contents. It's not a secret, just the format that Android understands.
Analogy: An APK is Like a Moving Box
Imagine you're moving. You pack everything you need in your new room into a box: books, decorations, tools, and instructions for where everything goes. That's exactly how an APK works.
The APK file is the moving box for your app. It contains everything Android needs to unpack and set up the app:
- The compiled code (your app's logic)
- All images, icons, and graphics
- The layouts (how the app looks on screen)
- A manifest file (the instructions for Android)
- Additional libraries and dependencies
Android takes the box, reads the instructions (the manifest), and immediately knows what the app needs: which permissions, which Android version, which screen sizes are supported.
What's Inside an APK File?
When you unpack an APK, you'll find a clearly defined structure:
classes.dex- Your compiled app code in Dalvik Executable format. This is the format that the Android Runtime (ART) understands and executes.res/- All resources: layouts, images, strings, colors. Everything that isn't code but is needed by the app.AndroidManifest.xml- Your app's configuration file. It contains the package name, required permissions, supported Android versions, and which Activities (screens) your app has.assets/- Files you want to include unchanged. Fonts, databases, JSON files.lib/- Native libraries for different processor architectures (ARM, x86). If your app uses C/C++ code or a framework like Flutter, the compiled native libraries end up here.META-INF/- Signature information. This is how Android ensures the APK hasn't been tampered with.
APK vs AAB: What's the Difference?
Since 2021, Google requires the AAB format (Android App Bundle) instead of a classic APK for new apps in the Play Store. So what changed?
An APK contains everything for all devices. Whether your user has a small phone with an ARM processor or a tablet with an x86 chip, the APK contains the code and resources for both. This makes the file larger than necessary.
An AAB, on the other hand, is a blueprint. You upload the AAB to Google, and the Play Store generates optimized APKs for each individual device. A user with a Pixel phone only gets the code and images their device actually needs. The result: smaller downloads, less storage usage.
| APK | AAB | |
|---|---|---|
| Contains | Everything for all devices | Blueprint for optimized APKs |
| File size | Larger | Smaller (after optimization) |
| Play Store | No longer for new apps | Required since 2021 |
| Sideloading | Yes | No |
| Signing | Developer signs | Google signs (Play App Signing) |
Important: AAB doesn't completely replace the APK. An APK is still what gets installed on the user's device. The Play Store just creates it automatically from the AAB. And for distribution outside the Play Store (sideloading, enterprise apps), the APK remains the format of choice.
How to Install an APK
Normally, you install apps through the Google Play Store, and it handles everything. But sometimes you want to install an APK directly, for example a beta version or an app that's not in the Store. This is called sideloading.
Here's how:
- Allow unknown sources - In your Android settings under "Security" or "Apps", you need to allow the respective app (e.g., your file manager or browser) to install from unknown sources.
- Download the APK file - From a trusted source, ideally directly from the developer.
- Open the file and install - Android checks the APK and shows you the required permissions. After confirmation, the app is installed.
A word of caution: Only install APKs from sources you trust. APK files from dubious download portals can contain malware. The Play Store checks apps automatically; with sideloading, you're responsible.
APK in App Development
When you develop an app (or have one developed), you'll encounter the APK in various phases:
Build process: Your development tool (Android Studio, Flutter CLI) compiles the source code, packages the resources, and produces an APK. A new APK is created with every build.
Debug vs Release: During development, you use a debug APK. It's not optimized and includes debugging tools. For publication, you create a release APK (or AAB) that's optimized and signed.
Signing: Before an APK can go to the Play Store, it must be digitally signed. The signature ensures the app genuinely comes from you and hasn't been modified. With AABs, Google handles the final signing through Play App Signing.
Publication: For the Play Store, you upload an AAB. For other distribution channels (your own website, enterprise distribution), you create a signed APK. The costs of app development also include this process of publication and store optimization. What the whole route to the store looks like is shown in publishing a Flutter app.
Optimizing APK Size
Your APK's size directly affects how many users install your app. Google found that the installation rate drops with every additional megabyte. Here's what you can do:
- Compress images - Use WebP instead of PNG for graphics. WebP offers the same quality at a significantly smaller file size.
- Remove unused resources -
shrinkResources truein your Gradle configuration automatically removes resources that aren't referenced in code. - Enable code shrinking - ProGuard or R8 remove unused code and optimize the rest. This can significantly reduce APK size.
- Split native libraries - If you use native libraries, only ship the architectures your target devices need. Or better yet: use the AAB format and let the Play Store handle it automatically.
- Offload large assets - If your app needs large files (games, offline maps), download them on first launch instead of packing them into the APK.
Conclusion
The APK is the package format for Android apps. Everything your app needs goes into a single installable file. Google introduced the AAB format as a more modern alternative for the Play Store, but at the end of the day, an APK is still what gets installed on every Android device.
In practice: if you're developing for the Play Store, you work with AABs. For testing, enterprise distribution, and sideloading, APKs are still what you'll use.
Frequently Asked Questions
Not inherently. APKs from the Google Play Store are automatically checked. However, APKs from unknown sources can contain malware. Only install APKs from trusted sources, ideally directly from the developer.
No. APKs are exclusively for Android. iPhones use a different format (IPA). If you need an app for both platforms, a cross-platform framework like Flutter can create apps for both systems from a single codebase.
Common causes: uncompressed images, unused resources, native libraries for all architectures. Enable code shrinking (R8/ProGuard), compress images to WebP, and use the AAB format for the Play Store so Google optimizes the APK per device.
An APK is a ready-to-install app file. An AAB is a package from which the Google Play Store generates optimized APKs for each device. Since 2021, Google requires AABs for new apps in the Play Store. In the end, the user always installs an APK.
Not necessarily, but it helps. When your developer sends you an APK for testing or you discuss app size and store publication, it's good to know what's behind it. Your app developer handles the details.



