Les Google Play Services et les limites du fichier DEX

Les Google Play Services et les limites du fichier DEX

La solution proposée par Google pour contourner les limites du nombre de méthode compilé dans le fichier .dex.

Fichier .dex

Le fichier dex est généré automatiquement lorsque l'on construit son application et quelle contient des librairies externes, toutes ses méthodes sont alors renseignées dans ce fichier. Seulement, ce fichier est limité par 16 bits, donc à 65536 valeurs.

Donc l'utilisation de grosse API, comme les Google Play Services, peut approcher notre application très vite à cette limite. Google propose une page pour passer ce problème pour une librairie autre que les Google Play Services : http://developer.android.com/tools/building/multidex.html?utm_campaign=dex-1214

 

Google Play Services

google play services

Mais pour les Google Play Services, il est maintenant possible de compiler seulement certaines parties de l'API.

Tout ceci se passe dans Gradle, pour compiler la libraire entière, cette ligne est utilisée :
compile 'com.google.android.gms:play-services:6.5.87'

Mais on peut choisir par exemple seulement la partie liée à Maps :
compile 'com.google.android.gms:play-services-maps:6.5.87'

Noté que l'appel à une librairie inclut la base commune qui pourrait être appelé comme ceci :
compile 'com.google.android.gms:play-services-base:6.5.87'
 

Une liste des différentes API est aussi disponible :

com.google.android.gms:play-services-base:6.5.87
com.google.android.gms:play-services-ads:6.5.87
com.google.android.gms:play-services-appindexing:6.5.87
com.google.android.gms:play-services-maps:6.5.87
com.google.android.gms:play-services-location:6.5.87
com.google.android.gms:play-services-fitness:6.5.87
com.google.android.gms:play-services-panorama:6.5.87
com.google.android.gms:play-services-drive:6.5.87
com.google.android.gms:play-services-games:6.5.87
com.google.android.gms:play-services-wallet:6.5.87
com.google.android.gms:play-services-identity:6.5.87
com.google.android.gms:play-services-cast:6.5.87
com.google.android.gms:play-services-plus:6.5.87
com.google.android.gms:play-services-appstate:6.5.87
com.google.android.gms:play-services-wearable:6.5.87
com.google.android.gms:play-services-all-wear:6.5.87

Le numéro 6.5.87, est la version courante lors du développement de l'application, donc elle est à personnaliser selon votre cas. A noté que l'intégration des Google Play Services est détaillé sur l'article https://developer.android.com/google/play-services/setup.html?utm_campaign=dex-1214 dont une partie intègre la possibilité d'intégrer seulement une partie des Google Play Services.