APK (Android application package) is the package file format for distribution and installation of Android mobile apps. It contains all of the application’s code, resources, assets, manifest file and other application’s files. APK is a type of archive file, specifically it is based on the JAR and ZIP file formats.
APK size really matters when going live to the Play store.
Step 1. ProGuard
ProGuard is the most prominent enhancer for Java bytecode. It optimizes bytecode and removes unused instructions. It renames the classes, fields, and methods using short meaningless names which makes code safer from reverse engineering.
This tool is used worldwide as shrinker, optimizer, and obfuscator.
So, what do these terms (shrinkage, optimization and ofuscation) means?
To enable proguard open build.gradle file in Android studio and add minifyEnabled true
and shrinkResources true
.
But remember shrinking process of code slows down the time of build. So you should only use it when you are going to release your app or if you are giving it for testing.
android { buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } ... }
minifyEnabled
is responsible for shrinking your code files (e.g. Java). It is the main feature of ProGuard, and helps to shrink your APK as well as making it difficult to reverse engineer.
shrinkResources
is used to remove unused resource files (such as images and other assets). For example, if you are compiling with an Android library, but you are not using some images in that Android library, they will not be included in the final build.
The getDefaultProguardFile('proguard-android.txt')
method obtains the default Proguard settings from the Android SDK tools/proguard folder. Android Studio adds the proguard-rules.pro file at the root of the module, which helps to add custom Proguard rules.
There are some problems with ProGuard stem from the inclusion of third-party libraries in your project. You can find solution in (android-proguard-snippets)[https://github.com/krschultz/android-proguard-snippets].
Step 2. Recommended Media formats
Some times applications are heavily reliable on images, audio or video, so another way you can reduce the APK size is by using certain media formats. It is highly recommended that you use the following media formats for images, audio and video:
Know more about Supported Media Formats.
Step 3. Optimize PNG images
A great way to improve the performance of your app is to optimize the size of your images. Smaller image sizes require less memory usage, disk space, load time and most important reduce APK size. PNG images can be reduced in file size without losing quality. To do this, use a tool such as OptiPNG or PNGCrush. Both are great for reducing PNG file size while still ensuring image quality. You can also use some online image optimization service TinyPng.
Step 4. WebP format
Another great way of reducing the storage requirements for your graphics is to convert them to a WebP format. It is suitable for replacing both JPG and PNG files and often produces much smaller images.
Being quite a new format though, it is only supported in Android 4.0+. Newer features (such as transparency and lossless compression) are supported since Android 4.2.1+ only.
Step 5. Reuse resources
Reusing stuff is probably one of the first important optimization you learn when starting developing on mobile. It will not even reduce your APK size but also save your time to develop the same thing again and again.
For example, you can include a separate resource for variations of an image, such as tinted, shaded, or rotated versions of the same image. But it is recommended, that you reuse the same set of resources and customize them as needed at runtime.
Android provides several utilities to change the color of an asset, either using the android:tint
and tintMode
attributes on Android 5.0 (API level 21) and higher. For lower versions of the platform, use the ColorFilter
class.
The following code snippet provides an example of turning an "expand" arrow into a "collapse" arrow icon by simply rotating the original image 180 degrees
<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/ic_arrow_expand" android:fromDegrees="180" android:pivotX="50%" android:pivotY="50%" android:toDegrees="180" />
Step 6. Google Play Services
In versions of Google Play services prior to 6.5, you had to compile the entire package of APIs into your app. In some cases, doing so made it more difficult to keep the number of methods in your app (including framework APIs, library methods, and your own code) under the 65,536 limit.
From version 6.5, you can instead selectively compile Google Play service APIs into your app. For example, to include only the Google Map and Android Wear APIs, replace the following line in your build.gradle file
compile 'com.google.android.gms:play-services:10.2.0'
with these lines
compile 'com.google.android.gms:play-services-maps:10.2.0' compile 'com.google.android.gms:play-services-wearable:10.2.0'
Here you can see explore more Api’s of Google Play Services.