In android studio with build variant set to “debug” mode, I found two outputs of apk
What is the differences between those files?
The unaligned apk is just an intermediate apk. First, the unaligned apk is generated. Then, the unaligned apk gets aligned and produces the aligned apk which is the app-debug.apk. You can read more about it over here.
app-debug-unaligned.apk = Unaligned Signed APK
app-debug.apk = Aligned Signed APK (RAM optimized using zipalign)
To understand the difference we need to know the following points:
App signing process
- generate a private key (keytool)
- compile to get the unsigned APK -> unaligned unsigned APK
- Sign app in debug/release mode using private key (jarsigner) -> unaligned signed APK
- align the APK (zipalign) -> aligned signed APK
The entire signing process is explained here.
Why do we need the intermediate
app-debug-unaligned.apk at all?
as per the docs:
Caution: zipalign must only be performed after the .apk file has been
signed with your private key. If you perform zipalign before signing,
then the signing procedure will undo the alignment.
What is the advantage? zipalign?
The advantage is that aligned APKs are optimized for RAM usage so they will consume less RAM in the devices. From the docs:
zipalign is an archive alignment tool that provides important
optimization to Android application (.apk) files. ….The benefit is a
reduction in the amount of RAM consumed when running the application.