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.

Advertisement
  • Ronny

    Thanks for a great article.

    Small comment: You’re confusing “its” with “it’s”.
    “it’s desired resources” literally means “it is desired resources”.

  • Derek

    Correction: ‘RAM consumption is lowered while execution’ should be ‘RAM consumption is lowered while executing’

    Helpful article!

  • Tiago

    C’mon guys… What up with the english correction thing? This article is really outstanding. Helped me a lot! Thanks!

    • Jens Knutson

      Actually, this is just a near-copy of the Android docs for zipalign, but with some grammatical and factual errors added in. :-/

      • http://www.facebook.com/pradyumnacster Pradyumna Chatterjee

        yep! came here right after reading through the developer docs…

  • Greatwyrmm

    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!!!!!!

  • Le-roy

    When I double clock the zipalign.exe tool it opens then closes straight away… is this supposed to happen?

    • George

      Yes, it is a command line tool meant to be called from cmd not from the GUI. :)

  • becker666

    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