Sunday, December 21, 2014

Google Play services and DEX method limits




A constraint for some Android apps is the total number of methods
that the underlying compiled .dex file can support. It’s limited by 16
bits, or 65,536 values.
When you include third-party libraries in your application, you will have all
of their methods in your .dex file. Larger APIs, such as those included
in Google Play services, will then begin eating into the limit very
quickly.
You can learn more about this, and ways that you can work around it with the Android Studio 1.0 build system here.
Additionally, with Google Play services version 6.5 or later, it is
possible for you to include Google Play services in your application
using a number of smaller client libraries, so that only Google Play
services APIs you use will get compiled into your .dex file, and
therefore their methods won't count towards your method limit.
Prior to version 6.5, you would typically have a line like this in your build.gradle file:
compile 'com.google.android.gms:play-services:6.5.87'
Starting with version 6.5, of Google Play services, you’ll be able to
pick from a number of individual APIs, and you can see which ones have
their own include files in the documentation. For example, if all you
want to use is Maps, you would instead have:
compile 'com.google.android.gms:play-services-maps:6.5.87'
Note that this will transitively include the ‘base’ libraries, which
are used across all APIs. You can include them independently with the
following line:
compile 'com.google.android.gms:play-services-base:6.5.87'
The complete list of API names is below. More details can be found on the Android Developer site.

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



Note: At the time of writing, the correct version to use is
6.5.87. As this is a very granular number, it will get updated quite
quickly, so be sure the check the latest version when you are coding.
Often people will use a ‘+’ to denote versions, such as 6.5.+ to use the
latest 6.5 build. However, it’s typically discouraged to use a ‘+’ as
it can lead to inconsistencies.
Also, there are some changes to the names of the libraries that will
impact you if you build applications for Android Wear. Previously you
may have used play-services-wearable to include the entire Google Play services library for your wearable, and if you want to continue doing so, you should now use play-services-all-wear instead. You can continue to use play-services-wearable which will instead give you just the Wearable Data Layer API (see here).
Should you do this, and you want to continue working with other Google
Play services features, such as the Location APIs on your wearable, you
would need to add play-services-location.

0 comments:

Post a Comment

Thank you very much for your comments ....................... Please stay with this blog