Search code examples
androidgoogle-maps-api-2

Google maps API v2 makes size of APK bigger than old version


there is an app use Google map API v2 After Build Signed Release APK, File length is Too Huge i build "HelloWord" Project to measure Length And Add google_play_services_lib to project File length Up To 2.2 Mb more than "HelloWord" APK

Also Repository And google play services from SKD Manager had Updated.

I use Android Studio IDE (Gradle) And Import all google-play-services. is it possible to import part of it ?


Solution

  • Assuming you're using AS and Gradle as build script / dependency management

    To import whole Google Play Services you're using dependency like this:

    compile 'com.google.android.gms:play-services:7.8.0'
    

    Which includes all the services resources and classes, it's huge list:

    +--- com.google.android.gms:play-services:7.8.0
    |    +--- com.google.android.gms:play-services-ads:7.8.0
    |    |    +--- com.google.android.gms:play-services-base:7.8.0
    |    |    |    \--- com.android.support:support-v4:22.2.0 -> 22.2.1
    |    |    |         \--- com.android.support:support-annotations:22.2.1
    |    |    +--- com.google.android.gms:play-services-analytics:7.8.0
    |    |    |    \--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    |    \--- com.google.android.gms:play-services-appindexing:7.8.0
    |    |         \--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    +--- com.google.android.gms:play-services-analytics:7.8.0 (*)
    |    +--- com.google.android.gms:play-services-appindexing:7.8.0 (*)
    |    +--- com.google.android.gms:play-services-appinvite:7.8.0
    |    |    \--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    +--- com.google.android.gms:play-services-appstate:7.8.0
    |    |    \--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    +--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    +--- com.google.android.gms:play-services-cast:7.8.0
    |    |    +--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    |    \--- com.android.support:mediarouter-v7:22.2.0
    |    |         \--- com.android.support:appcompat-v7:22.2.0
    |    |              \--- com.android.support:support-v4:22.2.0 -> 22.2.1 (*)
    |    +--- com.google.android.gms:play-services-drive:7.8.0
    |    |    \--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    +--- com.google.android.gms:play-services-fitness:7.8.0
    |    |    +--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    |    \--- com.google.android.gms:play-services-location:7.8.0
    |    |         +--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    |         \--- com.google.android.gms:play-services-maps:7.8.0
    |    |              \--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    +--- com.google.android.gms:play-services-games:7.8.0
    |    |    +--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    |    \--- com.google.android.gms:play-services-drive:7.8.0 (*)
    |    +--- com.google.android.gms:play-services-gcm:7.8.0
    |    |    \--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    +--- com.google.android.gms:play-services-identity:7.8.0
    |    |    \--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    +--- com.google.android.gms:play-services-location:7.8.0 (*)
    |    +--- com.google.android.gms:play-services-maps:7.8.0 (*)
    |    +--- com.google.android.gms:play-services-nearby:7.8.0
    |    |    \--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    +--- com.google.android.gms:play-services-panorama:7.8.0
    |    |    \--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    +--- com.google.android.gms:play-services-plus:7.8.0
    |    |    \--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    +--- com.google.android.gms:play-services-safetynet:7.8.0
    |    |    \--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    +--- com.google.android.gms:play-services-vision:7.8.0
    |    |    \--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    +--- com.google.android.gms:play-services-wallet:7.8.0
    |    |    +--- com.google.android.gms:play-services-base:7.8.0 (*)
    |    |    +--- com.google.android.gms:play-services-identity:7.8.0 (*)
    |    |    \--- com.google.android.gms:play-services-maps:7.8.0 (*)
    |    \--- com.google.android.gms:play-services-wearable:7.8.0
    |         \--- com.google.android.gms:play-services-base:7.8.0 (*)
    

    To downsize it, you have three options:

    • Add only part of it, you need, eg. com.google.android.gms:play-services-maps:7.8.0
    • Exclude parts you don't want

    like this:

    compile('com.google.android.gms:play-services:7.8.0') {
        exclude module: 'play-services-fitness'
        exclude module: 'play-services-games'
        exclude module: 'play-services-wallet'
        exclude module: 'play-services-safetynet'
        exclude module: 'play-services-appinvite'
        exclude module: 'play-services-wearable'
        exclude module: 'play-services-cast'
    }
    
    • Or use Proguard (minifyEnabled), which should trim from the resulting APK resources and classes, that are not used or reffered to