| page.title=Setting Up Google Play Services |
| @jd:body |
| |
| |
| |
| <div id="qv-wrapper"> |
| <div id="qv"> |
| |
| <h2>In this document</h2> |
| <ol> |
| <li><a href="#Setup">Add Google Play Services to Your Project</a></li> |
| <li><a href="#Proguard">Create a Proguard Exception</a></li> |
| <li><a href="#ensure">Ensure Devices Have the Google Play services APK</a></li> |
| </ol> |
| |
| |
| </div> |
| </div> |
| |
| <script> |
| $(document).ready(function() { |
| setupIdeDocToggle(); |
| }); |
| </script> |
| |
| |
| <p>To develop an app using the <a href="{@docRoot}reference/gms-packages.html">Google |
| Play services APIs</a>, you need to set up your project with the Google Play services SDK. |
| <p>If you haven't installed the Google Play services SDK yet, go get it now by following the guide |
| to <a href="{@docRoot}sdk/installing/adding-packages.html">Adding SDK Packages</a>.</p> |
| |
| <p>To test your app when using the Google Play services SDK, you must use either:</p> |
| <ul> |
| <li>A compatible Android |
| device that runs Android 2.3 or higher and includes Google Play Store.</li> |
| <li>The Android emulator with an <a href="{@docRoot}tools/devices/index.html">AVD</a> |
| that runs the Google APIs platform based on Android 4.2.2 or higher.</li> |
| </ul> |
| |
| |
| |
| <h2 id="Setup">Add Google Play Services to Your Project</h2> |
| |
| <p> |
| <select class="ide"> |
| <option value="studio">Using Android Studio</option> |
| <option value="eclipse">Using Eclipse with ADT</option> |
| <option value="other">Using something else</option> |
| </select> |
| </p> |
| |
| |
| <div class="select-ide studio"> |
| <p>To make the Google Play services APIs available to your app:</p> |
| <ol> |
| <li>Open the <code>build.gradle</code> file inside your application module directory. |
| <p class="note"><strong>Note:</strong> Android Studio projects contain a top-level |
| <code>build.gradle</code> file and a <code>build.gradle</code> file for each module. |
| Be sure to edit the file for your application module. See |
| <a href="{@docRoot}sdk/installing/studio-build.html">Building Your Project with |
| Gradle</a> for more information about Gradle.</p></li> |
| <li>Add a new build rule under <code>dependencies</code> for the latest version of |
| <code>play-services</code>. For example: |
| <pre class="no-pretty-print"> |
| apply plugin: 'com.android.application' |
| ... |
| |
| dependencies { |
| compile 'com.android.support:appcompat-v7:21.0.3' |
| <strong>compile 'com.google.android.gms:play-services:7.0.0'</strong> |
| } |
| </pre> |
| <p>Be sure you update this version number each time Google Play services is updated.</p> |
| <p class="note"><strong>Note:</strong> If the number of method references in your app exceeds the |
| <a href="{@docRoot}tools/building/multidex.html">65K limit</a>, your app may fail to compile. You |
| may be able to mitigate this problem when compiling your app by specifying only the specific Google |
| Play services APIs your app uses, instead of all of them. For information on how to do this, |
| see <a href="#split">Selectively compiling APIs into your executable</a>. |
| |
| </li> |
| <li>Save the changes and click <strong>Sync Project with Gradle Files</strong> |
| <img src="{@docRoot}images/tools/sync-project.png" style="vertical-align:bottom;margin:0;height:19px" /> |
| in the toolbar. |
| </li> |
| </ol> |
| |
| <p>You can now begin developing features with the |
| <a href="{@docRoot}reference/gms-packages.html">Google Play services APIs</a>.</p> |
| |
| <h3 id="split">Selectively compiling APIs into your executable</h3> |
| |
| <p>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.</p> |
| |
| <p>From version 6.5, you can instead selectively compile Google Play service APIs into your app. For |
| example, to include only the Google Fit and Android Wear APIs, replace the following line in your |
| <code>build.gradle</code> file:</p> |
| |
| <pre class="no-pretty-print"> |
| compile 'com.google.android.gms:play-services:7.0.0' |
| </pre> |
| |
| <p>with these lines:</p> |
| |
| <pre class="no-pretty-print"> |
| compile 'com.google.android.gms:play-services-fitness:7.0.0' |
| compile 'com.google.android.gms:play-services-wearable:7.0.0' |
| </pre> |
| |
| <p>Table 1 shows a list of the separate APIs that you can include when compiling your app, and |
| how to describe them in your <code>build.gradle</code> file. Some APIs do not have a separate |
| library; include them by including the base library. (This lib is automatically included when |
| you include an API that does have a separate library.)</p> |
| |
| <p class="table-caption" id="table1"> |
| <strong>Table 1.</strong> Individual APIs and corresponding <code>build.gradle</code> descriptions.</p> |
| |
| <table> |
| <tr> |
| <th scope="col">Google Play services API</th> |
| <th scope="col">Description in <code>build.gradle</code></th> |
| </tr> |
| <tr> |
| <td>Google+</td> |
| <td>com.google.android.gms:play-services-plus:7.0.0</td> |
| </tr> |
| <tr> |
| <td>Google Account Login</td> |
| <td>com.google.android.gms:play-services-identity:7.0.0</td> |
| </tr> |
| <tr> |
| <td>Google Actions, Base Client Library</td> |
| <td>com.google.android.gms:play-services-base:7.0.0</td> |
| </tr> |
| <tr> |
| <td>Google App Indexing</td> |
| <td>com.google.android.gms:play-services-appindexing:7.0.0</td> |
| </tr> |
| <tr> |
| <td>Google Analytics</td> |
| <td>com.google.android.gms:play-services-analytics:7.0.0</td> |
| </tr> |
| <tr> |
| <td>Google Cast</td> |
| <td>com.google.android.gms:play-services-cast:7.0.0</td> |
| </tr> |
| <tr> |
| <td>Google Cloud Messaging</td> |
| <td>com.google.android.gms:play-services-gcm:7.0.0</td> |
| </tr> |
| <tr> |
| <td>Google Drive</td> |
| <td>com.google.android.gms:play-services-drive:7.0.0</td> |
| </tr> |
| <tr> |
| <td>Google Fit</td> |
| <td>com.google.android.gms:play-services-fitness:7.0.0</td> |
| </tr> |
| <tr> |
| <td>Google Location, Activity Recognition, and Places</td> |
| <td>com.google.android.gms:play-services-location:7.0.0</td> |
| </tr> |
| <tr> |
| <td>Google Maps</td> |
| <td>com.google.android.gms:play-services-maps:7.0.0</td> |
| </tr> |
| <tr> |
| <td>Google Mobile Ads</td> |
| <td>com.google.android.gms:play-services-ads:7.0.0</td> |
| </tr> |
| <tr> |
| <td>Google Nearby</td> |
| <td>com.google.android.gms:play-services-nearby:7.0.0</td> |
| </tr> |
| <tr> |
| <td>Google Panorama Viewer</td> |
| <td>com.google.android.gms:play-services-panorama:7.0.0</td> |
| </tr> |
| <tr> |
| <td>Google Play Game services</td> |
| <td>com.google.android.gms:play-services-games:7.0.0</td> |
| </tr> |
| <tr> |
| <td>SafetyNet</td> |
| <td>com.google.android.gms:play-services-safetynet:7.0.0</td> |
| </tr> |
| <tr> |
| <td>Google Wallet</td> |
| <td>com.google.android.gms:play-services-wallet:7.0.0</td> |
| </tr> |
| <tr> |
| <td>Android Wear</td> |
| <td>com.google.android.gms:play-services-wearable:7.0.0</td> |
| </tr> |
| </table> |
| |
| </div><!-- end studio --> |
| |
| <div class="select-ide eclipse"> |
| |
| <p>To make the Google Play services APIs available to your app:</p> |
| <ol> |
| <li>Copy the library project at |
| {@code <android-sdk>/extras/google/google_play_services/libproject/google-play-services_lib/} |
| to the location where you maintain your Android app projects.</li> |
| <li>Import the library project into your Eclipse workspace. Click |
| <b>File > Import</b>, select <b>Android > Existing Android Code into |
| Workspace</b>, and browse to the copy of the library project to import it.</li> |
| <li>In your app project, reference Google Play services library project. See |
| <a href="{@docRoot}tools/projects/projects-eclipse.html#ReferencingLibraryProject"> |
| Referencing a Library Project for Eclipse</a> for more information on how to |
| do this. |
| <p class="note"><strong>Note:</strong> You should be referencing a copy of the |
| library that you copied to your development workspace—you should not |
| reference the library directly from the Android SDK directory.</p> |
| </li> |
| <li>After you've added the Google Play services library as a dependency for your app project, |
| open your app's manifest file and add the following tag as a child of the |
| <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a> |
| element: |
| <pre> |
| <meta-data android:name="com.google.android.gms.version" |
| android:value="@integer/google_play_services_version" /> |
| </pre> |
| </li> |
| </ol> |
| |
| <p>Once you've set up your project to reference the library project, |
| you can begin developing features with the |
| <a href="{@docRoot}reference/gms-packages.html">Google Play services APIs</a>.</p> |
| |
| </div><!-- end eclipse --> |
| |
| <div class="select-ide other"> |
| |
| <p>To make the Google Play services APIs available to your app:</p> |
| <ol> |
| <li>Copy the library project at |
| {@code <android-sdk>/extras/google/google_play_services/libproject/google-play-services_lib/} |
| to the location where you maintain your Android app projects.</li> |
| |
| <li>In your app project, reference the Google Play services library project. See |
| <a href="{@docRoot}tools/projects/projects-cmdline.html#ReferencingLibraryProject">Referencing |
| a Library Project on the Command Line</a> for more information on how to do this. |
| <p class="note"><strong>Note:</strong> |
| You should be referencing a copy of the library that you copied to your development |
| workspace—you should not reference the library directly from the Android SDK directory.</p> |
| </li> |
| <li>After you've added the Google Play services library as a dependency for |
| your app project, open your app's manifest file and add the following tag as |
| a child of the |
| <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a> |
| element: |
| <pre> |
| <meta-data android:name="com.google.android.gms.version" |
| android:value="@integer/google_play_services_version" /> |
| </pre> |
| </li> |
| </ol> |
| |
| <p>Once you've set up your project to reference the library project, |
| you can begin developing features with the |
| <a href="{@docRoot}reference/gms-packages.html">Google Play services APIs</a>.</p> |
| |
| </div><!-- end other --> |
| |
| |
| <h2 id="Proguard">Create a Proguard Exception</h2> |
| |
| <p>To prevent <a href="{@docRoot}tools/help/proguard.html">ProGuard</a> from stripping away |
| required classes, add the following lines in the |
| <code><project_directory>/proguard-project.txt</code> file: |
| <pre> |
| -keep class * extends java.util.ListResourceBundle { |
| protected Object[][] getContents(); |
| } |
| |
| -keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { |
| public static final *** NULL; |
| } |
| |
| -keepnames @com.google.android.gms.common.annotation.KeepName class * |
| -keepclassmembernames class * { |
| @com.google.android.gms.common.annotation.KeepName *; |
| } |
| |
| -keepnames class * implements android.os.Parcelable { |
| public static final ** CREATOR; |
| } |
| </pre> |
| |
| <p class="note"><strong>Note:</strong> When using Android Studio, you must add Proguard |
| to your <code>build.gradle</code> file's build types. For more information, see the |
| <a href="http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Running-ProGuard" |
| >Gradle Plugin User Guide</a>. |
| </ol> |
| |
| |
| <h2 id="ensure">Ensure Devices Have the Google Play services APK</h2> |
| |
| <p>As described in the <a href="{@docRoot}google/play-services/index.html">Google Play services |
| introduction</a>, Google Play delivers service updates for users on |
| Android 2.3 and higher through the Google Play Store app. However, updates might not reach |
| all users immediately, so your app should verify the version available before attempting to |
| perform API transactions.</p> |
| |
| <p class="caution"> |
| <strong>Important:</strong> |
| Because it is hard to anticipate the state of each device, you must <em>always</em> check for a |
| compatible Google Play services APK before you access Google Play services |
| features. |
| </p> |
| |
| <p>Because each app uses Google Play services differently, it's up to you decide the appropriate |
| place in your app to verify the Google Play services version. For example, if Google Play |
| services is required for your app at all times, you might want to do it when your app first |
| launches. On the other hand, if Google Play services is an optional part of your app, you can check |
| the version only once the user navigates to that portion of your app.</p> |
| |
| <p>You are strongly encouraged to use the |
| <a href="{@docRoot}reference/com/google/android/gms/common/api/GoogleApiClient.html"> |
| {@code GoogleApiClient}</a> class to access Google Play services features. This approach allows |
| you to attach an |
| <a href="{@docRoot}reference/com/google/android/gms/common/api/GoogleApiClient.OnConnectionFailedListener.html"> |
| {@code OnConnectionFailedListener}</a> object to your client. |
| To detect if the device has the appropriate version of the Google Play services APK, implement the |
| <a href="{@docRoot}reference/com/google/android/gms/common/api/GoogleApiClient.OnConnectionFailedListener.html#onConnectionFailed(com.google.android.gms.common.ConnectionResult)"> |
| {@code onConnectionFailed()}</a> |
| callback method. If the connection fails due to a missing or out-of-date version of |
| the Google Play APK, the callback receives an error code such as |
| <a href="{@docRoot}reference/com/google/android/gms/common/ConnectionResult.html#SERVICE_MISSING"> |
| {@code SERVICE_MISSING}</a>, |
| <a href="{@docRoot}reference/com/google/android/gms/common/ConnectionResult.html#SERVICE_VERSION_UPDATE_REQUIRED"> |
| {@code SERVICE_VERSION_UPDATE_REQUIRED}</a>, or |
| <a href="{@docRoot}reference/com/google/android/gms/common/ConnectionResult.html#SERVICE_DISABLED"> |
| {@code SERVICE_DISABLED}</a>. To learn more about how to build your client and handle such |
| connection errors, see <a href="{@docRoot}google/auth/api-client.html">Accessing Google APIs</a>. |
| </p> |
| |
| <p>Another approach is to use the |
| <a href="{@docRoot}reference/com/google/android/gms/common/GooglePlayServicesUtil.html#isGooglePlayServicesAvailable(android.content.Context)" |
| >{@code isGooglePlayServicesAvailable()}</a> method. You might call this method in the |
| {@link android.app.Activity#onResume onResume()} method of the main activity. If the result code is |
| <a href="{@docRoot}reference/com/google/android/gms/common/ConnectionResult.html#SUCCESS" |
| >{@code SUCCESS}</a>, |
| then the Google Play services APK is up-to-date and you can continue to make a connection. |
| If, however, the result code is |
| <a href="{@docRoot}reference/com/google/android/gms/common/ConnectionResult.html#SERVICE_MISSING" |
| >{@code SERVICE_MISSING}</a>, |
| <a href="{@docRoot}reference/com/google/android/gms/common/ConnectionResult.html#SERVICE_VERSION_UPDATE_REQUIRED" |
| >{@code SERVICE_VERSION_UPDATE_REQUIRED}</a>, |
| or |
| <a href="{@docRoot}reference/com/google/android/gms/common/ConnectionResult.html#SERVICE_DISABLED" |
| >{@code SERVICE_DISABLED}</a>, then the user needs to install an update. In this case, call the |
| <a href="{@docRoot}reference/com/google/android/gms/common/GooglePlayServicesUtil.html#getErrorDialog(int, android.app.Activity, int)"> |
| {@code getErrorDialog()}</a> method and pass it the result error code. The method returns a |
| {@link android.app.Dialog} you should show, which provides an appropriate message about the error |
| and provides an action that takes the user to Google Play Store to install the update.</p> |
| |
| |
| <p>To then begin a connection to Google Play services (required by most Google APIs such |
| as Google Drive, Google+, and Games), read <a |
| href="{@docRoot}google/auth/api-client.html">Accessing Google APIs</a>.</p> |