What Is Zipalign In Android And How To Make Apps Zipaligned [Complete Guide]
If you’re a hardcore Android fan, chances are strong that you’d be eagerly trying out new themes, custom ROMs and all such mods for your device. One of the main confusion points is the terminology associated with these mods – something quite familiar to the developers, but not to much to the novice user. Two of the most commonly-occurring words in custom ROMs and themes are ‘deodexed’ and ‘zipalign’. A few days back, we covered ‘deodexed’ in detail. In this article, we’ll explore what zipalign means and how APKs can be zipaligned.
WHAT IS ZIPALIGN?
zipalign is an archive alignment tool introduced first time with 1.6 Android SDK (software development kit). It optimizes the way an Android application package (APK) is packaged. Doing so enables the Android operating system to interact with the application more efficiently, and hence has the potential to make the application and overall the whole system much faster. Execution time is minimized for zipaligned applications, resulting is lesser amount of RAM consumption when running the APK.
SO HOW DOES IT EXACTLY WORK?
In an Android operating environment, data files stored in each application package are accessed by multiple processes, for example, the installer will read the data manifest to determine the associated permissions; the system server can read these resources for multiple reasons, like displaying notifications; the Home application, for example, will read resources to get the application’s name and icon. Since Android is based on a a true multi-tasking operating infrastructure, these files are continually and repeatedly accessed. Finally, but not least, the application itself reads the manifest data.
As Android is Linux-based, memory-mapping plays a key role in efficient handling of processes. Essentially, the optimal alignment for the Android OS’ resource-handling code is 4-byte boundaries. What this means is that, if APKs are memory-mapped to 4-byte boundaries, and aligned accordingly, the OS will not need to ‘read through’ the whole application package to get to the desired data manifest. Every system process will know in advance where to look for it’s desired resources, and hence will execute much smoother and faster.
Summing it up, zipaligning an APK results in all uncompressed data within the package to be aligned on 4-byte boundaries, allowing all portions to be accessed directly with the memory-map. RAM consumption is lowered while execution because the querying code doesn’t have to read through the entire application package.
DISADVANTAGES OF UNALIGNED APKs
Quite understandably, situation would be reserved for unaligned application packages. Resource reading would be slow and memory usage would be on the higher end of the spectrum. It would also depend on how many unaligned applications are present. For example, if less number of applications with an unaligned home application, you’d see slower application launch times. This is the best case scenario. For a worst case scenario, having a number of unaligned applications will result in the system repeatedly starting and killing processes, struggling with lags and huge battery drain.
HOW DO YOU DO IT, THEN?
As mentioned earlier, the zipalign tool became a part of Android SDK from 1.6 onwards. It can be found under the ‘tools’ folder of the SDK. To use it, simply run the command:
zipalign [-f] [-v] <alignment> infile.apk outfile.apk
where infile.apk is the source file, and outfile.apk is the output file.
Furthermore, you can also verify the alignment of an APK file using the following command:
zipalign -c -v <alignment> existing.apk
where existing.apk can be any application package that you need to get verified. Also, the <alignment> tag in both the commands needs to be an integral value (otherwise the command will return invalid). This value, although can be any integer, MUST always be 4, which would provide 32-bit alignment. Any other value and it will effectively do nothing.
Finally, for the flags used in these commands,
- -f : overwrites existing outfile.zip
- -v : will give verbose output
- -c : will confirm the alignment of a given file
WORD OF CAUTION: zipalign operation must only be performed after you have signed the APK file with your private key. If zipaligned before signing, the signing procedure will disturb the alignment. Same holds true for any other alteration, addition or removal to the APK file. Any change after running zipalign will undo the alignment.
Disclaimer: This guide is meant for educational purposes only. This is in no way a substitute for the Android developer toolkit, nor intended to be used for development purposes. AddictiveTips does not provide any support relating to the material presented herein.
Mabe someone can hint me here, I have several Apps only one of them keeps giving me the not zip aligned done the standard Clean/rebuild still iit gives me the not zipaligned message, I do the cmd line zipalign then iit says iit was signed on debug mode … hit the wall here any suggestions???? as I said the funny thing is all of the other apps in my workspace take updates with no problem on the same Eclipse
When I double clock the zipalign.exe tool it opens then closes straight away… is this supposed to happen?
Yes, it is a command line tool meant to be called from cmd not from the GUI. 🙂
This is absolutely great and completely ESSENTIAL information for those of us hacking and flashing with very little computer background. (Yes I am at the top of the list!) Keep up the great work!
“Lloyd!!!! You cant tripple stamp a double stamp!!!! You cant tripple stamp a double stamp!!!! LLOYD!!!!!!
C’mon guys… What up with the english correction thing? This article is really outstanding. Helped me a lot! Thanks!
Actually, this is just a near-copy of the Android docs for zipalign, but with some grammatical and factual errors added in. :-/
yep! came here right after reading through the developer docs…
Correction: ‘RAM consumption is lowered while execution’ should be ‘RAM consumption is lowered while executing’
Helpful article!
Thanks for a great article.
Small comment: You’re confusing “its” with “it’s”.
“it’s desired resources” literally means “it is desired resources”.
Smaller comment: people in the US whose elementary-school years were the early- to mid-1970s were taught that apostrophe-s implies ownership. Even for pronouns. I.e. “the cat’s collar is lost” and “the cat lost it’s collar” were both considered valid constructs. In the late 70s this started changing – first on both the east and west coasts, later in states that were geographically distant (e.g. Kansas) or ideologically distant (e.g. Utah) from the hipper parts of the country – and by the late 1980s nobody was being taught to use it that way. Most people learned the rules that everyone around them learned, so it was rare to hear someone correcting or commenting on the outdated/incorrect usage, but not rare to still see that usage. Then in the early 90s the web connected everyone to everyone else, and the finger-pointing started.
You can still find old textbooks that include the old usage. And “So you Want To Learn English” books in other languages often turn out to be cribbed from old English textbooks, containing all of the old errors and adding more in the process of translation.