summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmds/app_process/app_main.cpp4
-rw-r--r--core/java/android/provider/MediaStore.java3
-rw-r--r--core/jni/AndroidRuntime.cpp16
-rw-r--r--core/res/res/values-mcc334-mnc020/config.xml21
-rw-r--r--data/fonts/Android.mk24
-rw-r--r--docs/html/index.jd6
-rw-r--r--docs/html/preview/download.jd24
-rw-r--r--docs/html/preview/features/app-linking.jd556
-rw-r--r--docs/html/preview/overview.jd9
-rw-r--r--docs/html/preview/setup-sdk.jd28
-rw-r--r--docs/html/preview/support.jd22
-rw-r--r--docs/html/reference/gcm_lists.js18
-rw-r--r--docs/html/reference/gms_lists.js889
-rw-r--r--docs/html/sdk/installing/adding-packages.jd6
-rw-r--r--docs/html/sdk/installing/index.jd12
-rw-r--r--docs/html/tools/building/buidling-cmdline-ant.jd381
-rw-r--r--docs/html/tools/building/building-eclipse.jd6
-rw-r--r--docs/html/tools/building/plugin-for-gradle.jd6
-rw-r--r--docs/html/tools/support-library/features.jd194
-rw-r--r--docs/html/tools/support-library/index.jd34
-rw-r--r--docs/html/training/basics/firstapp/creating-project.jd5
-rw-r--r--docs/html/training/basics/firstapp/index.jd15
-rw-r--r--docs/html/training/basics/firstapp/running-app.jd20
-rw-r--r--include/android_runtime/AndroidRuntime.h4
-rw-r--r--packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java7
-rw-r--r--services/backup/java/com/android/server/backup/BackupManagerService.java8
-rw-r--r--services/core/java/com/android/server/AnyMotionDetector.java33
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java2
-rw-r--r--services/core/java/com/android/server/DeviceIdleController.java261
-rw-r--r--services/core/java/com/android/server/trust/TrustManagerService.java6
-rw-r--r--services/core/java/com/android/server/wm/WindowStateAnimator.java3
-rw-r--r--services/usage/java/com/android/server/usage/UsageStatsService.java3
32 files changed, 2005 insertions, 621 deletions
diff --git a/cmds/app_process/app_main.cpp b/cmds/app_process/app_main.cpp
index 449a4abdfe4d..2e023825a219 100644
--- a/cmds/app_process/app_main.cpp
+++ b/cmds/app_process/app_main.cpp
@@ -304,9 +304,9 @@ int main(int argc, char* const argv[])
}
if (zygote) {
- runtime.start("com.android.internal.os.ZygoteInit", args);
+ runtime.start("com.android.internal.os.ZygoteInit", args, zygote);
} else if (className) {
- runtime.start("com.android.internal.os.RuntimeInit", args);
+ runtime.start("com.android.internal.os.RuntimeInit", args, zygote);
} else {
fprintf(stderr, "Error: no class name or --zygote supplied.\n");
app_usage();
diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java
index 9babf4309fab..48b3c1a1b064 100644
--- a/core/java/android/provider/MediaStore.java
+++ b/core/java/android/provider/MediaStore.java
@@ -240,9 +240,6 @@ public final class MediaStore {
* An application implementing a prewarm service should do the absolute minimum amount of work
* to initialize the camera in order to reduce startup time in likely case that shortly after a
* camera launch intent would be sent.
- * <p>
- * If the camera launch intent gets fired shortly after, the service will be unbound
- * asynchronously, without receiving
*/
public static final String META_DATA_STILL_IMAGE_CAMERA_PREWARM_SERVICE =
"android.media.still_image_camera_preview_service";
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index a3d5b8a5dc55..2fad2f60f32c 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -566,7 +566,7 @@ bool AndroidRuntime::parseCompilerRuntimeOption(const char* property,
*
* Returns 0 on success.
*/
-int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv)
+int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote)
{
JavaVMInitArgs initArgs;
char propBuf[PROPERTY_VALUE_MAX];
@@ -702,9 +702,13 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv)
parseRuntimeOption("dalvik.vm.gctype", gctypeOptsBuf, "-Xgc:");
parseRuntimeOption("dalvik.vm.backgroundgctype", backgroundgcOptsBuf, "-XX:BackgroundGC=");
- /* enable debugging; set suspend=y to pause during VM init */
- /* use android ADB transport */
- addOption("-agentlib:jdwp=transport=dt_android_adb,suspend=n,server=y");
+ /*
+ * Enable debugging only for apps forked from zygote.
+ * Set suspend=y to pause during VM init and use android ADB transport.
+ */
+ if (zygote) {
+ addOption("-agentlib:jdwp=transport=dt_android_adb,suspend=n,server=y");
+ }
parseRuntimeOption("dalvik.vm.lockprof.threshold",
lockProfThresholdBuf,
@@ -1000,7 +1004,7 @@ jstring AndroidRuntime::NewStringLatin1(JNIEnv* env, const char* bytes) {
* Passes the main function two arguments, the class name and the specified
* options string.
*/
-void AndroidRuntime::start(const char* className, const Vector<String8>& options)
+void AndroidRuntime::start(const char* className, const Vector<String8>& options, bool zygote)
{
ALOGD(">>>>>> START %s uid %d <<<<<<\n",
className != NULL ? className : "(unknown)", getuid());
@@ -1036,7 +1040,7 @@ void AndroidRuntime::start(const char* className, const Vector<String8>& options
JniInvocation jni_invocation;
jni_invocation.Init(NULL);
JNIEnv* env;
- if (startVm(&mJavaVM, &env) != 0) {
+ if (startVm(&mJavaVM, &env, zygote) != 0) {
return;
}
onVmCreated(env);
diff --git a/core/res/res/values-mcc334-mnc020/config.xml b/core/res/res/values-mcc334-mnc020/config.xml
new file mode 100644
index 000000000000..0970517835b6
--- /dev/null
+++ b/core/res/res/values-mcc334-mnc020/config.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+<resources>
+ <bool name="config_use_sim_language_file">false</bool>
+</resources> \ No newline at end of file
diff --git a/data/fonts/Android.mk b/data/fonts/Android.mk
index 39458f913abe..3181017a2e5a 100644
--- a/data/fonts/Android.mk
+++ b/data/fonts/Android.mk
@@ -17,13 +17,10 @@
LOCAL_PATH := $(call my-dir)
-# Use full Noto Sans Japanese font on the normal footprints, but
-# exclude it from SMALLER and use a subset on the CONSTRAINED ones.
+# Use full Noto Sans Japanese font on non-smaller footprints
ifneq ($(SMALLER_FONT_FOOTPRINT),true)
-ifneq ($(CONSTRAINED_FONT_FOOTPRINT),true)
FONT_NOTOSANS_JP_FULL := true
endif
-endif
##########################################
# create symlink for given font
@@ -85,32 +82,19 @@ include $(BUILD_PREBUILT)
extra_font_files :=
################################
-# Include the DroidSansFallback subset on SMALLER_FONT_FOOTPRINT builds,
-# and the full font on CONSTRAINED_FONT_FOOTPRINT ones.
+# Include the DroidSansFallback subset on SMALLER_FONT_FOOTPRINT build
ifeq ($(SMALLER_FONT_FOOTPRINT),true)
-droidsans_fallback_src := DroidSansFallback.ttf
-build_droidsans_fallback := true
-endif # SMALLER_FONT_FOOTPRINT
-
-ifeq ($(CONSTRAINED_FONT_FOOTPRINT),true)
-droidsans_fallback_src := DroidSansFallbackFull.ttf
-build_droidsans_fallback := true
-endif # CONSTRAINED_FONT_FOOTPRINT
-
-ifeq ($(build_droidsans_fallback),true)
include $(CLEAR_VARS)
LOCAL_MODULE := DroidSansFallback.ttf
-LOCAL_SRC_FILES := $(droidsans_fallback_src)
+LOCAL_SRC_FILES := $(LOCAL_MODULE)
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_PATH := $(TARGET_OUT)/fonts
include $(BUILD_PREBUILT)
droidsans_fallback_src :=
-endif # build_droidsans_fallback
-
-build_droidsans_fallback :=
+endif # SMALLER_FONT_FOOTPRINT
################################
# Build the rest of font files as prebuilt.
diff --git a/docs/html/index.jd b/docs/html/index.jd
index 609d78a33899..10519f74b04d 100644
--- a/docs/html/index.jd
+++ b/docs/html/index.jd
@@ -22,9 +22,9 @@ page.customHeadTag=<meta name="google-site-verification" content="sa-bIAI6GKvct3
<h1 class="dac-hero-title" style="white-space:nowrap;">Android 6.0 Marshmallow</h1>
</div>
<div class="col-6of16 col-push-1of16">
- <p class="dac-hero-description"><strong>The official Android 6.0
- SDK is now available!</strong> Update to Developer Preview 3
- and get your apps ready for Android Marshmallow!</p>
+ <p class="dac-hero-description" style="color:white"><strong>The
+ official Android 6.0 SDK is now available!</strong> Update to
+ Developer Preview 3 and get your apps ready for Android Marshmallow!</p>
<a class="dac-hero-cta" href="/preview/index.html">
<span class="dac-sprite dac-auto-chevron"></span>
diff --git a/docs/html/preview/download.jd b/docs/html/preview/download.jd
index de99d0d84ca0..ecc0c7ed295c 100644
--- a/docs/html/preview/download.jd
+++ b/docs/html/preview/download.jd
@@ -247,34 +247,34 @@ This is the Android SDK Preview License Agreement (the “License Agreement”).
<tr id="hammerhead">
<td>Nexus 5 (GSM/LTE) <br>"hammerhead"</td>
<td><a href="#top" onclick="onDownload(this)"
- >hammerhead-MPA44G-preview-3fff4cf7.tgz</a><br>
- MD5: ce86cb083174fab9f52483fa0828b23f<br>
- SHA-1: 3fff4cf707c2ce5a5efbb7238982a41d36bd7dcc
+ >hammerhead-MPA44I-preview-2ebbc049.tgz</a><br>
+ MD5: 91a924fb0c9f8e716e3b4c9954fd0dbb<br>
+ SHA-1: 2ebbc049b68c4da8baeee3e42bb94d7a965ba4a3
</td>
</tr>
<tr id="shamu">
<td>Nexus 6 <br>"shamu"</td>
<td><a href="#top" onclick="onDownload(this)"
- >shamu-MPA44G-preview-6ad5fb56.tgz</a><br>
- MD5: d1ec118d4b7dc564f048542576885985<br>
- SHA-1: 6ad5fb561e3ccc7fd8c12f8513984a64a0a265da
+ >shamu-MPA44I-preview-62b9c486.tgz</a><br>
+ MD5: ac6e58da86125073d9c395257fd42664<br>
+ SHA-1: 62b9c486fd7a5020e228d53ca5acd5c1857e48ff
</td>
</tr>
<tr id="volantis">
<td>Nexus 9 <br>"volantis"</td>
<td><a href="#top" onclick="onDownload(this)"
- >volantis-MPA44G-preview-7ff8343a.tgz</a><br>
- MD5: 2f764a8d0b2c176ab723ed7e26907075<br>
- SHA-1: 7ff8343a0545a142e6a84023940b75ab328b6ae8
+ >volantis-MPA44I-preview-5c30a6e2.tgz</a><br>
+ MD5: 7f83768757913d3fea945a661020d185<br>
+ SHA-1: 5c30a6e2acd11a81f4105b12d23ff654f534f699
</td>
</tr>
<tr id="fugu">
<td>Nexus Player <br>"fugu"</td>
<td><a href="#top" onclick="onDownload(this)"
- >fugu-MPA44G-preview-f9cc2862.tgz</a><br>
- MD5: 876fdc064836fa7ddf33d34e04fbd772<br>
- SHA-1: f9cc2862fa5314393ec5780a6a9e08f9a9aacf4d
+ >fugu-MPA44I-preview-2860040a.tgz</a><br>
+ MD5: 438da8d37da9e341a69cfb16a4001ac5<br>
+ SHA-1: 2860040a326582f1ff5f702bf9a1ef002717fc98
</td>
</tr>
diff --git a/docs/html/preview/features/app-linking.jd b/docs/html/preview/features/app-linking.jd
index 5592323f1a3a..b8fb3008e014 100644
--- a/docs/html/preview/features/app-linking.jd
+++ b/docs/html/preview/features/app-linking.jd
@@ -7,61 +7,295 @@ page.keywords=applinking, deeplinks, intents
<div id="qv">
<h2>In this document</h2>
<ol>
- <li><a href="#web-assoc">Declare a Website Association</a></li>
- <li><a href="#verfy-links">Request App Link Verification</a></li>
- <li><a href="#user-manage">Managing App Link Settings</a></li>
+ <li><a href="#url-handling">Understanding URL Request Handling</a> </li>
+ <li><a href="#intent-handler">Create an Intent Handler for URLs</a></li>
+ <li><a href="#request-verify">Request App Links Verification</a></li>
+ <li><a href="#web-assoc">Declare Website Associations</a></li>
+ <li><a href="#testing">Testing App Links</a></li>
</ol>
</div>
</div>
+
+<p>
+ The M Developer Preview introduces a new option for handling web site links, allowing clicked
+ links to go directly to the website's official app, instead of asking the user to chose how to
+ handle the link. This feature saves the user time and helps developers deliver a better
+ experience. Users can also select whether an app should always open specific types of links
+ automatically or prompt the user each time.
+</p>
+
+<p>
+ Handling links automatically requires the cooperation of app developers and website owners.
+ Developers must configure their apps to declare connections with websites and request
+ verification. Website owners can publish a
+ Digital Asset Links file
+ to allow Android to verify the association of apps with their sites. The general steps for
+ creating verified app links are as follows:
+</p>
+
+<ol>
+ <li>Create intent filters within your app for your website URLs</li>
+ <li>Configure your app to request verification of app links</li>
+ <li>Publish a Digital Asset Links JSON file on your websites</li>
+</ol>
+
+<h2 id="url-handling">Understanding URL Request Handling</h2>
+
+<p>
+ The app links feature allows your app to become the default handler for your website URLs, as
+ long as the user has not already chosen an app to handle that URL pattern. When a web URI intent
+ is invoked through a clicked link or programatic request, the Android system determines what app
+ is used to handle the intent. The system use these criteria, in order, to determine how to handle
+ the request:
+</p>
+
+<ol>
+ <li>
+ <strong>User has set app link associations</strong>: If the user has designated an app to
+ handle app links, the system passes the web URI request to that app. Users set this association
+ by opening <strong>Settings &gt; Apps &gt; Configure apps (gear icon) &gt; App links</strong>,
+ then selecting an app to use and configuring it's <strong>App links</strong> property to the
+ <em>Open in this app</em> option.
+ </li>
+
+ <li>
+ <strong>No association set by user and a single supporting app</strong>: If the user
+ has not set a preference that matches the web URI request, and there is only one app declaring
+ support for the intent’s URI pattern, the system passes the request to that app.
+ </li>
+
+ <li>
+ <strong>No association set by user and multiple supporting apps</strong>: If there is
+ no explicit user preference and there are multiple apps declaring support for the web URI
+ pattern, the system prompts the user to select one of the available apps
+ </li>
+</ol>
+
+<p>
+ In case #2 (no user setting and no other app handlers), if an app is newly installed and verified
+ as a handler for this type of link, the system sets it as the default handler. In the other two
+ cases, the system behavior is the same, regardless of the presence of a verified app link
+ handler.
+</p>
+
+
+<h2 id="intent-handler">Create an Intent Handler for URLs</h2>
+
+<p>
+ App links are based on the <a href="{@docRoot}guide/components/intents-filters.html">Intent</a>
+ framework, which enables apps to handle requests from the system or other apps. Multiple apps may
+ declare matching web link URI patterns in their intent filters. When a user clicks on a web link
+ that does not have a default launch handler, the platform selects an app to handle the request,
+ based on the criteria described in the previous section.
+</p>
+
+<p>
+ To enable your app to handle links, use intent filters in your app manifest to declare the URI
+ patterns to be handled by your app. The following sample code shows an intent filter that can
+ handle links to {@code http://www.android.com} and {@code https://www.android.com}:
+</p>
+
+<pre>
+ &lt;activity ...&gt;
+ &lt;intent-filter&gt;
+ &lt;action android:name="android.intent.action.VIEW" /&gt;
+ &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+ &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
+ &lt;data android:scheme="http" /&gt;
+ &lt;data android:scheme="https" /&gt;
+ &lt;data android:host="www.android.com" /&gt;
+ &lt;/intent-filter&gt;
+ &lt;/activity&gt;
+</pre>
+
<p>
- The Android Intent system is a flexible mechanism to enable apps to handle content and requests.
- Multiple apps may declare matching URI patterns in their intent filters. When a user clicks on a
- web link that does not have a default launch handler, the platform may show a dialog for the user
- to select from a list of apps that have declared matching intent filters.
+ As shown in the example above, intent filters for app links must declare an {@code android:scheme}
+ value of either {@code http} or {@code https}, or both. The filter should not declare
+ any other schemes. The filter must also include the {@code android.intent.action.VIEW}; and
+ {@code android.intent.category.BROWSABLE} category names.
</p>
<p>
- The Android M Developer Preview introduces support for App Links, which improves upon existing
- link handling by allowing app developers to associate an app with a web domain they own. When
- developers create this association, the platform can automatically determine the default app used
- to handle a particular web link and skip asking users.
+ This manifest declaration defines the connection between your app and a website. However, in
+ order to have the system treat your app as the default handler for a set of URLs, you must
+ also request that the system verify this connection, which is explained in the next section.
</p>
-<h2 id="web-assoc">Declare a Website Association</h2>
+<h2 id="request-verify">Request App Links Verification</h2>
+
+<p>
+ In addition to declaring an association between your app and a web site using intent filters,
+ your app must also request automatic verification with an additional manifest declaration. When
+ this declaration is set, the Android system attempts to verify your app after it is installed.
+ If the verification succeeds, and the user has not set a preference for your website URLs, the
+ system automatically routes those URL requests to your app.
+</p>
<p>
- Website owners must declare associations with apps to establish an app link. The site owner
- declares the relationship to an app by hosting a JSON file, named {@code statements.json}, at the
- well-known location on the domain:
+ The system performs app link verifications by comparing the host names in the data elements of
+ the app’s intent filters against the Digital Asset Links files ({@code assetlinks.json}) hosted
+ on the respective web domains. To enable the system to verify a host, make sure that your intent
+ filter declarations include the {@code android.intent.action.VIEW} intent action and {@code
+ android.intent.category.BROWSABLE} intent category.
</p>
-<pre>http://&lt;domain&gt;:&lt;optional port&gt;/.well-known/statements.json</pre>
+
+<h3 id="config-verify">Enabling automatic verification</h3>
+
+<p>
+ To enable link handling verification for your app, set the {@code android:autoVerify} attribute to
+ {@code true} on at least one of the web URI intent filters in your app manifest, as shown in the
+ following manifest code snippet:
+</p>
+
+<pre>
+&lt;activity ...&gt;
+
+ &lt;intent-filter <strong>android:autoVerify="true"</strong>&gt;
+ &lt;action android:name="android.intent.action.VIEW" /&gt;
+ &lt;category android:name="android.intent.category.DEFAULT"gt;
+ &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
+ &lt;data android:scheme="http" android:host="www.android.com" /&gt;
+ &lt;data android:scheme="https" android:host="www.android.com" /&gt;
+ &lt;/intent-filter&gt;
+
+&lt;/activity&gt;
+</pre>
+
+<p>
+ When the {@code android:autoVerify} attribute is set, the system attempts to verify all hosts
+ associated with web URI’s in all of your app's intent filters when the app is installed. The
+ system treats your app as the default handler for the specified URI pattern only if it
+ successfully verifies <em>all</em> app link patterns declared in your manifest.
+</p>
+
+
+<h3 id="multi-host">Supporting app linking for multiple hosts</h3>
+
+<p>
+ The system must be able to verify each host specified in the app’s web URI intent filters’ data
+ elements against the Digital Asset Links files hosted on the respective web domains. If any
+ verification fails, the app is not verified to be a default handler for any of the web URL
+ patterns defined in its intent filters. For example, an app with the following intent filters
+ would fail verification if an {@code assetlinks.json} file were not found at both
+ {@code https://www.domain1.com/.well-known/assetlinks.json} and
+ {@code https://www.domain2.com/.well-known/assetlinks.json}:
+</p>
+
+<pre>
+&lt;application&gt;
+
+ &lt;activity android:name=”MainActivity”&gt;
+ &lt;intent-filter <strong>android:autoVerify="true"</strong>&gt;
+ &lt;action android:name="android.intent.action.VIEW" /&gt;
+ &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+ &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
+ &lt;data android:scheme="http" android:host="www.domain1.com" /&gt;
+ &lt;data android:scheme="https" android:host="www.domain1.com" /&gt;
+ &lt;/intent-filter&gt;
+ &lt;/activity&gt;
+ &lt;activity android:name=”SecondActivity”&gt;
+ &lt;intent-filter&gt;
+ &lt;action android:name="android.intent.action.VIEW" /&gt;
+ &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+ &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
+ &lt;data android:scheme="https" android:host="www.domain2.com" /&gt;
+ &lt;/intent-filter&gt;
+ &lt;/activity&gt;
+
+&lt;/application
+</pre>
+
+
+<h3 id="multi-subdomain">Supporting app linking for multiple subdomains</h3>
+
+<p>
+ The Digital Asset Links protocol treats subdomains as unique, separate hosts. If your intent
+ filter lists both the {@code www.example.com} and {@code mobile.example.com} subdomains as
+ schemes, you must host separate {@code assetlink.json} file on each subdomain. For example, an
+ app with the following intent filter declaration would pass verification only if the website
+ owner published valid {@code assetlinks.json} files at both
+ {@code https://www.example.com/.well-known/assetlinks.json} and
+ {@code https://mobile.example.com/.well-known/assetlinks.json}:
+</p>
+
+<pre>
+&lt;application&gt;
+ &lt;activity android:name=”MainActivity”&gt;
+ &lt;intent-filter <strong>android:autoVerify="true"</strong>&gt;
+ &lt;action android:name="android.intent.action.VIEW" /&gt;
+ &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+ &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
+ &lt;data android:scheme="http" android:host="www.example.com" /&gt;
+ &lt;data android:scheme="https" android:host="mobile.example.com" /&gt;
+ &lt;/intent-filter&gt;
+ &lt;/activity&gt;
+&lt;/application&gt;
+</pre>
+
+
+<h2 id="web-assoc">Declare Website Associations</h2>
+
+<p>
+ For app link verification to be successful, website owners must declare associations
+ with apps. A site owner declares the relationship to an app by hosting a Digital Asset Links JSON
+ file, with the name {@code assetlinks.json}, at the following well-known location on the domain:
+</p>
+
+<pre>
+ https://<em>domain</em>[:<em>optional_port</em>]/.well-known/assetlinks.json
+</pre>
<p class="note">
- <strong>Note:</strong>
- During the M Developer Preview period, the JSON file is verified via http protocol. For
- the official release of the platform, the file is verified over encrypted, https protocol.
+ <strong>Important:</strong> With M Preview 3 and the Android 6.0 (API level 23) release, the JSON
+ file is verified via the encrypted HTTPS protocol. Make sure that your hosted file can be
+ accessed over an HTTPS connection, regardless of whether your app's intent filter declares an
+ {@code android:scheme} setting of {@code http}, {@code https} or both.
</p>
<p>
- This JSON file indicates the Android app that should be used as the default handler for the URLs
- under this domain. It identifies the app based on these fields:
+ A Digital Asset Links JSON file indicates the Android apps that are associated with the web site.
+ The JSON file identifies associated apps with the following fields:
</p>
<ul>
<li>{@code package_name}: The package name declared in the app's manifest.</li>
- <li>{@code sha256_cert_fingerprints}: The SHA256 fingerprint of your app’s signing certificate.
+ <li>{@code sha256_cert_fingerprints}: The SHA256 fingerprints of your app’s signing certificate.
You can use the Java keytool to generate the fingerprint using the following command:
<pre>keytool -list -v -keystore my-release-key.keystore</pre>
+ This field supports multiple fingerprints, which can be used to support different versions
+ of your app, such as debug and production builds.
</li>
</ul>
<p>
- The following file listing shows an example of the contents and format of a
- {@code statements.json} file:
+ The following example {@code assetlinks.json} file grants link opening rights to a
+ {@code com.example} Android application:
+</p>
+
+<pre>
+ [{
+ "relation": ["delegate_permission/common.handle_all_urls"],
+ "target": {
+ "namespace": "android_app",
+ "package_name": "com.example",
+ "sha256_cert_fingerprints":
+ ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
+ }
+ }]
+</pre>
+
+
+<h3 id="multiple-apps">Associating a website with multiple apps</h3>
+
+<p>
+ A website can declare associations with multiple apps within the same {@code assetlinks.json}
+ file. The following file listing shows an example of a statement file that declares association
+ with two, separate apps and is hosted at
+ <code>https://www.example.com/.well-known/assetlinks.json</code>:
</p>
<pre>
@@ -69,55 +303,269 @@ page.keywords=applinking, deeplinks, intents
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
- "package_name": "<strong>&lt;package name&gt;</strong>",
- "sha256_cert_fingerprints": ["<strong>6C:EC:C5:0E:34:AE....EB:0C:9B</strong>"]
+ "package_name": <strong>"example.com.puppies.app"</strong>,
+ "sha256_cert_fingerprints":
+ ["<strong>14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5</strong>"]
+ }
+ },
+ {
+ "relation": ["delegate_permission/common.handle_all_urls"],
+ "target": {
+ "namespace": "android_app",
+ "package_name": "<strong>example.com.monkeys.app</strong>",
+ "sha256_cert_fingerprints":
+ ["<strong>14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5</strong>"]
}
}]
</pre>
+<p>
+ When multiple apps handle links to the same host, the system determines which one to use for
+ a given link based on the intent filters defined in each app’s manifest. Different apps may
+ handle links for different resources under the same web host. For example, app1 may
+ declare an intent filter for {@code https://example.com/articles}, and app2 may declare
+ an intent filter for {@code https://example.com/videos}.
+</p>
-<h2 id="verfy-links">Request App Link Verification</h2>
+<p class="note">
+ <strong>Note:</strong> Multiple apps associated with a domain may be signed with the same or
+ different certificates.
+</p>
+
+
+<h3 id="multi-site">Associating multiple websites with a single app</h3>
<p>
- An app can request that the platform automatically verify any app links defined by the host names
- in the data elements of its intent filters against the {@code statements.json} files hosted on
- the respective web domains. To request app link verification, add an {@code android:autoVerify}
- attribute to each desired intent filter in the manifest, as shown in the following manifest code
- snippet:
+ Multiple websites can declare associations with the same app in their respective {@code
+ assetlinks.json} files. The following file listings show an example of how to declare the
+ association of domain1 and domain2 with app1:
</p>
<pre>
-&lt;activity ...&gt;
- &lt;intent-filter <strong>android:autoVerify="true"</strong>&gt;
- &lt;action android:name="android.intent.action.VIEW" /&gt;
- &lt;category android:name="android.intent.category.DEFAULT" /&gt;
- &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
- &lt;data android:scheme="http" android:host="www.android.com" /&gt;
- &lt;data android:scheme="https" android:host="www.android.com" /&gt;
- &lt;/intent-filter&gt;
-&lt;/activity&gt;
+https://www.domain1.com/.well-known/assetlinks.json
+
+[{
+ "relation": ["delegate_permission/common.handle_all_urls"],
+ "target": {
+ "namespace": "android_app",
+ "package_name": "<strong>com.mycompany.app1</strong>",
+ "sha256_cert_fingerprints":
+ ["<strong>14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5</strong>"]
+ }
+}]
+</pre>
+
+<pre>
+https://www.domain2.com/.well-known/assetlinks.json
+
+[{
+ "relation": ["delegate_permission/common.handle_all_urls"],
+ "target": {
+ "namespace": "android_app",
+ "package_name": "<strong>com.mycompany.app1</strong>",
+ "sha256_cert_fingerprints":
+ ["<strong>14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5</strong>"]
+ }
+}]
+</pre>
+
+
+
+<h2 id="testing">Testing App Links</h2>
+
+<p>
+ When implementing the app linking feature, you should test the linking functionality to
+ make your app can be successfully associated with your websites and handle URL requests
+ as you expect.
+</p>
+
+
+<h3 id="test-hosts">Confirm the list of hosts to verify</h3>
+
+<p>
+ When testing, you should confirm the list of associated hosts that the system should verify
+ for your app. Make a list of all web URI’s in intent-filters in your manifest that
+ includes the following:
+</p>
+
+<ul>
+ <li>{@code android:scheme} attribute with a value of {@code http} or {@code https}
+ </li>
+ <li>{@code android:host} attribute with a domain URI pattern
+ </li>
+ <li>{@code android.intent.action.VIEW} category element
+ </li>
+ <li>{@code android.intent.category.BROWSABLE} category element
+ </li>
+</ul>
+
+<p>
+ Use this list to check that a Digital Asset Links JSON file is provided on each named host
+ and subdomain.
+</p>
+
+
+<h3 id="test-dal-files">Confirm the Digital Asset Links files</h3>
+
+<p>
+ For each website, confirm that the Digital Asset Links JSON file is properly hosted and
+ defined by using the Digital Asset Links API:
+</p>
+
+<pre>
+https://digitalassetlinks.googleapis.com/v1/statements:list?
+ source.web.site=https://<strong>&lt;domain1&gt;:&lt;port&gt;</strong>&amp;
+ relation=delegate_permission/common.handle_all_urls
+</pre>
+
+
+<h3 id="test-intent">Testing a web URI intent</h3>
+
+<p>
+ Once you have confirmed the list of websites to associate with your app, and you have confirmed
+ that the hosted JSON file is valid, install the app on your device. Wait at least 20 seconds for
+ the asynchronous verification process to complete. Use the following command to check
+ if the system verified your app and set the correct link handling policies:
+</p>
+
+<pre>
+adb shell am start -a android.intent.action.VIEW \
+ -c android.intent.category.BROWSABLE \
+ -d "http://&lt;domain1&gt;:&lt;port&gt;"
</pre>
+
+<h3 id="check-link-policies">Check link policies</h3>
+
<p>
- When the {@code android:autoVerify} attribute is present in an app manifest, the platform
- attempts to verify app links when the app is installed. If the platform cannot successfully
- verify the app links, the app is not set as the preferred app to handle the web links. The next
- time a user opens one of the links, the platform falls back to presenting the user with a
- dialog.
+ As part of your testing process, you can check the current system settings for link handling.
+ Use the following command to get a listing of link-handling policies for all applications:
</p>
+<pre>
+ adb shell dumpsys package domain-preferred-apps
+ --or--
+ adb shell dumpsys package d
+</pre>
+
<p class="note">
- <strong>Note:</strong> In testing, there is a potential for a false positive if verfication
- fails, but the user has explicitly enabled the app to open supported links without asking, using
- the system Settings app. In this case, no dialog is shown and the link goes directly to your
- app, but only because of the user setting, and not because verification succeeded.
+ <strong>Note:</strong> Make sure you wait at least 20 seconds after installation of your app to
+ allow for the system to complete the verification process.
</p>
+<p>
+ The command returns a listing of each user or profile defined on the device,
+ indicated by a header in the following format:
+</p>
-<h2 id="user-manage">Managing App Link Settings</h2>
+<pre>
+App linkages for user 0:
+</pre>
<p>
- Users can change app link settings so URLs are handled the way they prefer. You can review and
- manage app links in the system Settings app, under <strong>Settings &gt; Apps &gt; App Info &gt;
- Open by default</strong>.
+ Following this heading, the output lists the link-handling settings for that user in this format:
</p>
+
+<pre>
+Package: com.android.vending
+Domains: play.google.com market.android.com
+Status: always : 200000002
+</pre>
+
+<p>This listing indicates the what apps are associated with what domains for that user, as
+ described below:</p>
+
+<ul>
+ <li>{@code Package} - Identifies an app by its package name, as declared in its manifest.
+ </li>
+ <li>{@code Domains} - Shows the full list of hosts whose web links this app handles.
+ </li>
+ <li>{@code Status} - Shows the current link-handling setting for this app. An app that set {@code
+ android:autoVerify="true"} value and passed verification is shown with a status of {@code
+ always}. The hexadecimal number after this status is related to the Android system's record of
+ the user’s app linkage preferences. This value is not relevant for interpreting whether the
+ verification operation passed.
+ </li>
+</ul>
+
+<p class="note">
+ <strong>Note:</strong>It is possible for a user to change the app link settings for an app
+ before the verification operation has completed. If this
+ situation occurs, you may see a false positive for a successful verification, even though
+ verification has failed. However, the user has already explicitly enabled the app to open
+ supported links without asking. In this case, no dialog is shown and the link goes directly to
+ your app, but only because explicit user preferences take precedence.
+</p>
+
+
+
+<h3 id="test-example">Test example</h3>
+
+<p>
+ For app link verification to succeed, the system must be able to verify your app with all of
+ the websites referenced in your app’s intent filters, that meet the criteria for app links.
+ The following example manifest snippet shows app configuration with several app links defined:
+</p>
+
+<pre>
+ &lt;application&gt;
+
+ &lt;activity android:name=”MainActivity”&gt;
+ &lt;intent-filter <strong>android:autoVerify="true"</strong>&gt;
+ &lt;action android:name="android.intent.action.VIEW" /&gt;
+ &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+ &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
+ &lt;data android:scheme="http" android:host="www.example.com" /&gt;
+ &lt;data android:scheme="https" android:host="mobile.example.com" /&gt;
+ &lt;/intent-filter&gt;
+ &lt;intent-filter&gt;
+ &lt;action android:name="android.intent.action.VIEW" /&gt;
+ &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
+ &lt;data android:scheme="http" android:host="www.example2.com" /&gt;
+ &lt;/intent-filter&gt;
+ &lt;/activity&gt;
+
+ &lt;activity android:name=”SecondActivity”&gt;
+ &lt;intent-filter&gt;
+ &lt;action android:name="android.intent.action.VIEW" /&gt;
+ &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+ &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
+ &lt;data android:scheme="http" android:host="account.example.com" /&gt;
+ &lt;/intent-filter&gt;
+ &lt;/activity&gt;
+
+ &lt;activity android:name=”ThirdActivity”&gt;
+ &lt;intent-filter&gt;
+ &lt;action android:name="android.intent.action.VIEW" /&gt;
+ &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+ &lt;data android:scheme="http" android:host="map.example.com" /&gt;
+ &lt;/intent-filter&gt;
+ &lt;intent-filter&gt;
+ &lt;action android:name="android.intent.action.VIEW" /&gt;
+ &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
+ &lt;data android:scheme="market" android:host="example.com" /&gt;
+ &lt;/intent-filter&gt;
+ &lt;/activity&gt;
+
+ &lt;/application&gt;
+</pre>
+
+<p>
+ The list of hosts that the platform would attempt to verify from the above manifest is:
+</p>
+
+<pre>
+ www.example.com
+ mobile.example.com
+ www.example2.com
+ account.example.com
+</pre>
+
+<p>
+ The list of hosts that the platform would not attempt to verify from the above manifest is:
+</p>
+
+<pre>
+ map.example.com (it does not have android.intent.category.BROWSABLE)
+ market://example.com (it does not have either an “http” or “https” scheme)
+</pre>
diff --git a/docs/html/preview/overview.jd b/docs/html/preview/overview.jd
index c486b1ccb9b1..fb2e266fb0f7 100644
--- a/docs/html/preview/overview.jd
+++ b/docs/html/preview/overview.jd
@@ -164,7 +164,8 @@ page.tags="preview", "developer", "android"
</li>
<li>
- <strong><a href="{@docRoot}preview/download.html">Preview&nbsp;3</a></strong> (final APIs and official Android 6.0 SDK, available).
+ <strong><a href="{@docRoot}preview/download.html">Preview&nbsp;3</a></strong>
+ (final APIs and official Android 6.0 SDK, available).
</li>
</ul>
@@ -336,12 +337,12 @@ page.tags="preview", "developer", "android"
to <code>“23”</code>.
</p>
- <p>Before releasing your app targeting API level 23, we strongly
+ <p>Before releasing an app that targets API level 23, we strongly
recommend distributing it to a group of testers through the new <a
- href="http://android-developers.blogspot.com/2015/07/iterate-faster-on-google-play-with.html">
+ href="http://android-developers.blogspot.com/2015/07/iterate-faster-on-google-play-with.html">
beta testing features available in the Google Play Developer Console. See the
<a href="https://support.google.com/googleplay/android-developer/answer/3131213">Help
- Center article</a> for more information.
+ Center article</a> for more information.
</p>
<h2 id="get_started">
diff --git a/docs/html/preview/setup-sdk.jd b/docs/html/preview/setup-sdk.jd
index a4d9418d7c15..7a2a6660c013 100644
--- a/docs/html/preview/setup-sdk.jd
+++ b/docs/html/preview/setup-sdk.jd
@@ -1,4 +1,4 @@
-page.title=Set Up the Preview SDK
+page.title=Set Up the SDK
page.image=images/cards/card-set-up_16-9_2x.png
@jd:body
@@ -9,14 +9,14 @@ page.image=images/cards/card-set-up_16-9_2x.png
<h2>In this document</h2>
<ol>
<li><a href="#get-as13">Get Android Studio 1.3</a></li>
- <li><a href="#get-sdk">Get the Preview SDK</a></li>
+ <li><a href="#get-sdk">Get the Android 6.0 SDK</a></li>
<li><a href="#create-update">Create or Update a Project</a></li>
<li><a href="#setup-test">Set Up for Testing</a></li>
</ol>
</div>
</div>
-<p>With Developer Preview 3, the official Android 6.0 SDK is now available from the Android SDK
+<p>With Developer Preview 3, the <strong>official Android 6.0 SDK is now available</strong> from the Android SDK
Manager. This document assumes that you are familiar with Android app development, such
as using the Android SDK Manager and creating projects. If you are new to
Android, see <a href="{@docRoot}training/basics/firstapp/index.html">Building Your First
@@ -26,17 +26,16 @@ App</a> training lesson first.</p>
<h2 id="get-as13">Get Android Studio 1.3</h2>
<p>
- The Developer Preview is best used with Android Studio 1.3. It is highly recommended that
- you install the Android Studio 1.3 to work with the Preview SDK and the final Android 6.0 SDK
- provided with Preview 3. Please update your Android Studio installation to version 1.3 or
+ It is highly recommended that you install the Android Studio 1.3 to work best with
+ the Android 6.0 SDK. Please update your Android Studio installation to version 1.3 or
higher, or follow the instructions for
<a href="{@docRoot}sdk/installing/index.html?pkg=studio">Installing Android Studio</a>.
</p>
-<h2 id="get-sdk">Get the Preview SDK</h2>
+<h2 id="get-sdk">Get the Android 6.0 SDK</h2>
-<p>To add the Preview SDK components to your development environment:</p>
+<p>To add the Android 6.0 SDK components to your development environment:</p>
<ol>
<li>Launch Android Studio 1.3 or higher.
@@ -61,8 +60,7 @@ App</a> training lesson first.</p>
standalone application.)
</li>
- <li>Under the <strong>Platforms</strong> section, select <strong>Android MNC
- Preview</strong>.
+ <li>Under the <strong>Platforms</strong> section, select <strong>Android 6.0</strong>.
</li>
<li>In the <strong>Tools</strong> section, select the latest Android <strong>
@@ -74,13 +72,12 @@ App</a> training lesson first.</p>
agreement for all of the packages.
</li>
- <li>Verify that the M Developer Preview is installed by opening the <strong>
+ <li>Verify that the Android 6.0 SDK is installed by opening the <strong>
Settings</strong> window and choosing the <strong>Appearance &amp; Behavior
&gt; System Settings &gt; Android SDK</strong> panel.</li>
<li>On the <strong>Android SDK</strong> panel, choose
- the <strong>SDK Platforms</strong> tab. <strong>Android MNC
- Preview</strong> should be listed as <em>Installed</em>. Also, open the
+ the <strong>SDK Platforms</strong> tab. <strong>Android 6.0</strong> should be listed as <em>Installed</em>. Also, open the
<strong>SDK Tools</strong> tab to verify that the latest tools are
installed.
</li>
@@ -116,8 +113,9 @@ App</a> training lesson first.</p>
<h3 id="update">Update an existing project</h3>
<p>
- For existing projects, you must modify the project configuration to enable the preview APIs. In
- your development environment, open the <code>build.gradle</code> file for your module and
+ For existing projects, if you are using Android 6.0 APIs (API level 23) you must
+ modify the project configuration. In your development environment, open the
+ <code>build.gradle</code> file for your module and
set these values as follows:
</p>
diff --git a/docs/html/preview/support.jd b/docs/html/preview/support.jd
index 49d4906f1dad..cfd94671604f 100644
--- a/docs/html/preview/support.jd
+++ b/docs/html/preview/support.jd
@@ -57,7 +57,7 @@ page.image=images/cards/card-support_16-9_2x.png
<div class="col-9of16">
<p>
<em>Date: August 2015<br>
- Build: MPA44G<br>
+ Build: MPA44I<br>
Hardware support: Nexus 5, 6, 9, Player<br>
Emulator support: x86 &amp; ARM 32/64-bit<br>
Google Play services: 7.8</em>
@@ -149,10 +149,21 @@ page.image=images/cards/card-support_16-9_2x.png
<h3 id="changes">
Key changes
</h3>
-
<ul>
+ <li>General
+ <ul>
+ <li>Updated the Fingerprint API to enables better error reporting,
+ better fingerprint enrollment experience, and enumeration support for greater
+ reliability.</li>
+ <li>Modified app access to BLE and Wi-Fi scans to require the location permisssion when they
+ target Android 6.0 (API level 23) or higher. Apps targeting API 22 or earlier can
+ still perform BTLE and WiFi scans, but only when they are in the foreground. While in the background, those apps will get no results from BTLE and WiFi scans.</li>
+ </ul>
+ </li>
<li>Permission changes
<ul>
+ <li>Updated the user interface for permissions and enhanced some of the permissions
+ behaviors.</li>
<li>The {@link android.Manifest.permission#GET_ACCOUNTS} permission is now a member of the
{@link android.Manifest.permission_group#CONTACTS} permission group and it has a
{@code android:protectionLevel} of {@code dangerous}. This change means that when
@@ -180,11 +191,16 @@ page.image=images/cards/card-support_16-9_2x.png
<ul>
<li>General issues:
<ul>
- <li>On LTE devices, including volantis, GPS is not functioning properly, which may
+ <li>On LTE devices, including Nexus 9, GPS is not functioning properly, which may
interfere with navigation services.
</li>
<li>During Hangouts calls, users may experience distorted or low audio on some devices.
</li>
+ <li>The Google Apps Device Policy app bundled with MPA44G is unable to set up an Android for
+Work Profile, so you cannot create a new Work Profile with that version of the app. This issue is
+resolved in the Google Apps Device Policy app bundled with MPA44I. Other apps that provide Android
+for Work functionality remain unaffected on either build.
+ </li>
</ul>
</li>
</ul>
diff --git a/docs/html/reference/gcm_lists.js b/docs/html/reference/gcm_lists.js
new file mode 100644
index 000000000000..2672fab556fc
--- /dev/null
+++ b/docs/html/reference/gcm_lists.js
@@ -0,0 +1,18 @@
+var GCM_DATA = [
+ { id:0, label:"com.google.android.gcm", link:"reference/com/google/android/gcm/package-summary.html", type:"package", deprecated:"false" },
+ { id:1, label:"com.google.android.gcm.GCMBaseIntentService", link:"reference/com/google/android/gcm/GCMBaseIntentService.html", type:"class", deprecated:"true" },
+ { id:2, label:"com.google.android.gcm.GCMBroadcastReceiver", link:"reference/com/google/android/gcm/GCMBroadcastReceiver.html", type:"class", deprecated:"true" },
+ { id:3, label:"com.google.android.gcm.GCMConstants", link:"reference/com/google/android/gcm/GCMConstants.html", type:"class", deprecated:"true" },
+ { id:4, label:"com.google.android.gcm.GCMRegistrar", link:"reference/com/google/android/gcm/GCMRegistrar.html", type:"class", deprecated:"true" },
+ { id:5, label:"com.google.android.gcm.server", link:"reference/com/google/android/gcm/server/package-summary.html", type:"package", deprecated:"false" },
+ { id:6, label:"com.google.android.gcm.server.Constants", link:"reference/com/google/android/gcm/server/Constants.html", type:"class", deprecated:"false" },
+ { id:7, label:"com.google.android.gcm.server.InvalidRequestException", link:"reference/com/google/android/gcm/server/InvalidRequestException.html", type:"class", deprecated:"false" },
+ { id:8, label:"com.google.android.gcm.server.Message", link:"reference/com/google/android/gcm/server/Message.html", type:"class", deprecated:"false" },
+ { id:9, label:"com.google.android.gcm.server.Message.Builder", link:"reference/com/google/android/gcm/server/Message.Builder.html", type:"class", deprecated:"false" },
+ { id:10, label:"com.google.android.gcm.server.MulticastResult", link:"reference/com/google/android/gcm/server/MulticastResult.html", type:"class", deprecated:"false" },
+ { id:11, label:"com.google.android.gcm.server.MulticastResult.Builder", link:"reference/com/google/android/gcm/server/MulticastResult.Builder.html", type:"class", deprecated:"false" },
+ { id:12, label:"com.google.android.gcm.server.Result", link:"reference/com/google/android/gcm/server/Result.html", type:"class", deprecated:"false" },
+ { id:13, label:"com.google.android.gcm.server.Result.Builder", link:"reference/com/google/android/gcm/server/Result.Builder.html", type:"class", deprecated:"false" },
+ { id:14, label:"com.google.android.gcm.server.Sender", link:"reference/com/google/android/gcm/server/Sender.html", type:"class", deprecated:"false" }
+
+ ];
diff --git a/docs/html/reference/gms_lists.js b/docs/html/reference/gms_lists.js
new file mode 100644
index 000000000000..942c8ab7fb61
--- /dev/null
+++ b/docs/html/reference/gms_lists.js
@@ -0,0 +1,889 @@
+var GMS_DATA = [
+ { id:0, label:"com.google.android.gms", link:"reference/com/google/android/gms/package-summary.html", type:"package", deprecated:"false" },
+ { id:1, label:"com.google.android.gms.R", link:"reference/com/google/android/gms/R.html", type:"class", deprecated:"false" },
+ { id:2, label:"com.google.android.gms.R.attr", link:"reference/com/google/android/gms/R.attr.html", type:"class", deprecated:"false" },
+ { id:3, label:"com.google.android.gms.R.color", link:"reference/com/google/android/gms/R.color.html", type:"class", deprecated:"false" },
+ { id:4, label:"com.google.android.gms.R.drawable", link:"reference/com/google/android/gms/R.drawable.html", type:"class", deprecated:"false" },
+ { id:5, label:"com.google.android.gms.R.id", link:"reference/com/google/android/gms/R.id.html", type:"class", deprecated:"false" },
+ { id:6, label:"com.google.android.gms.R.integer", link:"reference/com/google/android/gms/R.integer.html", type:"class", deprecated:"false" },
+ { id:7, label:"com.google.android.gms.R.raw", link:"reference/com/google/android/gms/R.raw.html", type:"class", deprecated:"false" },
+ { id:8, label:"com.google.android.gms.R.string", link:"reference/com/google/android/gms/R.string.html", type:"class", deprecated:"false" },
+ { id:9, label:"com.google.android.gms.R.style", link:"reference/com/google/android/gms/R.style.html", type:"class", deprecated:"false" },
+ { id:10, label:"com.google.android.gms.R.styleable", link:"reference/com/google/android/gms/R.styleable.html", type:"class", deprecated:"false" },
+ { id:11, label:"com.google.android.gms.actions", link:"reference/com/google/android/gms/actions/package-summary.html", type:"package", deprecated:"false" },
+ { id:12, label:"com.google.android.gms.actions.ItemListIntents", link:"reference/com/google/android/gms/actions/ItemListIntents.html", type:"class", deprecated:"false" },
+ { id:13, label:"com.google.android.gms.actions.NoteIntents", link:"reference/com/google/android/gms/actions/NoteIntents.html", type:"class", deprecated:"false" },
+ { id:14, label:"com.google.android.gms.actions.ReserveIntents", link:"reference/com/google/android/gms/actions/ReserveIntents.html", type:"class", deprecated:"false" },
+ { id:15, label:"com.google.android.gms.actions.SearchIntents", link:"reference/com/google/android/gms/actions/SearchIntents.html", type:"class", deprecated:"false" },
+ { id:16, label:"com.google.android.gms.ads", link:"reference/com/google/android/gms/ads/package-summary.html", type:"package", deprecated:"false" },
+ { id:17, label:"com.google.android.gms.ads.AdListener", link:"reference/com/google/android/gms/ads/AdListener.html", type:"class", deprecated:"false" },
+ { id:18, label:"com.google.android.gms.ads.AdLoader", link:"reference/com/google/android/gms/ads/AdLoader.html", type:"class", deprecated:"false" },
+ { id:19, label:"com.google.android.gms.ads.AdLoader.Builder", link:"reference/com/google/android/gms/ads/AdLoader.Builder.html", type:"class", deprecated:"false" },
+ { id:20, label:"com.google.android.gms.ads.AdRequest", link:"reference/com/google/android/gms/ads/AdRequest.html", type:"class", deprecated:"false" },
+ { id:21, label:"com.google.android.gms.ads.AdRequest.Builder", link:"reference/com/google/android/gms/ads/AdRequest.Builder.html", type:"class", deprecated:"false" },
+ { id:22, label:"com.google.android.gms.ads.AdSize", link:"reference/com/google/android/gms/ads/AdSize.html", type:"class", deprecated:"false" },
+ { id:23, label:"com.google.android.gms.ads.AdView", link:"reference/com/google/android/gms/ads/AdView.html", type:"class", deprecated:"false" },
+ { id:24, label:"com.google.android.gms.ads.InterstitialAd", link:"reference/com/google/android/gms/ads/InterstitialAd.html", type:"class", deprecated:"false" },
+ { id:25, label:"com.google.android.gms.ads.MobileAds", link:"reference/com/google/android/gms/ads/MobileAds.html", type:"class", deprecated:"false" },
+ { id:26, label:"com.google.android.gms.ads.MobileAds.Settings", link:"reference/com/google/android/gms/ads/MobileAds.Settings.html", type:"class", deprecated:"false" },
+ { id:27, label:"com.google.android.gms.ads.doubleclick", link:"reference/com/google/android/gms/ads/doubleclick/package-summary.html", type:"package", deprecated:"false" },
+ { id:28, label:"com.google.android.gms.ads.doubleclick.AppEventListener", link:"reference/com/google/android/gms/ads/doubleclick/AppEventListener.html", type:"class", deprecated:"false" },
+ { id:29, label:"com.google.android.gms.ads.doubleclick.CustomRenderedAd", link:"reference/com/google/android/gms/ads/doubleclick/CustomRenderedAd.html", type:"class", deprecated:"false" },
+ { id:30, label:"com.google.android.gms.ads.doubleclick.OnCustomRenderedAdLoadedListener", link:"reference/com/google/android/gms/ads/doubleclick/OnCustomRenderedAdLoadedListener.html", type:"class", deprecated:"false" },
+ { id:31, label:"com.google.android.gms.ads.doubleclick.PublisherAdRequest", link:"reference/com/google/android/gms/ads/doubleclick/PublisherAdRequest.html", type:"class", deprecated:"false" },
+ { id:32, label:"com.google.android.gms.ads.doubleclick.PublisherAdRequest.Builder", link:"reference/com/google/android/gms/ads/doubleclick/PublisherAdRequest.Builder.html", type:"class", deprecated:"false" },
+ { id:33, label:"com.google.android.gms.ads.doubleclick.PublisherAdView", link:"reference/com/google/android/gms/ads/doubleclick/PublisherAdView.html", type:"class", deprecated:"false" },
+ { id:34, label:"com.google.android.gms.ads.doubleclick.PublisherInterstitialAd", link:"reference/com/google/android/gms/ads/doubleclick/PublisherInterstitialAd.html", type:"class", deprecated:"false" },
+ { id:35, label:"com.google.android.gms.ads.formats", link:"reference/com/google/android/gms/ads/formats/package-summary.html", type:"package", deprecated:"false" },
+ { id:36, label:"com.google.android.gms.ads.formats.NativeAd", link:"reference/com/google/android/gms/ads/formats/NativeAd.html", type:"class", deprecated:"false" },
+ { id:37, label:"com.google.android.gms.ads.formats.NativeAd.Image", link:"reference/com/google/android/gms/ads/formats/NativeAd.Image.html", type:"class", deprecated:"false" },
+ { id:38, label:"com.google.android.gms.ads.formats.NativeAdOptions", link:"reference/com/google/android/gms/ads/formats/NativeAdOptions.html", type:"class", deprecated:"false" },
+ { id:39, label:"com.google.android.gms.ads.formats.NativeAdOptions.Builder", link:"reference/com/google/android/gms/ads/formats/NativeAdOptions.Builder.html", type:"class", deprecated:"false" },
+ { id:40, label:"com.google.android.gms.ads.formats.NativeAdView", link:"reference/com/google/android/gms/ads/formats/NativeAdView.html", type:"class", deprecated:"false" },
+ { id:41, label:"com.google.android.gms.ads.formats.NativeAppInstallAd", link:"reference/com/google/android/gms/ads/formats/NativeAppInstallAd.html", type:"class", deprecated:"false" },
+ { id:42, label:"com.google.android.gms.ads.formats.NativeAppInstallAd.OnAppInstallAdLoadedListener", link:"reference/com/google/android/gms/ads/formats/NativeAppInstallAd.OnAppInstallAdLoadedListener.html", type:"class", deprecated:"false" },
+ { id:43, label:"com.google.android.gms.ads.formats.NativeAppInstallAdView", link:"reference/com/google/android/gms/ads/formats/NativeAppInstallAdView.html", type:"class", deprecated:"false" },
+ { id:44, label:"com.google.android.gms.ads.formats.NativeContentAd", link:"reference/com/google/android/gms/ads/formats/NativeContentAd.html", type:"class", deprecated:"false" },
+ { id:45, label:"com.google.android.gms.ads.formats.NativeContentAd.OnContentAdLoadedListener", link:"reference/com/google/android/gms/ads/formats/NativeContentAd.OnContentAdLoadedListener.html", type:"class", deprecated:"false" },
+ { id:46, label:"com.google.android.gms.ads.formats.NativeContentAdView", link:"reference/com/google/android/gms/ads/formats/NativeContentAdView.html", type:"class", deprecated:"false" },
+ { id:47, label:"com.google.android.gms.ads.formats.NativeCustomTemplateAd", link:"reference/com/google/android/gms/ads/formats/NativeCustomTemplateAd.html", type:"class", deprecated:"false" },
+ { id:48, label:"com.google.android.gms.ads.formats.NativeCustomTemplateAd.OnCustomClickListener", link:"reference/com/google/android/gms/ads/formats/NativeCustomTemplateAd.OnCustomClickListener.html", type:"class", deprecated:"false" },
+ { id:49, label:"com.google.android.gms.ads.formats.NativeCustomTemplateAd.OnCustomTemplateAdLoadedListener", link:"reference/com/google/android/gms/ads/formats/NativeCustomTemplateAd.OnCustomTemplateAdLoadedListener.html", type:"class", deprecated:"false" },
+ { id:50, label:"com.google.android.gms.ads.identifier", link:"reference/com/google/android/gms/ads/identifier/package-summary.html", type:"package", deprecated:"false" },
+ { id:51, label:"com.google.android.gms.ads.identifier.AdvertisingIdClient", link:"reference/com/google/android/gms/ads/identifier/AdvertisingIdClient.html", type:"class", deprecated:"false" },
+ { id:52, label:"com.google.android.gms.ads.identifier.AdvertisingIdClient.Info", link:"reference/com/google/android/gms/ads/identifier/AdvertisingIdClient.Info.html", type:"class", deprecated:"false" },
+ { id:53, label:"com.google.android.gms.ads.mediation", link:"reference/com/google/android/gms/ads/mediation/package-summary.html", type:"package", deprecated:"false" },
+ { id:54, label:"com.google.android.gms.ads.mediation.MediationAdRequest", link:"reference/com/google/android/gms/ads/mediation/MediationAdRequest.html", type:"class", deprecated:"false" },
+ { id:55, label:"com.google.android.gms.ads.mediation.MediationAdapter", link:"reference/com/google/android/gms/ads/mediation/MediationAdapter.html", type:"class", deprecated:"false" },
+ { id:56, label:"com.google.android.gms.ads.mediation.MediationBannerAdapter", link:"reference/com/google/android/gms/ads/mediation/MediationBannerAdapter.html", type:"class", deprecated:"false" },
+ { id:57, label:"com.google.android.gms.ads.mediation.MediationBannerListener", link:"reference/com/google/android/gms/ads/mediation/MediationBannerListener.html", type:"class", deprecated:"false" },
+ { id:58, label:"com.google.android.gms.ads.mediation.MediationInterstitialAdapter", link:"reference/com/google/android/gms/ads/mediation/MediationInterstitialAdapter.html", type:"class", deprecated:"false" },
+ { id:59, label:"com.google.android.gms.ads.mediation.MediationInterstitialListener", link:"reference/com/google/android/gms/ads/mediation/MediationInterstitialListener.html", type:"class", deprecated:"false" },
+ { id:60, label:"com.google.android.gms.ads.mediation.NativeAdMapper", link:"reference/com/google/android/gms/ads/mediation/NativeAdMapper.html", type:"class", deprecated:"false" },
+ { id:61, label:"com.google.android.gms.ads.mediation.NativeAppInstallAdMapper", link:"reference/com/google/android/gms/ads/mediation/NativeAppInstallAdMapper.html", type:"class", deprecated:"false" },
+ { id:62, label:"com.google.android.gms.ads.mediation.NativeContentAdMapper", link:"reference/com/google/android/gms/ads/mediation/NativeContentAdMapper.html", type:"class", deprecated:"false" },
+ { id:63, label:"com.google.android.gms.ads.mediation.NativeMediationAdRequest", link:"reference/com/google/android/gms/ads/mediation/NativeMediationAdRequest.html", type:"class", deprecated:"false" },
+ { id:64, label:"com.google.android.gms.ads.mediation.NetworkExtras", link:"reference/com/google/android/gms/ads/mediation/NetworkExtras.html", type:"class", deprecated:"true" },
+ { id:65, label:"com.google.android.gms.ads.mediation.admob", link:"reference/com/google/android/gms/ads/mediation/admob/package-summary.html", type:"package", deprecated:"false" },
+ { id:66, label:"com.google.android.gms.ads.mediation.admob.AdMobExtras", link:"reference/com/google/android/gms/ads/mediation/admob/AdMobExtras.html", type:"class", deprecated:"true" },
+ { id:67, label:"com.google.android.gms.ads.mediation.customevent", link:"reference/com/google/android/gms/ads/mediation/customevent/package-summary.html", type:"package", deprecated:"false" },
+ { id:68, label:"com.google.android.gms.ads.mediation.customevent.CustomEvent", link:"reference/com/google/android/gms/ads/mediation/customevent/CustomEvent.html", type:"class", deprecated:"false" },
+ { id:69, label:"com.google.android.gms.ads.mediation.customevent.CustomEventBanner", link:"reference/com/google/android/gms/ads/mediation/customevent/CustomEventBanner.html", type:"class", deprecated:"false" },
+ { id:70, label:"com.google.android.gms.ads.mediation.customevent.CustomEventBannerListener", link:"reference/com/google/android/gms/ads/mediation/customevent/CustomEventBannerListener.html", type:"class", deprecated:"false" },
+ { id:71, label:"com.google.android.gms.ads.mediation.customevent.CustomEventExtras", link:"reference/com/google/android/gms/ads/mediation/customevent/CustomEventExtras.html", type:"class", deprecated:"true" },
+ { id:72, label:"com.google.android.gms.ads.mediation.customevent.CustomEventInterstitial", link:"reference/com/google/android/gms/ads/mediation/customevent/CustomEventInterstitial.html", type:"class", deprecated:"false" },
+ { id:73, label:"com.google.android.gms.ads.mediation.customevent.CustomEventInterstitialListener", link:"reference/com/google/android/gms/ads/mediation/customevent/CustomEventInterstitialListener.html", type:"class", deprecated:"false" },
+ { id:74, label:"com.google.android.gms.ads.mediation.customevent.CustomEventListener", link:"reference/com/google/android/gms/ads/mediation/customevent/CustomEventListener.html", type:"class", deprecated:"false" },
+ { id:75, label:"com.google.android.gms.ads.mediation.customevent.CustomEventNative", link:"reference/com/google/android/gms/ads/mediation/customevent/CustomEventNative.html", type:"class", deprecated:"false" },
+ { id:76, label:"com.google.android.gms.ads.mediation.customevent.CustomEventNativeListener", link:"reference/com/google/android/gms/ads/mediation/customevent/CustomEventNativeListener.html", type:"class", deprecated:"false" },
+ { id:77, label:"com.google.android.gms.ads.purchase", link:"reference/com/google/android/gms/ads/purchase/package-summary.html", type:"package", deprecated:"false" },
+ { id:78, label:"com.google.android.gms.ads.purchase.InAppPurchase", link:"reference/com/google/android/gms/ads/purchase/InAppPurchase.html", type:"class", deprecated:"false" },
+ { id:79, label:"com.google.android.gms.ads.purchase.InAppPurchaseListener", link:"reference/com/google/android/gms/ads/purchase/InAppPurchaseListener.html", type:"class", deprecated:"false" },
+ { id:80, label:"com.google.android.gms.ads.purchase.InAppPurchaseResult", link:"reference/com/google/android/gms/ads/purchase/InAppPurchaseResult.html", type:"class", deprecated:"false" },
+ { id:81, label:"com.google.android.gms.ads.purchase.PlayStorePurchaseListener", link:"reference/com/google/android/gms/ads/purchase/PlayStorePurchaseListener.html", type:"class", deprecated:"false" },
+ { id:82, label:"com.google.android.gms.ads.reward", link:"reference/com/google/android/gms/ads/reward/package-summary.html", type:"package", deprecated:"false" },
+ { id:83, label:"com.google.android.gms.ads.reward.RewardItem", link:"reference/com/google/android/gms/ads/reward/RewardItem.html", type:"class", deprecated:"false" },
+ { id:84, label:"com.google.android.gms.ads.reward.RewardedVideoAd", link:"reference/com/google/android/gms/ads/reward/RewardedVideoAd.html", type:"class", deprecated:"false" },
+ { id:85, label:"com.google.android.gms.ads.reward.RewardedVideoAdListener", link:"reference/com/google/android/gms/ads/reward/RewardedVideoAdListener.html", type:"class", deprecated:"false" },
+ { id:86, label:"com.google.android.gms.ads.reward.mediation", link:"reference/com/google/android/gms/ads/reward/mediation/package-summary.html", type:"package", deprecated:"false" },
+ { id:87, label:"com.google.android.gms.ads.reward.mediation.MediationRewardedVideoAdAdapter", link:"reference/com/google/android/gms/ads/reward/mediation/MediationRewardedVideoAdAdapter.html", type:"class", deprecated:"false" },
+ { id:88, label:"com.google.android.gms.ads.reward.mediation.MediationRewardedVideoAdListener", link:"reference/com/google/android/gms/ads/reward/mediation/MediationRewardedVideoAdListener.html", type:"class", deprecated:"false" },
+ { id:89, label:"com.google.android.gms.ads.search", link:"reference/com/google/android/gms/ads/search/package-summary.html", type:"package", deprecated:"false" },
+ { id:90, label:"com.google.android.gms.ads.search.SearchAdRequest", link:"reference/com/google/android/gms/ads/search/SearchAdRequest.html", type:"class", deprecated:"false" },
+ { id:91, label:"com.google.android.gms.ads.search.SearchAdRequest.Builder", link:"reference/com/google/android/gms/ads/search/SearchAdRequest.Builder.html", type:"class", deprecated:"false" },
+ { id:92, label:"com.google.android.gms.ads.search.SearchAdView", link:"reference/com/google/android/gms/ads/search/SearchAdView.html", type:"class", deprecated:"false" },
+ { id:93, label:"com.google.android.gms.analytics", link:"reference/com/google/android/gms/analytics/package-summary.html", type:"package", deprecated:"false" },
+ { id:94, label:"com.google.android.gms.analytics.AnalyticsReceiver", link:"reference/com/google/android/gms/analytics/AnalyticsReceiver.html", type:"class", deprecated:"false" },
+ { id:95, label:"com.google.android.gms.analytics.AnalyticsService", link:"reference/com/google/android/gms/analytics/AnalyticsService.html", type:"class", deprecated:"false" },
+ { id:96, label:"com.google.android.gms.analytics.CampaignTrackingReceiver", link:"reference/com/google/android/gms/analytics/CampaignTrackingReceiver.html", type:"class", deprecated:"false" },
+ { id:97, label:"com.google.android.gms.analytics.CampaignTrackingService", link:"reference/com/google/android/gms/analytics/CampaignTrackingService.html", type:"class", deprecated:"false" },
+ { id:98, label:"com.google.android.gms.analytics.ExceptionParser", link:"reference/com/google/android/gms/analytics/ExceptionParser.html", type:"class", deprecated:"false" },
+ { id:99, label:"com.google.android.gms.analytics.ExceptionReporter", link:"reference/com/google/android/gms/analytics/ExceptionReporter.html", type:"class", deprecated:"false" },
+ { id:100, label:"com.google.android.gms.analytics.GoogleAnalytics", link:"reference/com/google/android/gms/analytics/GoogleAnalytics.html", type:"class", deprecated:"false" },
+ { id:101, label:"com.google.android.gms.analytics.HitBuilders", link:"reference/com/google/android/gms/analytics/HitBuilders.html", type:"class", deprecated:"false" },
+ { id:102, label:"com.google.android.gms.analytics.HitBuilders.AppViewBuilder", link:"reference/com/google/android/gms/analytics/HitBuilders.AppViewBuilder.html", type:"class", deprecated:"true" },
+ { id:103, label:"com.google.android.gms.analytics.HitBuilders.EventBuilder", link:"reference/com/google/android/gms/analytics/HitBuilders.EventBuilder.html", type:"class", deprecated:"false" },
+ { id:104, label:"com.google.android.gms.analytics.HitBuilders.ExceptionBuilder", link:"reference/com/google/android/gms/analytics/HitBuilders.ExceptionBuilder.html", type:"class", deprecated:"false" },
+ { id:105, label:"com.google.android.gms.analytics.HitBuilders.HitBuilder", link:"reference/com/google/android/gms/analytics/HitBuilders.HitBuilder.html", type:"class", deprecated:"false" },
+ { id:106, label:"com.google.android.gms.analytics.HitBuilders.ItemBuilder", link:"reference/com/google/android/gms/analytics/HitBuilders.ItemBuilder.html", type:"class", deprecated:"true" },
+ { id:107, label:"com.google.android.gms.analytics.HitBuilders.ScreenViewBuilder", link:"reference/com/google/android/gms/analytics/HitBuilders.ScreenViewBuilder.html", type:"class", deprecated:"false" },
+ { id:108, label:"com.google.android.gms.analytics.HitBuilders.SocialBuilder", link:"reference/com/google/android/gms/analytics/HitBuilders.SocialBuilder.html", type:"class", deprecated:"false" },
+ { id:109, label:"com.google.android.gms.analytics.HitBuilders.TimingBuilder", link:"reference/com/google/android/gms/analytics/HitBuilders.TimingBuilder.html", type:"class", deprecated:"false" },
+ { id:110, label:"com.google.android.gms.analytics.HitBuilders.TransactionBuilder", link:"reference/com/google/android/gms/analytics/HitBuilders.TransactionBuilder.html", type:"class", deprecated:"true" },
+ { id:111, label:"com.google.android.gms.analytics.Logger", link:"reference/com/google/android/gms/analytics/Logger.html", type:"class", deprecated:"true" },
+ { id:112, label:"com.google.android.gms.analytics.Logger.LogLevel", link:"reference/com/google/android/gms/analytics/Logger.LogLevel.html", type:"class", deprecated:"true" },
+ { id:113, label:"com.google.android.gms.analytics.StandardExceptionParser", link:"reference/com/google/android/gms/analytics/StandardExceptionParser.html", type:"class", deprecated:"false" },
+ { id:114, label:"com.google.android.gms.analytics.Tracker", link:"reference/com/google/android/gms/analytics/Tracker.html", type:"class", deprecated:"false" },
+ { id:115, label:"com.google.android.gms.analytics.ecommerce", link:"reference/com/google/android/gms/analytics/ecommerce/package-summary.html", type:"package", deprecated:"false" },
+ { id:116, label:"com.google.android.gms.analytics.ecommerce.Product", link:"reference/com/google/android/gms/analytics/ecommerce/Product.html", type:"class", deprecated:"false" },
+ { id:117, label:"com.google.android.gms.analytics.ecommerce.ProductAction", link:"reference/com/google/android/gms/analytics/ecommerce/ProductAction.html", type:"class", deprecated:"false" },
+ { id:118, label:"com.google.android.gms.analytics.ecommerce.Promotion", link:"reference/com/google/android/gms/analytics/ecommerce/Promotion.html", type:"class", deprecated:"false" },
+ { id:119, label:"com.google.android.gms.appindexing", link:"reference/com/google/android/gms/appindexing/package-summary.html", type:"package", deprecated:"false" },
+ { id:120, label:"com.google.android.gms.appindexing.Action", link:"reference/com/google/android/gms/appindexing/Action.html", type:"class", deprecated:"false" },
+ { id:121, label:"com.google.android.gms.appindexing.Action.Builder", link:"reference/com/google/android/gms/appindexing/Action.Builder.html", type:"class", deprecated:"false" },
+ { id:122, label:"com.google.android.gms.appindexing.AndroidAppUri", link:"reference/com/google/android/gms/appindexing/AndroidAppUri.html", type:"class", deprecated:"false" },
+ { id:123, label:"com.google.android.gms.appindexing.AppIndex", link:"reference/com/google/android/gms/appindexing/AppIndex.html", type:"class", deprecated:"false" },
+ { id:124, label:"com.google.android.gms.appindexing.AppIndexApi", link:"reference/com/google/android/gms/appindexing/AppIndexApi.html", type:"class", deprecated:"false" },
+ { id:125, label:"com.google.android.gms.appindexing.AppIndexApi.ActionResult", link:"reference/com/google/android/gms/appindexing/AppIndexApi.ActionResult.html", type:"class", deprecated:"true" },
+ { id:126, label:"com.google.android.gms.appindexing.AppIndexApi.AppIndexingLink", link:"reference/com/google/android/gms/appindexing/AppIndexApi.AppIndexingLink.html", type:"class", deprecated:"true" },
+ { id:127, label:"com.google.android.gms.appindexing.Thing", link:"reference/com/google/android/gms/appindexing/Thing.html", type:"class", deprecated:"false" },
+ { id:128, label:"com.google.android.gms.appindexing.Thing.Builder", link:"reference/com/google/android/gms/appindexing/Thing.Builder.html", type:"class", deprecated:"false" },
+ { id:129, label:"com.google.android.gms.appinvite", link:"reference/com/google/android/gms/appinvite/package-summary.html", type:"package", deprecated:"false" },
+ { id:130, label:"com.google.android.gms.appinvite.AppInvite", link:"reference/com/google/android/gms/appinvite/AppInvite.html", type:"class", deprecated:"false" },
+ { id:131, label:"com.google.android.gms.appinvite.AppInviteApi", link:"reference/com/google/android/gms/appinvite/AppInviteApi.html", type:"class", deprecated:"false" },
+ { id:132, label:"com.google.android.gms.appinvite.AppInviteInvitation", link:"reference/com/google/android/gms/appinvite/AppInviteInvitation.html", type:"class", deprecated:"false" },
+ { id:133, label:"com.google.android.gms.appinvite.AppInviteInvitation.IntentBuilder", link:"reference/com/google/android/gms/appinvite/AppInviteInvitation.IntentBuilder.html", type:"class", deprecated:"false" },
+ { id:134, label:"com.google.android.gms.appinvite.AppInviteReferral", link:"reference/com/google/android/gms/appinvite/AppInviteReferral.html", type:"class", deprecated:"false" },
+ { id:135, label:"com.google.android.gms.appstate", link:"reference/com/google/android/gms/appstate/package-summary.html", type:"package", deprecated:"false" },
+ { id:136, label:"com.google.android.gms.appstate.AppState", link:"reference/com/google/android/gms/appstate/AppState.html", type:"class", deprecated:"true" },
+ { id:137, label:"com.google.android.gms.appstate.AppStateBuffer", link:"reference/com/google/android/gms/appstate/AppStateBuffer.html", type:"class", deprecated:"false" },
+ { id:138, label:"com.google.android.gms.appstate.AppStateManager", link:"reference/com/google/android/gms/appstate/AppStateManager.html", type:"class", deprecated:"true" },
+ { id:139, label:"com.google.android.gms.appstate.AppStateManager.StateConflictResult", link:"reference/com/google/android/gms/appstate/AppStateManager.StateConflictResult.html", type:"class", deprecated:"false" },
+ { id:140, label:"com.google.android.gms.appstate.AppStateManager.StateDeletedResult", link:"reference/com/google/android/gms/appstate/AppStateManager.StateDeletedResult.html", type:"class", deprecated:"false" },
+ { id:141, label:"com.google.android.gms.appstate.AppStateManager.StateListResult", link:"reference/com/google/android/gms/appstate/AppStateManager.StateListResult.html", type:"class", deprecated:"false" },
+ { id:142, label:"com.google.android.gms.appstate.AppStateManager.StateLoadedResult", link:"reference/com/google/android/gms/appstate/AppStateManager.StateLoadedResult.html", type:"class", deprecated:"false" },
+ { id:143, label:"com.google.android.gms.appstate.AppStateManager.StateResult", link:"reference/com/google/android/gms/appstate/AppStateManager.StateResult.html", type:"class", deprecated:"false" },
+ { id:144, label:"com.google.android.gms.appstate.AppStateStatusCodes", link:"reference/com/google/android/gms/appstate/AppStateStatusCodes.html", type:"class", deprecated:"false" },
+ { id:145, label:"com.google.android.gms.auth", link:"reference/com/google/android/gms/auth/package-summary.html", type:"package", deprecated:"false" },
+ { id:146, label:"com.google.android.gms.auth.AccountChangeEvent", link:"reference/com/google/android/gms/auth/AccountChangeEvent.html", type:"class", deprecated:"false" },
+ { id:147, label:"com.google.android.gms.auth.AccountChangeEventsRequest", link:"reference/com/google/android/gms/auth/AccountChangeEventsRequest.html", type:"class", deprecated:"false" },
+ { id:148, label:"com.google.android.gms.auth.AccountChangeEventsResponse", link:"reference/com/google/android/gms/auth/AccountChangeEventsResponse.html", type:"class", deprecated:"false" },
+ { id:149, label:"com.google.android.gms.auth.GoogleAuthException", link:"reference/com/google/android/gms/auth/GoogleAuthException.html", type:"class", deprecated:"false" },
+ { id:150, label:"com.google.android.gms.auth.GoogleAuthUtil", link:"reference/com/google/android/gms/auth/GoogleAuthUtil.html", type:"class", deprecated:"false" },
+ { id:151, label:"com.google.android.gms.auth.GooglePlayServicesAvailabilityException", link:"reference/com/google/android/gms/auth/GooglePlayServicesAvailabilityException.html", type:"class", deprecated:"false" },
+ { id:152, label:"com.google.android.gms.auth.UserRecoverableAuthException", link:"reference/com/google/android/gms/auth/UserRecoverableAuthException.html", type:"class", deprecated:"false" },
+ { id:153, label:"com.google.android.gms.auth.UserRecoverableNotifiedException", link:"reference/com/google/android/gms/auth/UserRecoverableNotifiedException.html", type:"class", deprecated:"false" },
+ { id:154, label:"com.google.android.gms.auth.api", link:"reference/com/google/android/gms/auth/api/package-summary.html", type:"package", deprecated:"false" },
+ { id:155, label:"com.google.android.gms.auth.api.Auth", link:"reference/com/google/android/gms/auth/api/Auth.html", type:"class", deprecated:"false" },
+ { id:156, label:"com.google.android.gms.auth.api.Auth.AuthCredentialsOptions", link:"reference/com/google/android/gms/auth/api/Auth.AuthCredentialsOptions.html", type:"class", deprecated:"false" },
+ { id:157, label:"com.google.android.gms.auth.api.Auth.AuthCredentialsOptions.Builder", link:"reference/com/google/android/gms/auth/api/Auth.AuthCredentialsOptions.Builder.html", type:"class", deprecated:"false" },
+ { id:158, label:"com.google.android.gms.auth.api.credentials", link:"reference/com/google/android/gms/auth/api/credentials/package-summary.html", type:"package", deprecated:"false" },
+ { id:159, label:"com.google.android.gms.auth.api.credentials.Credential", link:"reference/com/google/android/gms/auth/api/credentials/Credential.html", type:"class", deprecated:"false" },
+ { id:160, label:"com.google.android.gms.auth.api.credentials.Credential.Builder", link:"reference/com/google/android/gms/auth/api/credentials/Credential.Builder.html", type:"class", deprecated:"false" },
+ { id:161, label:"com.google.android.gms.auth.api.credentials.CredentialPickerConfig", link:"reference/com/google/android/gms/auth/api/credentials/CredentialPickerConfig.html", type:"class", deprecated:"false" },
+ { id:162, label:"com.google.android.gms.auth.api.credentials.CredentialPickerConfig.Builder", link:"reference/com/google/android/gms/auth/api/credentials/CredentialPickerConfig.Builder.html", type:"class", deprecated:"false" },
+ { id:163, label:"com.google.android.gms.auth.api.credentials.CredentialRequest", link:"reference/com/google/android/gms/auth/api/credentials/CredentialRequest.html", type:"class", deprecated:"false" },
+ { id:164, label:"com.google.android.gms.auth.api.credentials.CredentialRequest.Builder", link:"reference/com/google/android/gms/auth/api/credentials/CredentialRequest.Builder.html", type:"class", deprecated:"false" },
+ { id:165, label:"com.google.android.gms.auth.api.credentials.CredentialRequestResult", link:"reference/com/google/android/gms/auth/api/credentials/CredentialRequestResult.html", type:"class", deprecated:"false" },
+ { id:166, label:"com.google.android.gms.auth.api.credentials.CredentialsApi", link:"reference/com/google/android/gms/auth/api/credentials/CredentialsApi.html", type:"class", deprecated:"false" },
+ { id:167, label:"com.google.android.gms.auth.api.credentials.IdentityProviders", link:"reference/com/google/android/gms/auth/api/credentials/IdentityProviders.html", type:"class", deprecated:"false" },
+ { id:168, label:"com.google.android.gms.cast", link:"reference/com/google/android/gms/cast/package-summary.html", type:"package", deprecated:"false" },
+ { id:169, label:"com.google.android.gms.cast.ApplicationMetadata", link:"reference/com/google/android/gms/cast/ApplicationMetadata.html", type:"class", deprecated:"false" },
+ { id:170, label:"com.google.android.gms.cast.Cast", link:"reference/com/google/android/gms/cast/Cast.html", type:"class", deprecated:"false" },
+ { id:171, label:"com.google.android.gms.cast.Cast.ApplicationConnectionResult", link:"reference/com/google/android/gms/cast/Cast.ApplicationConnectionResult.html", type:"class", deprecated:"false" },
+ { id:172, label:"com.google.android.gms.cast.Cast.CastApi", link:"reference/com/google/android/gms/cast/Cast.CastApi.html", type:"class", deprecated:"false" },
+ { id:173, label:"com.google.android.gms.cast.Cast.CastOptions", link:"reference/com/google/android/gms/cast/Cast.CastOptions.html", type:"class", deprecated:"false" },
+ { id:174, label:"com.google.android.gms.cast.Cast.CastOptions.Builder", link:"reference/com/google/android/gms/cast/Cast.CastOptions.Builder.html", type:"class", deprecated:"false" },
+ { id:175, label:"com.google.android.gms.cast.Cast.Listener", link:"reference/com/google/android/gms/cast/Cast.Listener.html", type:"class", deprecated:"false" },
+ { id:176, label:"com.google.android.gms.cast.Cast.MessageReceivedCallback", link:"reference/com/google/android/gms/cast/Cast.MessageReceivedCallback.html", type:"class", deprecated:"false" },
+ { id:177, label:"com.google.android.gms.cast.CastDevice", link:"reference/com/google/android/gms/cast/CastDevice.html", type:"class", deprecated:"false" },
+ { id:178, label:"com.google.android.gms.cast.CastMediaControlIntent", link:"reference/com/google/android/gms/cast/CastMediaControlIntent.html", type:"class", deprecated:"false" },
+ { id:179, label:"com.google.android.gms.cast.CastPresentation", link:"reference/com/google/android/gms/cast/CastPresentation.html", type:"class", deprecated:"false" },
+ { id:180, label:"com.google.android.gms.cast.CastRemoteDisplay", link:"reference/com/google/android/gms/cast/CastRemoteDisplay.html", type:"class", deprecated:"false" },
+ { id:181, label:"com.google.android.gms.cast.CastRemoteDisplay.CastRemoteDisplayOptions", link:"reference/com/google/android/gms/cast/CastRemoteDisplay.CastRemoteDisplayOptions.html", type:"class", deprecated:"false" },
+ { id:182, label:"com.google.android.gms.cast.CastRemoteDisplay.CastRemoteDisplayOptions.Builder", link:"reference/com/google/android/gms/cast/CastRemoteDisplay.CastRemoteDisplayOptions.Builder.html", type:"class", deprecated:"false" },
+ { id:183, label:"com.google.android.gms.cast.CastRemoteDisplay.CastRemoteDisplaySessionCallbacks", link:"reference/com/google/android/gms/cast/CastRemoteDisplay.CastRemoteDisplaySessionCallbacks.html", type:"class", deprecated:"false" },
+ { id:184, label:"com.google.android.gms.cast.CastRemoteDisplay.CastRemoteDisplaySessionResult", link:"reference/com/google/android/gms/cast/CastRemoteDisplay.CastRemoteDisplaySessionResult.html", type:"class", deprecated:"false" },
+ { id:185, label:"com.google.android.gms.cast.CastRemoteDisplayApi", link:"reference/com/google/android/gms/cast/CastRemoteDisplayApi.html", type:"class", deprecated:"false" },
+ { id:186, label:"com.google.android.gms.cast.CastRemoteDisplayLocalService", link:"reference/com/google/android/gms/cast/CastRemoteDisplayLocalService.html", type:"class", deprecated:"false" },
+ { id:187, label:"com.google.android.gms.cast.CastRemoteDisplayLocalService.Callbacks", link:"reference/com/google/android/gms/cast/CastRemoteDisplayLocalService.Callbacks.html", type:"class", deprecated:"false" },
+ { id:188, label:"com.google.android.gms.cast.CastRemoteDisplayLocalService.NotificationSettings", link:"reference/com/google/android/gms/cast/CastRemoteDisplayLocalService.NotificationSettings.html", type:"class", deprecated:"false" },
+ { id:189, label:"com.google.android.gms.cast.CastRemoteDisplayLocalService.NotificationSettings.Builder", link:"reference/com/google/android/gms/cast/CastRemoteDisplayLocalService.NotificationSettings.Builder.html", type:"class", deprecated:"false" },
+ { id:190, label:"com.google.android.gms.cast.CastStatusCodes", link:"reference/com/google/android/gms/cast/CastStatusCodes.html", type:"class", deprecated:"false" },
+ { id:191, label:"com.google.android.gms.cast.LaunchOptions", link:"reference/com/google/android/gms/cast/LaunchOptions.html", type:"class", deprecated:"false" },
+ { id:192, label:"com.google.android.gms.cast.LaunchOptions.Builder", link:"reference/com/google/android/gms/cast/LaunchOptions.Builder.html", type:"class", deprecated:"false" },
+ { id:193, label:"com.google.android.gms.cast.MediaInfo", link:"reference/com/google/android/gms/cast/MediaInfo.html", type:"class", deprecated:"false" },
+ { id:194, label:"com.google.android.gms.cast.MediaInfo.Builder", link:"reference/com/google/android/gms/cast/MediaInfo.Builder.html", type:"class", deprecated:"false" },
+ { id:195, label:"com.google.android.gms.cast.MediaMetadata", link:"reference/com/google/android/gms/cast/MediaMetadata.html", type:"class", deprecated:"false" },
+ { id:196, label:"com.google.android.gms.cast.MediaQueueItem", link:"reference/com/google/android/gms/cast/MediaQueueItem.html", type:"class", deprecated:"false" },
+ { id:197, label:"com.google.android.gms.cast.MediaQueueItem.Builder", link:"reference/com/google/android/gms/cast/MediaQueueItem.Builder.html", type:"class", deprecated:"false" },
+ { id:198, label:"com.google.android.gms.cast.MediaStatus", link:"reference/com/google/android/gms/cast/MediaStatus.html", type:"class", deprecated:"false" },
+ { id:199, label:"com.google.android.gms.cast.MediaTrack", link:"reference/com/google/android/gms/cast/MediaTrack.html", type:"class", deprecated:"false" },
+ { id:200, label:"com.google.android.gms.cast.MediaTrack.Builder", link:"reference/com/google/android/gms/cast/MediaTrack.Builder.html", type:"class", deprecated:"false" },
+ { id:201, label:"com.google.android.gms.cast.RemoteMediaPlayer", link:"reference/com/google/android/gms/cast/RemoteMediaPlayer.html", type:"class", deprecated:"false" },
+ { id:202, label:"com.google.android.gms.cast.RemoteMediaPlayer.MediaChannelResult", link:"reference/com/google/android/gms/cast/RemoteMediaPlayer.MediaChannelResult.html", type:"class", deprecated:"false" },
+ { id:203, label:"com.google.android.gms.cast.RemoteMediaPlayer.OnMetadataUpdatedListener", link:"reference/com/google/android/gms/cast/RemoteMediaPlayer.OnMetadataUpdatedListener.html", type:"class", deprecated:"false" },
+ { id:204, label:"com.google.android.gms.cast.RemoteMediaPlayer.OnPreloadStatusUpdatedListener", link:"reference/com/google/android/gms/cast/RemoteMediaPlayer.OnPreloadStatusUpdatedListener.html", type:"class", deprecated:"false" },
+ { id:205, label:"com.google.android.gms.cast.RemoteMediaPlayer.OnQueueStatusUpdatedListener", link:"reference/com/google/android/gms/cast/RemoteMediaPlayer.OnQueueStatusUpdatedListener.html", type:"class", deprecated:"false" },
+ { id:206, label:"com.google.android.gms.cast.RemoteMediaPlayer.OnStatusUpdatedListener", link:"reference/com/google/android/gms/cast/RemoteMediaPlayer.OnStatusUpdatedListener.html", type:"class", deprecated:"false" },
+ { id:207, label:"com.google.android.gms.cast.TextTrackStyle", link:"reference/com/google/android/gms/cast/TextTrackStyle.html", type:"class", deprecated:"false" },
+ { id:208, label:"com.google.android.gms.cast.games", link:"reference/com/google/android/gms/cast/games/package-summary.html", type:"package", deprecated:"false" },
+ { id:209, label:"com.google.android.gms.cast.games.GameManagerClient", link:"reference/com/google/android/gms/cast/games/GameManagerClient.html", type:"class", deprecated:"false" },
+ { id:210, label:"com.google.android.gms.cast.games.GameManagerClient.GameManagerInstanceResult", link:"reference/com/google/android/gms/cast/games/GameManagerClient.GameManagerInstanceResult.html", type:"class", deprecated:"false" },
+ { id:211, label:"com.google.android.gms.cast.games.GameManagerClient.GameManagerResult", link:"reference/com/google/android/gms/cast/games/GameManagerClient.GameManagerResult.html", type:"class", deprecated:"false" },
+ { id:212, label:"com.google.android.gms.cast.games.GameManagerClient.Listener", link:"reference/com/google/android/gms/cast/games/GameManagerClient.Listener.html", type:"class", deprecated:"false" },
+ { id:213, label:"com.google.android.gms.cast.games.GameManagerState", link:"reference/com/google/android/gms/cast/games/GameManagerState.html", type:"class", deprecated:"false" },
+ { id:214, label:"com.google.android.gms.cast.games.PlayerInfo", link:"reference/com/google/android/gms/cast/games/PlayerInfo.html", type:"class", deprecated:"false" },
+ { id:215, label:"com.google.android.gms.common", link:"reference/com/google/android/gms/common/package-summary.html", type:"package", deprecated:"false" },
+ { id:216, label:"com.google.android.gms.common.AccountPicker", link:"reference/com/google/android/gms/common/AccountPicker.html", type:"class", deprecated:"false" },
+ { id:217, label:"com.google.android.gms.common.ConnectionResult", link:"reference/com/google/android/gms/common/ConnectionResult.html", type:"class", deprecated:"false" },
+ { id:218, label:"com.google.android.gms.common.ErrorDialogFragment", link:"reference/com/google/android/gms/common/ErrorDialogFragment.html", type:"class", deprecated:"false" },
+ { id:219, label:"com.google.android.gms.common.GoogleApiAvailability", link:"reference/com/google/android/gms/common/GoogleApiAvailability.html", type:"class", deprecated:"false" },
+ { id:220, label:"com.google.android.gms.common.GooglePlayServicesNotAvailableException", link:"reference/com/google/android/gms/common/GooglePlayServicesNotAvailableException.html", type:"class", deprecated:"false" },
+ { id:221, label:"com.google.android.gms.common.GooglePlayServicesRepairableException", link:"reference/com/google/android/gms/common/GooglePlayServicesRepairableException.html", type:"class", deprecated:"false" },
+ { id:222, label:"com.google.android.gms.common.GooglePlayServicesUtil", link:"reference/com/google/android/gms/common/GooglePlayServicesUtil.html", type:"class", deprecated:"false" },
+ { id:223, label:"com.google.android.gms.common.Scopes", link:"reference/com/google/android/gms/common/Scopes.html", type:"class", deprecated:"false" },
+ { id:224, label:"com.google.android.gms.common.SignInButton", link:"reference/com/google/android/gms/common/SignInButton.html", type:"class", deprecated:"false" },
+ { id:225, label:"com.google.android.gms.common.SupportErrorDialogFragment", link:"reference/com/google/android/gms/common/SupportErrorDialogFragment.html", type:"class", deprecated:"false" },
+ { id:226, label:"com.google.android.gms.common.UserRecoverableException", link:"reference/com/google/android/gms/common/UserRecoverableException.html", type:"class", deprecated:"false" },
+ { id:227, label:"com.google.android.gms.common.annotation", link:"reference/com/google/android/gms/common/annotation/package-summary.html", type:"package", deprecated:"false" },
+ { id:228, label:"com.google.android.gms.common.annotation.KeepName", link:"reference/com/google/android/gms/common/annotation/KeepName.html", type:"class", deprecated:"false" },
+ { id:229, label:"com.google.android.gms.common.api", link:"reference/com/google/android/gms/common/api/package-summary.html", type:"package", deprecated:"false" },
+ { id:230, label:"com.google.android.gms.common.api.Api", link:"reference/com/google/android/gms/common/api/Api.html", type:"class", deprecated:"false" },
+ { id:231, label:"com.google.android.gms.common.api.Api.ApiOptions", link:"reference/com/google/android/gms/common/api/Api.ApiOptions.html", type:"class", deprecated:"false" },
+ { id:232, label:"com.google.android.gms.common.api.Api.ApiOptions.HasOptions", link:"reference/com/google/android/gms/common/api/Api.ApiOptions.HasOptions.html", type:"class", deprecated:"false" },
+ { id:233, label:"com.google.android.gms.common.api.Api.ApiOptions.NoOptions", link:"reference/com/google/android/gms/common/api/Api.ApiOptions.NoOptions.html", type:"class", deprecated:"false" },
+ { id:234, label:"com.google.android.gms.common.api.Api.ApiOptions.NotRequiredOptions", link:"reference/com/google/android/gms/common/api/Api.ApiOptions.NotRequiredOptions.html", type:"class", deprecated:"false" },
+ { id:235, label:"com.google.android.gms.common.api.Api.ApiOptions.Optional", link:"reference/com/google/android/gms/common/api/Api.ApiOptions.Optional.html", type:"class", deprecated:"false" },
+ { id:236, label:"com.google.android.gms.common.api.Batch", link:"reference/com/google/android/gms/common/api/Batch.html", type:"class", deprecated:"false" },
+ { id:237, label:"com.google.android.gms.common.api.Batch.Builder", link:"reference/com/google/android/gms/common/api/Batch.Builder.html", type:"class", deprecated:"false" },
+ { id:238, label:"com.google.android.gms.common.api.BatchResult", link:"reference/com/google/android/gms/common/api/BatchResult.html", type:"class", deprecated:"false" },
+ { id:239, label:"com.google.android.gms.common.api.BatchResultToken", link:"reference/com/google/android/gms/common/api/BatchResultToken.html", type:"class", deprecated:"false" },
+ { id:240, label:"com.google.android.gms.common.api.BooleanResult", link:"reference/com/google/android/gms/common/api/BooleanResult.html", type:"class", deprecated:"false" },
+ { id:241, label:"com.google.android.gms.common.api.CommonStatusCodes", link:"reference/com/google/android/gms/common/api/CommonStatusCodes.html", type:"class", deprecated:"false" },
+ { id:242, label:"com.google.android.gms.common.api.GoogleApiClient", link:"reference/com/google/android/gms/common/api/GoogleApiClient.html", type:"class", deprecated:"false" },
+ { id:243, label:"com.google.android.gms.common.api.GoogleApiClient.Builder", link:"reference/com/google/android/gms/common/api/GoogleApiClient.Builder.html", type:"class", deprecated:"false" },
+ { id:244, label:"com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks", link:"reference/com/google/android/gms/common/api/GoogleApiClient.ConnectionCallbacks.html", type:"class", deprecated:"false" },
+ { id:245, label:"com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener", link:"reference/com/google/android/gms/common/api/GoogleApiClient.OnConnectionFailedListener.html", type:"class", deprecated:"false" },
+ { id:246, label:"com.google.android.gms.common.api.GoogleApiClient.ServerAuthCodeCallbacks", link:"reference/com/google/android/gms/common/api/GoogleApiClient.ServerAuthCodeCallbacks.html", type:"class", deprecated:"false" },
+ { id:247, label:"com.google.android.gms.common.api.GoogleApiClient.ServerAuthCodeCallbacks.CheckResult", link:"reference/com/google/android/gms/common/api/GoogleApiClient.ServerAuthCodeCallbacks.CheckResult.html", type:"class", deprecated:"false" },
+ { id:248, label:"com.google.android.gms.common.api.OptionalPendingResult", link:"reference/com/google/android/gms/common/api/OptionalPendingResult.html", type:"class", deprecated:"false" },
+ { id:249, label:"com.google.android.gms.common.api.PendingResult", link:"reference/com/google/android/gms/common/api/PendingResult.html", type:"class", deprecated:"false" },
+ { id:250, label:"com.google.android.gms.common.api.PendingResults", link:"reference/com/google/android/gms/common/api/PendingResults.html", type:"class", deprecated:"false" },
+ { id:251, label:"com.google.android.gms.common.api.Releasable", link:"reference/com/google/android/gms/common/api/Releasable.html", type:"class", deprecated:"false" },
+ { id:252, label:"com.google.android.gms.common.api.Result", link:"reference/com/google/android/gms/common/api/Result.html", type:"class", deprecated:"false" },
+ { id:253, label:"com.google.android.gms.common.api.ResultCallback", link:"reference/com/google/android/gms/common/api/ResultCallback.html", type:"class", deprecated:"false" },
+ { id:254, label:"com.google.android.gms.common.api.Scope", link:"reference/com/google/android/gms/common/api/Scope.html", type:"class", deprecated:"false" },
+ { id:255, label:"com.google.android.gms.common.api.Status", link:"reference/com/google/android/gms/common/api/Status.html", type:"class", deprecated:"false" },
+ { id:256, label:"com.google.android.gms.common.data", link:"reference/com/google/android/gms/common/data/package-summary.html", type:"package", deprecated:"false" },
+ { id:257, label:"com.google.android.gms.common.data.AbstractDataBuffer", link:"reference/com/google/android/gms/common/data/AbstractDataBuffer.html", type:"class", deprecated:"false" },
+ { id:258, label:"com.google.android.gms.common.data.DataBuffer", link:"reference/com/google/android/gms/common/data/DataBuffer.html", type:"class", deprecated:"false" },
+ { id:259, label:"com.google.android.gms.common.data.DataBufferObserver", link:"reference/com/google/android/gms/common/data/DataBufferObserver.html", type:"class", deprecated:"false" },
+ { id:260, label:"com.google.android.gms.common.data.DataBufferObserver.Observable", link:"reference/com/google/android/gms/common/data/DataBufferObserver.Observable.html", type:"class", deprecated:"false" },
+ { id:261, label:"com.google.android.gms.common.data.DataBufferObserverSet", link:"reference/com/google/android/gms/common/data/DataBufferObserverSet.html", type:"class", deprecated:"false" },
+ { id:262, label:"com.google.android.gms.common.data.DataBufferUtils", link:"reference/com/google/android/gms/common/data/DataBufferUtils.html", type:"class", deprecated:"false" },
+ { id:263, label:"com.google.android.gms.common.data.Freezable", link:"reference/com/google/android/gms/common/data/Freezable.html", type:"class", deprecated:"false" },
+ { id:264, label:"com.google.android.gms.common.data.FreezableUtils", link:"reference/com/google/android/gms/common/data/FreezableUtils.html", type:"class", deprecated:"false" },
+ { id:265, label:"com.google.android.gms.common.images", link:"reference/com/google/android/gms/common/images/package-summary.html", type:"package", deprecated:"false" },
+ { id:266, label:"com.google.android.gms.common.images.ImageManager", link:"reference/com/google/android/gms/common/images/ImageManager.html", type:"class", deprecated:"false" },
+ { id:267, label:"com.google.android.gms.common.images.ImageManager.OnImageLoadedListener", link:"reference/com/google/android/gms/common/images/ImageManager.OnImageLoadedListener.html", type:"class", deprecated:"false" },
+ { id:268, label:"com.google.android.gms.common.images.Size", link:"reference/com/google/android/gms/common/images/Size.html", type:"class", deprecated:"false" },
+ { id:269, label:"com.google.android.gms.common.images.WebImage", link:"reference/com/google/android/gms/common/images/WebImage.html", type:"class", deprecated:"false" },
+ { id:270, label:"com.google.android.gms.drive", link:"reference/com/google/android/gms/drive/package-summary.html", type:"package", deprecated:"false" },
+ { id:271, label:"com.google.android.gms.drive.CreateFileActivityBuilder", link:"reference/com/google/android/gms/drive/CreateFileActivityBuilder.html", type:"class", deprecated:"false" },
+ { id:272, label:"com.google.android.gms.drive.Drive", link:"reference/com/google/android/gms/drive/Drive.html", type:"class", deprecated:"false" },
+ { id:273, label:"com.google.android.gms.drive.DriveApi", link:"reference/com/google/android/gms/drive/DriveApi.html", type:"class", deprecated:"false" },
+ { id:274, label:"com.google.android.gms.drive.DriveApi.DriveContentsResult", link:"reference/com/google/android/gms/drive/DriveApi.DriveContentsResult.html", type:"class", deprecated:"false" },
+ { id:275, label:"com.google.android.gms.drive.DriveApi.DriveIdResult", link:"reference/com/google/android/gms/drive/DriveApi.DriveIdResult.html", type:"class", deprecated:"false" },
+ { id:276, label:"com.google.android.gms.drive.DriveApi.MetadataBufferResult", link:"reference/com/google/android/gms/drive/DriveApi.MetadataBufferResult.html", type:"class", deprecated:"false" },
+ { id:277, label:"com.google.android.gms.drive.DriveContents", link:"reference/com/google/android/gms/drive/DriveContents.html", type:"class", deprecated:"false" },
+ { id:278, label:"com.google.android.gms.drive.DriveFile", link:"reference/com/google/android/gms/drive/DriveFile.html", type:"class", deprecated:"false" },
+ { id:279, label:"com.google.android.gms.drive.DriveFile.DownloadProgressListener", link:"reference/com/google/android/gms/drive/DriveFile.DownloadProgressListener.html", type:"class", deprecated:"false" },
+ { id:280, label:"com.google.android.gms.drive.DriveFolder", link:"reference/com/google/android/gms/drive/DriveFolder.html", type:"class", deprecated:"false" },
+ { id:281, label:"com.google.android.gms.drive.DriveFolder.DriveFileResult", link:"reference/com/google/android/gms/drive/DriveFolder.DriveFileResult.html", type:"class", deprecated:"false" },
+ { id:282, label:"com.google.android.gms.drive.DriveFolder.DriveFolderResult", link:"reference/com/google/android/gms/drive/DriveFolder.DriveFolderResult.html", type:"class", deprecated:"false" },
+ { id:283, label:"com.google.android.gms.drive.DriveId", link:"reference/com/google/android/gms/drive/DriveId.html", type:"class", deprecated:"false" },
+ { id:284, label:"com.google.android.gms.drive.DrivePreferencesApi", link:"reference/com/google/android/gms/drive/DrivePreferencesApi.html", type:"class", deprecated:"false" },
+ { id:285, label:"com.google.android.gms.drive.DrivePreferencesApi.FileUploadPreferencesResult", link:"reference/com/google/android/gms/drive/DrivePreferencesApi.FileUploadPreferencesResult.html", type:"class", deprecated:"false" },
+ { id:286, label:"com.google.android.gms.drive.DriveResource", link:"reference/com/google/android/gms/drive/DriveResource.html", type:"class", deprecated:"false" },
+ { id:287, label:"com.google.android.gms.drive.DriveResource.MetadataResult", link:"reference/com/google/android/gms/drive/DriveResource.MetadataResult.html", type:"class", deprecated:"false" },
+ { id:288, label:"com.google.android.gms.drive.DriveStatusCodes", link:"reference/com/google/android/gms/drive/DriveStatusCodes.html", type:"class", deprecated:"false" },
+ { id:289, label:"com.google.android.gms.drive.ExecutionOptions", link:"reference/com/google/android/gms/drive/ExecutionOptions.html", type:"class", deprecated:"false" },
+ { id:290, label:"com.google.android.gms.drive.ExecutionOptions.Builder", link:"reference/com/google/android/gms/drive/ExecutionOptions.Builder.html", type:"class", deprecated:"false" },
+ { id:291, label:"com.google.android.gms.drive.FileUploadPreferences", link:"reference/com/google/android/gms/drive/FileUploadPreferences.html", type:"class", deprecated:"false" },
+ { id:292, label:"com.google.android.gms.drive.Metadata", link:"reference/com/google/android/gms/drive/Metadata.html", type:"class", deprecated:"false" },
+ { id:293, label:"com.google.android.gms.drive.MetadataBuffer", link:"reference/com/google/android/gms/drive/MetadataBuffer.html", type:"class", deprecated:"false" },
+ { id:294, label:"com.google.android.gms.drive.MetadataChangeSet", link:"reference/com/google/android/gms/drive/MetadataChangeSet.html", type:"class", deprecated:"false" },
+ { id:295, label:"com.google.android.gms.drive.MetadataChangeSet.Builder", link:"reference/com/google/android/gms/drive/MetadataChangeSet.Builder.html", type:"class", deprecated:"false" },
+ { id:296, label:"com.google.android.gms.drive.OpenFileActivityBuilder", link:"reference/com/google/android/gms/drive/OpenFileActivityBuilder.html", type:"class", deprecated:"false" },
+ { id:297, label:"com.google.android.gms.drive.events", link:"reference/com/google/android/gms/drive/events/package-summary.html", type:"package", deprecated:"false" },
+ { id:298, label:"com.google.android.gms.drive.events.ChangeEvent", link:"reference/com/google/android/gms/drive/events/ChangeEvent.html", type:"class", deprecated:"false" },
+ { id:299, label:"com.google.android.gms.drive.events.ChangeListener", link:"reference/com/google/android/gms/drive/events/ChangeListener.html", type:"class", deprecated:"false" },
+ { id:300, label:"com.google.android.gms.drive.events.CompletionEvent", link:"reference/com/google/android/gms/drive/events/CompletionEvent.html", type:"class", deprecated:"false" },
+ { id:301, label:"com.google.android.gms.drive.events.CompletionListener", link:"reference/com/google/android/gms/drive/events/CompletionListener.html", type:"class", deprecated:"false" },
+ { id:302, label:"com.google.android.gms.drive.events.DriveEvent", link:"reference/com/google/android/gms/drive/events/DriveEvent.html", type:"class", deprecated:"false" },
+ { id:303, label:"com.google.android.gms.drive.events.DriveEventService", link:"reference/com/google/android/gms/drive/events/DriveEventService.html", type:"class", deprecated:"false" },
+ { id:304, label:"com.google.android.gms.drive.events.ResourceEvent", link:"reference/com/google/android/gms/drive/events/ResourceEvent.html", type:"class", deprecated:"false" },
+ { id:305, label:"com.google.android.gms.drive.metadata", link:"reference/com/google/android/gms/drive/metadata/package-summary.html", type:"package", deprecated:"false" },
+ { id:306, label:"com.google.android.gms.drive.metadata.CustomPropertyKey", link:"reference/com/google/android/gms/drive/metadata/CustomPropertyKey.html", type:"class", deprecated:"false" },
+ { id:307, label:"com.google.android.gms.drive.metadata.MetadataField", link:"reference/com/google/android/gms/drive/metadata/MetadataField.html", type:"class", deprecated:"false" },
+ { id:308, label:"com.google.android.gms.drive.metadata.SearchableCollectionMetadataField", link:"reference/com/google/android/gms/drive/metadata/SearchableCollectionMetadataField.html", type:"class", deprecated:"false" },
+ { id:309, label:"com.google.android.gms.drive.metadata.SearchableMetadataField", link:"reference/com/google/android/gms/drive/metadata/SearchableMetadataField.html", type:"class", deprecated:"false" },
+ { id:310, label:"com.google.android.gms.drive.metadata.SearchableOrderedMetadataField", link:"reference/com/google/android/gms/drive/metadata/SearchableOrderedMetadataField.html", type:"class", deprecated:"false" },
+ { id:311, label:"com.google.android.gms.drive.metadata.SortableMetadataField", link:"reference/com/google/android/gms/drive/metadata/SortableMetadataField.html", type:"class", deprecated:"false" },
+ { id:312, label:"com.google.android.gms.drive.query", link:"reference/com/google/android/gms/drive/query/package-summary.html", type:"package", deprecated:"false" },
+ { id:313, label:"com.google.android.gms.drive.query.Filter", link:"reference/com/google/android/gms/drive/query/Filter.html", type:"class", deprecated:"false" },
+ { id:314, label:"com.google.android.gms.drive.query.Filters", link:"reference/com/google/android/gms/drive/query/Filters.html", type:"class", deprecated:"false" },
+ { id:315, label:"com.google.android.gms.drive.query.Query", link:"reference/com/google/android/gms/drive/query/Query.html", type:"class", deprecated:"false" },
+ { id:316, label:"com.google.android.gms.drive.query.Query.Builder", link:"reference/com/google/android/gms/drive/query/Query.Builder.html", type:"class", deprecated:"false" },
+ { id:317, label:"com.google.android.gms.drive.query.SearchableField", link:"reference/com/google/android/gms/drive/query/SearchableField.html", type:"class", deprecated:"false" },
+ { id:318, label:"com.google.android.gms.drive.query.SortOrder", link:"reference/com/google/android/gms/drive/query/SortOrder.html", type:"class", deprecated:"false" },
+ { id:319, label:"com.google.android.gms.drive.query.SortOrder.Builder", link:"reference/com/google/android/gms/drive/query/SortOrder.Builder.html", type:"class", deprecated:"false" },
+ { id:320, label:"com.google.android.gms.drive.query.SortableField", link:"reference/com/google/android/gms/drive/query/SortableField.html", type:"class", deprecated:"false" },
+ { id:321, label:"com.google.android.gms.drive.widget", link:"reference/com/google/android/gms/drive/widget/package-summary.html", type:"package", deprecated:"false" },
+ { id:322, label:"com.google.android.gms.drive.widget.DataBufferAdapter", link:"reference/com/google/android/gms/drive/widget/DataBufferAdapter.html", type:"class", deprecated:"false" },
+ { id:323, label:"com.google.android.gms.fitness", link:"reference/com/google/android/gms/fitness/package-summary.html", type:"package", deprecated:"false" },
+ { id:324, label:"com.google.android.gms.fitness.BleApi", link:"reference/com/google/android/gms/fitness/BleApi.html", type:"class", deprecated:"false" },
+ { id:325, label:"com.google.android.gms.fitness.ConfigApi", link:"reference/com/google/android/gms/fitness/ConfigApi.html", type:"class", deprecated:"false" },
+ { id:326, label:"com.google.android.gms.fitness.Fitness", link:"reference/com/google/android/gms/fitness/Fitness.html", type:"class", deprecated:"false" },
+ { id:327, label:"com.google.android.gms.fitness.FitnessActivities", link:"reference/com/google/android/gms/fitness/FitnessActivities.html", type:"class", deprecated:"false" },
+ { id:328, label:"com.google.android.gms.fitness.FitnessStatusCodes", link:"reference/com/google/android/gms/fitness/FitnessStatusCodes.html", type:"class", deprecated:"false" },
+ { id:329, label:"com.google.android.gms.fitness.HistoryApi", link:"reference/com/google/android/gms/fitness/HistoryApi.html", type:"class", deprecated:"false" },
+ { id:330, label:"com.google.android.gms.fitness.HistoryApi.ViewIntentBuilder", link:"reference/com/google/android/gms/fitness/HistoryApi.ViewIntentBuilder.html", type:"class", deprecated:"false" },
+ { id:331, label:"com.google.android.gms.fitness.RecordingApi", link:"reference/com/google/android/gms/fitness/RecordingApi.html", type:"class", deprecated:"false" },
+ { id:332, label:"com.google.android.gms.fitness.SensorsApi", link:"reference/com/google/android/gms/fitness/SensorsApi.html", type:"class", deprecated:"false" },
+ { id:333, label:"com.google.android.gms.fitness.SessionsApi", link:"reference/com/google/android/gms/fitness/SessionsApi.html", type:"class", deprecated:"false" },
+ { id:334, label:"com.google.android.gms.fitness.SessionsApi.ViewIntentBuilder", link:"reference/com/google/android/gms/fitness/SessionsApi.ViewIntentBuilder.html", type:"class", deprecated:"false" },
+ { id:335, label:"com.google.android.gms.fitness.data", link:"reference/com/google/android/gms/fitness/data/package-summary.html", type:"package", deprecated:"false" },
+ { id:336, label:"com.google.android.gms.fitness.data.BleDevice", link:"reference/com/google/android/gms/fitness/data/BleDevice.html", type:"class", deprecated:"false" },
+ { id:337, label:"com.google.android.gms.fitness.data.Bucket", link:"reference/com/google/android/gms/fitness/data/Bucket.html", type:"class", deprecated:"false" },
+ { id:338, label:"com.google.android.gms.fitness.data.DataPoint", link:"reference/com/google/android/gms/fitness/data/DataPoint.html", type:"class", deprecated:"false" },
+ { id:339, label:"com.google.android.gms.fitness.data.DataSet", link:"reference/com/google/android/gms/fitness/data/DataSet.html", type:"class", deprecated:"false" },
+ { id:340, label:"com.google.android.gms.fitness.data.DataSource", link:"reference/com/google/android/gms/fitness/data/DataSource.html", type:"class", deprecated:"false" },
+ { id:341, label:"com.google.android.gms.fitness.data.DataSource.Builder", link:"reference/com/google/android/gms/fitness/data/DataSource.Builder.html", type:"class", deprecated:"false" },
+ { id:342, label:"com.google.android.gms.fitness.data.DataType", link:"reference/com/google/android/gms/fitness/data/DataType.html", type:"class", deprecated:"false" },
+ { id:343, label:"com.google.android.gms.fitness.data.Device", link:"reference/com/google/android/gms/fitness/data/Device.html", type:"class", deprecated:"false" },
+ { id:344, label:"com.google.android.gms.fitness.data.Field", link:"reference/com/google/android/gms/fitness/data/Field.html", type:"class", deprecated:"false" },
+ { id:345, label:"com.google.android.gms.fitness.data.Session", link:"reference/com/google/android/gms/fitness/data/Session.html", type:"class", deprecated:"false" },
+ { id:346, label:"com.google.android.gms.fitness.data.Session.Builder", link:"reference/com/google/android/gms/fitness/data/Session.Builder.html", type:"class", deprecated:"false" },
+ { id:347, label:"com.google.android.gms.fitness.data.Subscription", link:"reference/com/google/android/gms/fitness/data/Subscription.html", type:"class", deprecated:"false" },
+ { id:348, label:"com.google.android.gms.fitness.data.Value", link:"reference/com/google/android/gms/fitness/data/Value.html", type:"class", deprecated:"false" },
+ { id:349, label:"com.google.android.gms.fitness.data.WorkoutExercises", link:"reference/com/google/android/gms/fitness/data/WorkoutExercises.html", type:"class", deprecated:"false" },
+ { id:350, label:"com.google.android.gms.fitness.request", link:"reference/com/google/android/gms/fitness/request/package-summary.html", type:"package", deprecated:"false" },
+ { id:351, label:"com.google.android.gms.fitness.request.BleScanCallback", link:"reference/com/google/android/gms/fitness/request/BleScanCallback.html", type:"class", deprecated:"false" },
+ { id:352, label:"com.google.android.gms.fitness.request.DataDeleteRequest", link:"reference/com/google/android/gms/fitness/request/DataDeleteRequest.html", type:"class", deprecated:"false" },
+ { id:353, label:"com.google.android.gms.fitness.request.DataDeleteRequest.Builder", link:"reference/com/google/android/gms/fitness/request/DataDeleteRequest.Builder.html", type:"class", deprecated:"false" },
+ { id:354, label:"com.google.android.gms.fitness.request.DataReadRequest", link:"reference/com/google/android/gms/fitness/request/DataReadRequest.html", type:"class", deprecated:"false" },
+ { id:355, label:"com.google.android.gms.fitness.request.DataReadRequest.Builder", link:"reference/com/google/android/gms/fitness/request/DataReadRequest.Builder.html", type:"class", deprecated:"false" },
+ { id:356, label:"com.google.android.gms.fitness.request.DataSourcesRequest", link:"reference/com/google/android/gms/fitness/request/DataSourcesRequest.html", type:"class", deprecated:"false" },
+ { id:357, label:"com.google.android.gms.fitness.request.DataSourcesRequest.Builder", link:"reference/com/google/android/gms/fitness/request/DataSourcesRequest.Builder.html", type:"class", deprecated:"false" },
+ { id:358, label:"com.google.android.gms.fitness.request.DataTypeCreateRequest", link:"reference/com/google/android/gms/fitness/request/DataTypeCreateRequest.html", type:"class", deprecated:"false" },
+ { id:359, label:"com.google.android.gms.fitness.request.DataTypeCreateRequest.Builder", link:"reference/com/google/android/gms/fitness/request/DataTypeCreateRequest.Builder.html", type:"class", deprecated:"false" },
+ { id:360, label:"com.google.android.gms.fitness.request.OnDataPointListener", link:"reference/com/google/android/gms/fitness/request/OnDataPointListener.html", type:"class", deprecated:"false" },
+ { id:361, label:"com.google.android.gms.fitness.request.SensorRequest", link:"reference/com/google/android/gms/fitness/request/SensorRequest.html", type:"class", deprecated:"false" },
+ { id:362, label:"com.google.android.gms.fitness.request.SensorRequest.Builder", link:"reference/com/google/android/gms/fitness/request/SensorRequest.Builder.html", type:"class", deprecated:"false" },
+ { id:363, label:"com.google.android.gms.fitness.request.SessionInsertRequest", link:"reference/com/google/android/gms/fitness/request/SessionInsertRequest.html", type:"class", deprecated:"false" },
+ { id:364, label:"com.google.android.gms.fitness.request.SessionInsertRequest.Builder", link:"reference/com/google/android/gms/fitness/request/SessionInsertRequest.Builder.html", type:"class", deprecated:"false" },
+ { id:365, label:"com.google.android.gms.fitness.request.SessionReadRequest", link:"reference/com/google/android/gms/fitness/request/SessionReadRequest.html", type:"class", deprecated:"false" },
+ { id:366, label:"com.google.android.gms.fitness.request.SessionReadRequest.Builder", link:"reference/com/google/android/gms/fitness/request/SessionReadRequest.Builder.html", type:"class", deprecated:"false" },
+ { id:367, label:"com.google.android.gms.fitness.request.StartBleScanRequest", link:"reference/com/google/android/gms/fitness/request/StartBleScanRequest.html", type:"class", deprecated:"false" },
+ { id:368, label:"com.google.android.gms.fitness.request.StartBleScanRequest.Builder", link:"reference/com/google/android/gms/fitness/request/StartBleScanRequest.Builder.html", type:"class", deprecated:"false" },
+ { id:369, label:"com.google.android.gms.fitness.result", link:"reference/com/google/android/gms/fitness/result/package-summary.html", type:"package", deprecated:"false" },
+ { id:370, label:"com.google.android.gms.fitness.result.BleDevicesResult", link:"reference/com/google/android/gms/fitness/result/BleDevicesResult.html", type:"class", deprecated:"false" },
+ { id:371, label:"com.google.android.gms.fitness.result.DailyTotalResult", link:"reference/com/google/android/gms/fitness/result/DailyTotalResult.html", type:"class", deprecated:"false" },
+ { id:372, label:"com.google.android.gms.fitness.result.DataReadResult", link:"reference/com/google/android/gms/fitness/result/DataReadResult.html", type:"class", deprecated:"false" },
+ { id:373, label:"com.google.android.gms.fitness.result.DataSourcesResult", link:"reference/com/google/android/gms/fitness/result/DataSourcesResult.html", type:"class", deprecated:"false" },
+ { id:374, label:"com.google.android.gms.fitness.result.DataTypeResult", link:"reference/com/google/android/gms/fitness/result/DataTypeResult.html", type:"class", deprecated:"false" },
+ { id:375, label:"com.google.android.gms.fitness.result.ListSubscriptionsResult", link:"reference/com/google/android/gms/fitness/result/ListSubscriptionsResult.html", type:"class", deprecated:"false" },
+ { id:376, label:"com.google.android.gms.fitness.result.SessionReadResult", link:"reference/com/google/android/gms/fitness/result/SessionReadResult.html", type:"class", deprecated:"false" },
+ { id:377, label:"com.google.android.gms.fitness.result.SessionStopResult", link:"reference/com/google/android/gms/fitness/result/SessionStopResult.html", type:"class", deprecated:"false" },
+ { id:378, label:"com.google.android.gms.fitness.service", link:"reference/com/google/android/gms/fitness/service/package-summary.html", type:"package", deprecated:"false" },
+ { id:379, label:"com.google.android.gms.fitness.service.FitnessSensorService", link:"reference/com/google/android/gms/fitness/service/FitnessSensorService.html", type:"class", deprecated:"false" },
+ { id:380, label:"com.google.android.gms.fitness.service.FitnessSensorServiceRequest", link:"reference/com/google/android/gms/fitness/service/FitnessSensorServiceRequest.html", type:"class", deprecated:"false" },
+ { id:381, label:"com.google.android.gms.fitness.service.SensorEventDispatcher", link:"reference/com/google/android/gms/fitness/service/SensorEventDispatcher.html", type:"class", deprecated:"false" },
+ { id:382, label:"com.google.android.gms.games", link:"reference/com/google/android/gms/games/package-summary.html", type:"package", deprecated:"false" },
+ { id:383, label:"com.google.android.gms.games.Game", link:"reference/com/google/android/gms/games/Game.html", type:"class", deprecated:"false" },
+ { id:384, label:"com.google.android.gms.games.GameBuffer", link:"reference/com/google/android/gms/games/GameBuffer.html", type:"class", deprecated:"false" },
+ { id:385, label:"com.google.android.gms.games.GameEntity", link:"reference/com/google/android/gms/games/GameEntity.html", type:"class", deprecated:"false" },
+ { id:386, label:"com.google.android.gms.games.Games", link:"reference/com/google/android/gms/games/Games.html", type:"class", deprecated:"false" },
+ { id:387, label:"com.google.android.gms.games.Games.GamesOptions", link:"reference/com/google/android/gms/games/Games.GamesOptions.html", type:"class", deprecated:"false" },
+ { id:388, label:"com.google.android.gms.games.Games.GamesOptions.Builder", link:"reference/com/google/android/gms/games/Games.GamesOptions.Builder.html", type:"class", deprecated:"false" },
+ { id:389, label:"com.google.android.gms.games.GamesActivityResultCodes", link:"reference/com/google/android/gms/games/GamesActivityResultCodes.html", type:"class", deprecated:"false" },
+ { id:390, label:"com.google.android.gms.games.GamesMetadata", link:"reference/com/google/android/gms/games/GamesMetadata.html", type:"class", deprecated:"false" },
+ { id:391, label:"com.google.android.gms.games.GamesMetadata.LoadGamesResult", link:"reference/com/google/android/gms/games/GamesMetadata.LoadGamesResult.html", type:"class", deprecated:"false" },
+ { id:392, label:"com.google.android.gms.games.GamesStatusCodes", link:"reference/com/google/android/gms/games/GamesStatusCodes.html", type:"class", deprecated:"false" },
+ { id:393, label:"com.google.android.gms.games.Notifications", link:"reference/com/google/android/gms/games/Notifications.html", type:"class", deprecated:"false" },
+ { id:394, label:"com.google.android.gms.games.PageDirection", link:"reference/com/google/android/gms/games/PageDirection.html", type:"class", deprecated:"false" },
+ { id:395, label:"com.google.android.gms.games.Player", link:"reference/com/google/android/gms/games/Player.html", type:"class", deprecated:"false" },
+ { id:396, label:"com.google.android.gms.games.PlayerBuffer", link:"reference/com/google/android/gms/games/PlayerBuffer.html", type:"class", deprecated:"false" },
+ { id:397, label:"com.google.android.gms.games.PlayerEntity", link:"reference/com/google/android/gms/games/PlayerEntity.html", type:"class", deprecated:"false" },
+ { id:398, label:"com.google.android.gms.games.PlayerLevel", link:"reference/com/google/android/gms/games/PlayerLevel.html", type:"class", deprecated:"false" },
+ { id:399, label:"com.google.android.gms.games.PlayerLevelInfo", link:"reference/com/google/android/gms/games/PlayerLevelInfo.html", type:"class", deprecated:"false" },
+ { id:400, label:"com.google.android.gms.games.Players", link:"reference/com/google/android/gms/games/Players.html", type:"class", deprecated:"false" },
+ { id:401, label:"com.google.android.gms.games.Players.LoadPlayersResult", link:"reference/com/google/android/gms/games/Players.LoadPlayersResult.html", type:"class", deprecated:"false" },
+ { id:402, label:"com.google.android.gms.games.Players.LoadProfileSettingsResult", link:"reference/com/google/android/gms/games/Players.LoadProfileSettingsResult.html", type:"class", deprecated:"false" },
+ { id:403, label:"com.google.android.gms.games.achievement", link:"reference/com/google/android/gms/games/achievement/package-summary.html", type:"package", deprecated:"false" },
+ { id:404, label:"com.google.android.gms.games.achievement.Achievement", link:"reference/com/google/android/gms/games/achievement/Achievement.html", type:"class", deprecated:"false" },
+ { id:405, label:"com.google.android.gms.games.achievement.AchievementBuffer", link:"reference/com/google/android/gms/games/achievement/AchievementBuffer.html", type:"class", deprecated:"false" },
+ { id:406, label:"com.google.android.gms.games.achievement.AchievementEntity", link:"reference/com/google/android/gms/games/achievement/AchievementEntity.html", type:"class", deprecated:"false" },
+ { id:407, label:"com.google.android.gms.games.achievement.Achievements", link:"reference/com/google/android/gms/games/achievement/Achievements.html", type:"class", deprecated:"false" },
+ { id:408, label:"com.google.android.gms.games.achievement.Achievements.LoadAchievementsResult", link:"reference/com/google/android/gms/games/achievement/Achievements.LoadAchievementsResult.html", type:"class", deprecated:"false" },
+ { id:409, label:"com.google.android.gms.games.achievement.Achievements.UpdateAchievementResult", link:"reference/com/google/android/gms/games/achievement/Achievements.UpdateAchievementResult.html", type:"class", deprecated:"false" },
+ { id:410, label:"com.google.android.gms.games.event", link:"reference/com/google/android/gms/games/event/package-summary.html", type:"package", deprecated:"false" },
+ { id:411, label:"com.google.android.gms.games.event.Event", link:"reference/com/google/android/gms/games/event/Event.html", type:"class", deprecated:"false" },
+ { id:412, label:"com.google.android.gms.games.event.EventBuffer", link:"reference/com/google/android/gms/games/event/EventBuffer.html", type:"class", deprecated:"false" },
+ { id:413, label:"com.google.android.gms.games.event.EventEntity", link:"reference/com/google/android/gms/games/event/EventEntity.html", type:"class", deprecated:"false" },
+ { id:414, label:"com.google.android.gms.games.event.Events", link:"reference/com/google/android/gms/games/event/Events.html", type:"class", deprecated:"false" },
+ { id:415, label:"com.google.android.gms.games.event.Events.LoadEventsResult", link:"reference/com/google/android/gms/games/event/Events.LoadEventsResult.html", type:"class", deprecated:"false" },
+ { id:416, label:"com.google.android.gms.games.leaderboard", link:"reference/com/google/android/gms/games/leaderboard/package-summary.html", type:"package", deprecated:"false" },
+ { id:417, label:"com.google.android.gms.games.leaderboard.Leaderboard", link:"reference/com/google/android/gms/games/leaderboard/Leaderboard.html", type:"class", deprecated:"false" },
+ { id:418, label:"com.google.android.gms.games.leaderboard.LeaderboardBuffer", link:"reference/com/google/android/gms/games/leaderboard/LeaderboardBuffer.html", type:"class", deprecated:"false" },
+ { id:419, label:"com.google.android.gms.games.leaderboard.LeaderboardScore", link:"reference/com/google/android/gms/games/leaderboard/LeaderboardScore.html", type:"class", deprecated:"false" },
+ { id:420, label:"com.google.android.gms.games.leaderboard.LeaderboardScoreBuffer", link:"reference/com/google/android/gms/games/leaderboard/LeaderboardScoreBuffer.html", type:"class", deprecated:"false" },
+ { id:421, label:"com.google.android.gms.games.leaderboard.LeaderboardVariant", link:"reference/com/google/android/gms/games/leaderboard/LeaderboardVariant.html", type:"class", deprecated:"false" },
+ { id:422, label:"com.google.android.gms.games.leaderboard.Leaderboards", link:"reference/com/google/android/gms/games/leaderboard/Leaderboards.html", type:"class", deprecated:"false" },
+ { id:423, label:"com.google.android.gms.games.leaderboard.Leaderboards.LeaderboardMetadataResult", link:"reference/com/google/android/gms/games/leaderboard/Leaderboards.LeaderboardMetadataResult.html", type:"class", deprecated:"false" },
+ { id:424, label:"com.google.android.gms.games.leaderboard.Leaderboards.LoadPlayerScoreResult", link:"reference/com/google/android/gms/games/leaderboard/Leaderboards.LoadPlayerScoreResult.html", type:"class", deprecated:"false" },
+ { id:425, label:"com.google.android.gms.games.leaderboard.Leaderboards.LoadScoresResult", link:"reference/com/google/android/gms/games/leaderboard/Leaderboards.LoadScoresResult.html", type:"class", deprecated:"false" },
+ { id:426, label:"com.google.android.gms.games.leaderboard.Leaderboards.SubmitScoreResult", link:"reference/com/google/android/gms/games/leaderboard/Leaderboards.SubmitScoreResult.html", type:"class", deprecated:"false" },
+ { id:427, label:"com.google.android.gms.games.leaderboard.ScoreSubmissionData", link:"reference/com/google/android/gms/games/leaderboard/ScoreSubmissionData.html", type:"class", deprecated:"false" },
+ { id:428, label:"com.google.android.gms.games.leaderboard.ScoreSubmissionData.Result", link:"reference/com/google/android/gms/games/leaderboard/ScoreSubmissionData.Result.html", type:"class", deprecated:"false" },
+ { id:429, label:"com.google.android.gms.games.multiplayer", link:"reference/com/google/android/gms/games/multiplayer/package-summary.html", type:"package", deprecated:"false" },
+ { id:430, label:"com.google.android.gms.games.multiplayer.Invitation", link:"reference/com/google/android/gms/games/multiplayer/Invitation.html", type:"class", deprecated:"false" },
+ { id:431, label:"com.google.android.gms.games.multiplayer.InvitationBuffer", link:"reference/com/google/android/gms/games/multiplayer/InvitationBuffer.html", type:"class", deprecated:"false" },
+ { id:432, label:"com.google.android.gms.games.multiplayer.InvitationEntity", link:"reference/com/google/android/gms/games/multiplayer/InvitationEntity.html", type:"class", deprecated:"false" },
+ { id:433, label:"com.google.android.gms.games.multiplayer.Invitations", link:"reference/com/google/android/gms/games/multiplayer/Invitations.html", type:"class", deprecated:"false" },
+ { id:434, label:"com.google.android.gms.games.multiplayer.Invitations.LoadInvitationsResult", link:"reference/com/google/android/gms/games/multiplayer/Invitations.LoadInvitationsResult.html", type:"class", deprecated:"false" },
+ { id:435, label:"com.google.android.gms.games.multiplayer.Multiplayer", link:"reference/com/google/android/gms/games/multiplayer/Multiplayer.html", type:"class", deprecated:"false" },
+ { id:436, label:"com.google.android.gms.games.multiplayer.OnInvitationReceivedListener", link:"reference/com/google/android/gms/games/multiplayer/OnInvitationReceivedListener.html", type:"class", deprecated:"false" },
+ { id:437, label:"com.google.android.gms.games.multiplayer.Participant", link:"reference/com/google/android/gms/games/multiplayer/Participant.html", type:"class", deprecated:"false" },
+ { id:438, label:"com.google.android.gms.games.multiplayer.ParticipantBuffer", link:"reference/com/google/android/gms/games/multiplayer/ParticipantBuffer.html", type:"class", deprecated:"false" },
+ { id:439, label:"com.google.android.gms.games.multiplayer.ParticipantEntity", link:"reference/com/google/android/gms/games/multiplayer/ParticipantEntity.html", type:"class", deprecated:"false" },
+ { id:440, label:"com.google.android.gms.games.multiplayer.ParticipantResult", link:"reference/com/google/android/gms/games/multiplayer/ParticipantResult.html", type:"class", deprecated:"false" },
+ { id:441, label:"com.google.android.gms.games.multiplayer.ParticipantUtils", link:"reference/com/google/android/gms/games/multiplayer/ParticipantUtils.html", type:"class", deprecated:"false" },
+ { id:442, label:"com.google.android.gms.games.multiplayer.Participatable", link:"reference/com/google/android/gms/games/multiplayer/Participatable.html", type:"class", deprecated:"false" },
+ { id:443, label:"com.google.android.gms.games.multiplayer.realtime", link:"reference/com/google/android/gms/games/multiplayer/realtime/package-summary.html", type:"package", deprecated:"false" },
+ { id:444, label:"com.google.android.gms.games.multiplayer.realtime.RealTimeMessage", link:"reference/com/google/android/gms/games/multiplayer/realtime/RealTimeMessage.html", type:"class", deprecated:"false" },
+ { id:445, label:"com.google.android.gms.games.multiplayer.realtime.RealTimeMessageReceivedListener", link:"reference/com/google/android/gms/games/multiplayer/realtime/RealTimeMessageReceivedListener.html", type:"class", deprecated:"false" },
+ { id:446, label:"com.google.android.gms.games.multiplayer.realtime.RealTimeMultiplayer", link:"reference/com/google/android/gms/games/multiplayer/realtime/RealTimeMultiplayer.html", type:"class", deprecated:"false" },
+ { id:447, label:"com.google.android.gms.games.multiplayer.realtime.RealTimeMultiplayer.ReliableMessageSentCallback", link:"reference/com/google/android/gms/games/multiplayer/realtime/RealTimeMultiplayer.ReliableMessageSentCallback.html", type:"class", deprecated:"false" },
+ { id:448, label:"com.google.android.gms.games.multiplayer.realtime.Room", link:"reference/com/google/android/gms/games/multiplayer/realtime/Room.html", type:"class", deprecated:"false" },
+ { id:449, label:"com.google.android.gms.games.multiplayer.realtime.RoomConfig", link:"reference/com/google/android/gms/games/multiplayer/realtime/RoomConfig.html", type:"class", deprecated:"false" },
+ { id:450, label:"com.google.android.gms.games.multiplayer.realtime.RoomConfig.Builder", link:"reference/com/google/android/gms/games/multiplayer/realtime/RoomConfig.Builder.html", type:"class", deprecated:"false" },
+ { id:451, label:"com.google.android.gms.games.multiplayer.realtime.RoomEntity", link:"reference/com/google/android/gms/games/multiplayer/realtime/RoomEntity.html", type:"class", deprecated:"false" },
+ { id:452, label:"com.google.android.gms.games.multiplayer.realtime.RoomStatusUpdateListener", link:"reference/com/google/android/gms/games/multiplayer/realtime/RoomStatusUpdateListener.html", type:"class", deprecated:"false" },
+ { id:453, label:"com.google.android.gms.games.multiplayer.realtime.RoomUpdateListener", link:"reference/com/google/android/gms/games/multiplayer/realtime/RoomUpdateListener.html", type:"class", deprecated:"false" },
+ { id:454, label:"com.google.android.gms.games.multiplayer.turnbased", link:"reference/com/google/android/gms/games/multiplayer/turnbased/package-summary.html", type:"package", deprecated:"false" },
+ { id:455, label:"com.google.android.gms.games.multiplayer.turnbased.LoadMatchesResponse", link:"reference/com/google/android/gms/games/multiplayer/turnbased/LoadMatchesResponse.html", type:"class", deprecated:"false" },
+ { id:456, label:"com.google.android.gms.games.multiplayer.turnbased.OnTurnBasedMatchUpdateReceivedListener", link:"reference/com/google/android/gms/games/multiplayer/turnbased/OnTurnBasedMatchUpdateReceivedListener.html", type:"class", deprecated:"false" },
+ { id:457, label:"com.google.android.gms.games.multiplayer.turnbased.TurnBasedMatch", link:"reference/com/google/android/gms/games/multiplayer/turnbased/TurnBasedMatch.html", type:"class", deprecated:"false" },
+ { id:458, label:"com.google.android.gms.games.multiplayer.turnbased.TurnBasedMatchBuffer", link:"reference/com/google/android/gms/games/multiplayer/turnbased/TurnBasedMatchBuffer.html", type:"class", deprecated:"false" },
+ { id:459, label:"com.google.android.gms.games.multiplayer.turnbased.TurnBasedMatchConfig", link:"reference/com/google/android/gms/games/multiplayer/turnbased/TurnBasedMatchConfig.html", type:"class", deprecated:"false" },
+ { id:460, label:"com.google.android.gms.games.multiplayer.turnbased.TurnBasedMatchConfig.Builder", link:"reference/com/google/android/gms/games/multiplayer/turnbased/TurnBasedMatchConfig.Builder.html", type:"class", deprecated:"false" },
+ { id:461, label:"com.google.android.gms.games.multiplayer.turnbased.TurnBasedMatchEntity", link:"reference/com/google/android/gms/games/multiplayer/turnbased/TurnBasedMatchEntity.html", type:"class", deprecated:"false" },
+ { id:462, label:"com.google.android.gms.games.multiplayer.turnbased.TurnBasedMultiplayer", link:"reference/com/google/android/gms/games/multiplayer/turnbased/TurnBasedMultiplayer.html", type:"class", deprecated:"false" },
+ { id:463, label:"com.google.android.gms.games.multiplayer.turnbased.TurnBasedMultiplayer.CancelMatchResult", link:"reference/com/google/android/gms/games/multiplayer/turnbased/TurnBasedMultiplayer.CancelMatchResult.html", type:"class", deprecated:"false" },
+ { id:464, label:"com.google.android.gms.games.multiplayer.turnbased.TurnBasedMultiplayer.InitiateMatchResult", link:"reference/com/google/android/gms/games/multiplayer/turnbased/TurnBasedMultiplayer.InitiateMatchResult.html", type:"class", deprecated:"false" },
+ { id:465, label:"com.google.android.gms.games.multiplayer.turnbased.TurnBasedMultiplayer.LeaveMatchResult", link:"reference/com/google/android/gms/games/multiplayer/turnbased/TurnBasedMultiplayer.LeaveMatchResult.html", type:"class", deprecated:"false" },
+ { id:466, label:"com.google.android.gms.games.multiplayer.turnbased.TurnBasedMultiplayer.LoadMatchResult", link:"reference/com/google/android/gms/games/multiplayer/turnbased/TurnBasedMultiplayer.LoadMatchResult.html", type:"class", deprecated:"false" },
+ { id:467, label:"com.google.android.gms.games.multiplayer.turnbased.TurnBasedMultiplayer.LoadMatchesResult", link:"reference/com/google/android/gms/games/multiplayer/turnbased/TurnBasedMultiplayer.LoadMatchesResult.html", type:"class", deprecated:"false" },
+ { id:468, label:"com.google.android.gms.games.multiplayer.turnbased.TurnBasedMultiplayer.UpdateMatchResult", link:"reference/com/google/android/gms/games/multiplayer/turnbased/TurnBasedMultiplayer.UpdateMatchResult.html", type:"class", deprecated:"false" },
+ { id:469, label:"com.google.android.gms.games.quest", link:"reference/com/google/android/gms/games/quest/package-summary.html", type:"package", deprecated:"false" },
+ { id:470, label:"com.google.android.gms.games.quest.Milestone", link:"reference/com/google/android/gms/games/quest/Milestone.html", type:"class", deprecated:"false" },
+ { id:471, label:"com.google.android.gms.games.quest.MilestoneBuffer", link:"reference/com/google/android/gms/games/quest/MilestoneBuffer.html", type:"class", deprecated:"false" },
+ { id:472, label:"com.google.android.gms.games.quest.MilestoneEntity", link:"reference/com/google/android/gms/games/quest/MilestoneEntity.html", type:"class", deprecated:"false" },
+ { id:473, label:"com.google.android.gms.games.quest.Quest", link:"reference/com/google/android/gms/games/quest/Quest.html", type:"class", deprecated:"false" },
+ { id:474, label:"com.google.android.gms.games.quest.QuestBuffer", link:"reference/com/google/android/gms/games/quest/QuestBuffer.html", type:"class", deprecated:"false" },
+ { id:475, label:"com.google.android.gms.games.quest.QuestEntity", link:"reference/com/google/android/gms/games/quest/QuestEntity.html", type:"class", deprecated:"false" },
+ { id:476, label:"com.google.android.gms.games.quest.QuestUpdateListener", link:"reference/com/google/android/gms/games/quest/QuestUpdateListener.html", type:"class", deprecated:"false" },
+ { id:477, label:"com.google.android.gms.games.quest.Quests", link:"reference/com/google/android/gms/games/quest/Quests.html", type:"class", deprecated:"false" },
+ { id:478, label:"com.google.android.gms.games.quest.Quests.AcceptQuestResult", link:"reference/com/google/android/gms/games/quest/Quests.AcceptQuestResult.html", type:"class", deprecated:"false" },
+ { id:479, label:"com.google.android.gms.games.quest.Quests.ClaimMilestoneResult", link:"reference/com/google/android/gms/games/quest/Quests.ClaimMilestoneResult.html", type:"class", deprecated:"false" },
+ { id:480, label:"com.google.android.gms.games.quest.Quests.LoadQuestsResult", link:"reference/com/google/android/gms/games/quest/Quests.LoadQuestsResult.html", type:"class", deprecated:"false" },
+ { id:481, label:"com.google.android.gms.games.request", link:"reference/com/google/android/gms/games/request/package-summary.html", type:"package", deprecated:"false" },
+ { id:482, label:"com.google.android.gms.games.request.GameRequest", link:"reference/com/google/android/gms/games/request/GameRequest.html", type:"class", deprecated:"false" },
+ { id:483, label:"com.google.android.gms.games.request.GameRequestBuffer", link:"reference/com/google/android/gms/games/request/GameRequestBuffer.html", type:"class", deprecated:"false" },
+ { id:484, label:"com.google.android.gms.games.request.GameRequestEntity", link:"reference/com/google/android/gms/games/request/GameRequestEntity.html", type:"class", deprecated:"false" },
+ { id:485, label:"com.google.android.gms.games.request.OnRequestReceivedListener", link:"reference/com/google/android/gms/games/request/OnRequestReceivedListener.html", type:"class", deprecated:"false" },
+ { id:486, label:"com.google.android.gms.games.request.Requests", link:"reference/com/google/android/gms/games/request/Requests.html", type:"class", deprecated:"false" },
+ { id:487, label:"com.google.android.gms.games.request.Requests.LoadRequestsResult", link:"reference/com/google/android/gms/games/request/Requests.LoadRequestsResult.html", type:"class", deprecated:"false" },
+ { id:488, label:"com.google.android.gms.games.request.Requests.UpdateRequestsResult", link:"reference/com/google/android/gms/games/request/Requests.UpdateRequestsResult.html", type:"class", deprecated:"false" },
+ { id:489, label:"com.google.android.gms.games.snapshot", link:"reference/com/google/android/gms/games/snapshot/package-summary.html", type:"package", deprecated:"false" },
+ { id:490, label:"com.google.android.gms.games.snapshot.Snapshot", link:"reference/com/google/android/gms/games/snapshot/Snapshot.html", type:"class", deprecated:"false" },
+ { id:491, label:"com.google.android.gms.games.snapshot.SnapshotContents", link:"reference/com/google/android/gms/games/snapshot/SnapshotContents.html", type:"class", deprecated:"false" },
+ { id:492, label:"com.google.android.gms.games.snapshot.SnapshotEntity", link:"reference/com/google/android/gms/games/snapshot/SnapshotEntity.html", type:"class", deprecated:"false" },
+ { id:493, label:"com.google.android.gms.games.snapshot.SnapshotMetadata", link:"reference/com/google/android/gms/games/snapshot/SnapshotMetadata.html", type:"class", deprecated:"false" },
+ { id:494, label:"com.google.android.gms.games.snapshot.SnapshotMetadataBuffer", link:"reference/com/google/android/gms/games/snapshot/SnapshotMetadataBuffer.html", type:"class", deprecated:"false" },
+ { id:495, label:"com.google.android.gms.games.snapshot.SnapshotMetadataChange", link:"reference/com/google/android/gms/games/snapshot/SnapshotMetadataChange.html", type:"class", deprecated:"false" },
+ { id:496, label:"com.google.android.gms.games.snapshot.SnapshotMetadataChange.Builder", link:"reference/com/google/android/gms/games/snapshot/SnapshotMetadataChange.Builder.html", type:"class", deprecated:"false" },
+ { id:497, label:"com.google.android.gms.games.snapshot.SnapshotMetadataEntity", link:"reference/com/google/android/gms/games/snapshot/SnapshotMetadataEntity.html", type:"class", deprecated:"false" },
+ { id:498, label:"com.google.android.gms.games.snapshot.Snapshots", link:"reference/com/google/android/gms/games/snapshot/Snapshots.html", type:"class", deprecated:"false" },
+ { id:499, label:"com.google.android.gms.games.snapshot.Snapshots.CommitSnapshotResult", link:"reference/com/google/android/gms/games/snapshot/Snapshots.CommitSnapshotResult.html", type:"class", deprecated:"false" },
+ { id:500, label:"com.google.android.gms.games.snapshot.Snapshots.DeleteSnapshotResult", link:"reference/com/google/android/gms/games/snapshot/Snapshots.DeleteSnapshotResult.html", type:"class", deprecated:"false" },
+ { id:501, label:"com.google.android.gms.games.snapshot.Snapshots.LoadSnapshotsResult", link:"reference/com/google/android/gms/games/snapshot/Snapshots.LoadSnapshotsResult.html", type:"class", deprecated:"false" },
+ { id:502, label:"com.google.android.gms.games.snapshot.Snapshots.OpenSnapshotResult", link:"reference/com/google/android/gms/games/snapshot/Snapshots.OpenSnapshotResult.html", type:"class", deprecated:"false" },
+ { id:503, label:"com.google.android.gms.gcm", link:"reference/com/google/android/gms/gcm/package-summary.html", type:"package", deprecated:"false" },
+ { id:504, label:"com.google.android.gms.gcm.GcmListenerService", link:"reference/com/google/android/gms/gcm/GcmListenerService.html", type:"class", deprecated:"false" },
+ { id:505, label:"com.google.android.gms.gcm.GcmNetworkManager", link:"reference/com/google/android/gms/gcm/GcmNetworkManager.html", type:"class", deprecated:"false" },
+ { id:506, label:"com.google.android.gms.gcm.GcmPubSub", link:"reference/com/google/android/gms/gcm/GcmPubSub.html", type:"class", deprecated:"false" },
+ { id:507, label:"com.google.android.gms.gcm.GcmReceiver", link:"reference/com/google/android/gms/gcm/GcmReceiver.html", type:"class", deprecated:"false" },
+ { id:508, label:"com.google.android.gms.gcm.GcmTaskService", link:"reference/com/google/android/gms/gcm/GcmTaskService.html", type:"class", deprecated:"false" },
+ { id:509, label:"com.google.android.gms.gcm.GoogleCloudMessaging", link:"reference/com/google/android/gms/gcm/GoogleCloudMessaging.html", type:"class", deprecated:"false" },
+ { id:510, label:"com.google.android.gms.gcm.OneoffTask", link:"reference/com/google/android/gms/gcm/OneoffTask.html", type:"class", deprecated:"false" },
+ { id:511, label:"com.google.android.gms.gcm.OneoffTask.Builder", link:"reference/com/google/android/gms/gcm/OneoffTask.Builder.html", type:"class", deprecated:"false" },
+ { id:512, label:"com.google.android.gms.gcm.PeriodicTask", link:"reference/com/google/android/gms/gcm/PeriodicTask.html", type:"class", deprecated:"false" },
+ { id:513, label:"com.google.android.gms.gcm.PeriodicTask.Builder", link:"reference/com/google/android/gms/gcm/PeriodicTask.Builder.html", type:"class", deprecated:"false" },
+ { id:514, label:"com.google.android.gms.gcm.Task", link:"reference/com/google/android/gms/gcm/Task.html", type:"class", deprecated:"false" },
+ { id:515, label:"com.google.android.gms.gcm.Task.Builder", link:"reference/com/google/android/gms/gcm/Task.Builder.html", type:"class", deprecated:"false" },
+ { id:516, label:"com.google.android.gms.gcm.TaskParams", link:"reference/com/google/android/gms/gcm/TaskParams.html", type:"class", deprecated:"false" },
+ { id:517, label:"com.google.android.gms.identity.intents", link:"reference/com/google/android/gms/identity/intents/package-summary.html", type:"package", deprecated:"false" },
+ { id:518, label:"com.google.android.gms.identity.intents.Address", link:"reference/com/google/android/gms/identity/intents/Address.html", type:"class", deprecated:"false" },
+ { id:519, label:"com.google.android.gms.identity.intents.Address.AddressOptions", link:"reference/com/google/android/gms/identity/intents/Address.AddressOptions.html", type:"class", deprecated:"false" },
+ { id:520, label:"com.google.android.gms.identity.intents.AddressConstants", link:"reference/com/google/android/gms/identity/intents/AddressConstants.html", type:"class", deprecated:"false" },
+ { id:521, label:"com.google.android.gms.identity.intents.AddressConstants.ErrorCodes", link:"reference/com/google/android/gms/identity/intents/AddressConstants.ErrorCodes.html", type:"class", deprecated:"false" },
+ { id:522, label:"com.google.android.gms.identity.intents.AddressConstants.Extras", link:"reference/com/google/android/gms/identity/intents/AddressConstants.Extras.html", type:"class", deprecated:"false" },
+ { id:523, label:"com.google.android.gms.identity.intents.AddressConstants.ResultCodes", link:"reference/com/google/android/gms/identity/intents/AddressConstants.ResultCodes.html", type:"class", deprecated:"false" },
+ { id:524, label:"com.google.android.gms.identity.intents.AddressConstants.Themes", link:"reference/com/google/android/gms/identity/intents/AddressConstants.Themes.html", type:"class", deprecated:"false" },
+ { id:525, label:"com.google.android.gms.identity.intents.UserAddressRequest", link:"reference/com/google/android/gms/identity/intents/UserAddressRequest.html", type:"class", deprecated:"false" },
+ { id:526, label:"com.google.android.gms.identity.intents.UserAddressRequest.Builder", link:"reference/com/google/android/gms/identity/intents/UserAddressRequest.Builder.html", type:"class", deprecated:"false" },
+ { id:527, label:"com.google.android.gms.identity.intents.model", link:"reference/com/google/android/gms/identity/intents/model/package-summary.html", type:"package", deprecated:"false" },
+ { id:528, label:"com.google.android.gms.identity.intents.model.CountrySpecification", link:"reference/com/google/android/gms/identity/intents/model/CountrySpecification.html", type:"class", deprecated:"false" },
+ { id:529, label:"com.google.android.gms.identity.intents.model.UserAddress", link:"reference/com/google/android/gms/identity/intents/model/UserAddress.html", type:"class", deprecated:"false" },
+ { id:530, label:"com.google.android.gms.iid", link:"reference/com/google/android/gms/iid/package-summary.html", type:"package", deprecated:"false" },
+ { id:531, label:"com.google.android.gms.iid.InstanceID", link:"reference/com/google/android/gms/iid/InstanceID.html", type:"class", deprecated:"false" },
+ { id:532, label:"com.google.android.gms.iid.InstanceIDListenerService", link:"reference/com/google/android/gms/iid/InstanceIDListenerService.html", type:"class", deprecated:"false" },
+ { id:533, label:"com.google.android.gms.location", link:"reference/com/google/android/gms/location/package-summary.html", type:"package", deprecated:"false" },
+ { id:534, label:"com.google.android.gms.location.ActivityRecognition", link:"reference/com/google/android/gms/location/ActivityRecognition.html", type:"class", deprecated:"false" },
+ { id:535, label:"com.google.android.gms.location.ActivityRecognitionApi", link:"reference/com/google/android/gms/location/ActivityRecognitionApi.html", type:"class", deprecated:"false" },
+ { id:536, label:"com.google.android.gms.location.ActivityRecognitionResult", link:"reference/com/google/android/gms/location/ActivityRecognitionResult.html", type:"class", deprecated:"false" },
+ { id:537, label:"com.google.android.gms.location.DetectedActivity", link:"reference/com/google/android/gms/location/DetectedActivity.html", type:"class", deprecated:"false" },
+ { id:538, label:"com.google.android.gms.location.FusedLocationProviderApi", link:"reference/com/google/android/gms/location/FusedLocationProviderApi.html", type:"class", deprecated:"false" },
+ { id:539, label:"com.google.android.gms.location.Geofence", link:"reference/com/google/android/gms/location/Geofence.html", type:"class", deprecated:"false" },
+ { id:540, label:"com.google.android.gms.location.Geofence.Builder", link:"reference/com/google/android/gms/location/Geofence.Builder.html", type:"class", deprecated:"false" },
+ { id:541, label:"com.google.android.gms.location.GeofenceStatusCodes", link:"reference/com/google/android/gms/location/GeofenceStatusCodes.html", type:"class", deprecated:"false" },
+ { id:542, label:"com.google.android.gms.location.GeofencingApi", link:"reference/com/google/android/gms/location/GeofencingApi.html", type:"class", deprecated:"false" },
+ { id:543, label:"com.google.android.gms.location.GeofencingEvent", link:"reference/com/google/android/gms/location/GeofencingEvent.html", type:"class", deprecated:"false" },
+ { id:544, label:"com.google.android.gms.location.GeofencingRequest", link:"reference/com/google/android/gms/location/GeofencingRequest.html", type:"class", deprecated:"false" },
+ { id:545, label:"com.google.android.gms.location.GeofencingRequest.Builder", link:"reference/com/google/android/gms/location/GeofencingRequest.Builder.html", type:"class", deprecated:"false" },
+ { id:546, label:"com.google.android.gms.location.LocationAvailability", link:"reference/com/google/android/gms/location/LocationAvailability.html", type:"class", deprecated:"false" },
+ { id:547, label:"com.google.android.gms.location.LocationCallback", link:"reference/com/google/android/gms/location/LocationCallback.html", type:"class", deprecated:"false" },
+ { id:548, label:"com.google.android.gms.location.LocationListener", link:"reference/com/google/android/gms/location/LocationListener.html", type:"class", deprecated:"false" },
+ { id:549, label:"com.google.android.gms.location.LocationRequest", link:"reference/com/google/android/gms/location/LocationRequest.html", type:"class", deprecated:"false" },
+ { id:550, label:"com.google.android.gms.location.LocationResult", link:"reference/com/google/android/gms/location/LocationResult.html", type:"class", deprecated:"false" },
+ { id:551, label:"com.google.android.gms.location.LocationServices", link:"reference/com/google/android/gms/location/LocationServices.html", type:"class", deprecated:"false" },
+ { id:552, label:"com.google.android.gms.location.LocationSettingsRequest", link:"reference/com/google/android/gms/location/LocationSettingsRequest.html", type:"class", deprecated:"false" },
+ { id:553, label:"com.google.android.gms.location.LocationSettingsRequest.Builder", link:"reference/com/google/android/gms/location/LocationSettingsRequest.Builder.html", type:"class", deprecated:"false" },
+ { id:554, label:"com.google.android.gms.location.LocationSettingsResult", link:"reference/com/google/android/gms/location/LocationSettingsResult.html", type:"class", deprecated:"false" },
+ { id:555, label:"com.google.android.gms.location.LocationSettingsStates", link:"reference/com/google/android/gms/location/LocationSettingsStates.html", type:"class", deprecated:"false" },
+ { id:556, label:"com.google.android.gms.location.LocationSettingsStatusCodes", link:"reference/com/google/android/gms/location/LocationSettingsStatusCodes.html", type:"class", deprecated:"false" },
+ { id:557, label:"com.google.android.gms.location.LocationStatusCodes", link:"reference/com/google/android/gms/location/LocationStatusCodes.html", type:"class", deprecated:"true" },
+ { id:558, label:"com.google.android.gms.location.SettingsApi", link:"reference/com/google/android/gms/location/SettingsApi.html", type:"class", deprecated:"false" },
+ { id:559, label:"com.google.android.gms.location.places", link:"reference/com/google/android/gms/location/places/package-summary.html", type:"package", deprecated:"false" },
+ { id:560, label:"com.google.android.gms.location.places.AddPlaceRequest", link:"reference/com/google/android/gms/location/places/AddPlaceRequest.html", type:"class", deprecated:"false" },
+ { id:561, label:"com.google.android.gms.location.places.AutocompleteFilter", link:"reference/com/google/android/gms/location/places/AutocompleteFilter.html", type:"class", deprecated:"false" },
+ { id:562, label:"com.google.android.gms.location.places.AutocompletePrediction", link:"reference/com/google/android/gms/location/places/AutocompletePrediction.html", type:"class", deprecated:"false" },
+ { id:563, label:"com.google.android.gms.location.places.AutocompletePrediction.Substring", link:"reference/com/google/android/gms/location/places/AutocompletePrediction.Substring.html", type:"class", deprecated:"false" },
+ { id:564, label:"com.google.android.gms.location.places.AutocompletePredictionBuffer", link:"reference/com/google/android/gms/location/places/AutocompletePredictionBuffer.html", type:"class", deprecated:"false" },
+ { id:565, label:"com.google.android.gms.location.places.GeoDataApi", link:"reference/com/google/android/gms/location/places/GeoDataApi.html", type:"class", deprecated:"false" },
+ { id:566, label:"com.google.android.gms.location.places.Place", link:"reference/com/google/android/gms/location/places/Place.html", type:"class", deprecated:"false" },
+ { id:567, label:"com.google.android.gms.location.places.PlaceBuffer", link:"reference/com/google/android/gms/location/places/PlaceBuffer.html", type:"class", deprecated:"false" },
+ { id:568, label:"com.google.android.gms.location.places.PlaceDetectionApi", link:"reference/com/google/android/gms/location/places/PlaceDetectionApi.html", type:"class", deprecated:"false" },
+ { id:569, label:"com.google.android.gms.location.places.PlaceFilter", link:"reference/com/google/android/gms/location/places/PlaceFilter.html", type:"class", deprecated:"false" },
+ { id:570, label:"com.google.android.gms.location.places.PlaceLikelihood", link:"reference/com/google/android/gms/location/places/PlaceLikelihood.html", type:"class", deprecated:"false" },
+ { id:571, label:"com.google.android.gms.location.places.PlaceLikelihoodBuffer", link:"reference/com/google/android/gms/location/places/PlaceLikelihoodBuffer.html", type:"class", deprecated:"false" },
+ { id:572, label:"com.google.android.gms.location.places.PlacePhotoMetadata", link:"reference/com/google/android/gms/location/places/PlacePhotoMetadata.html", type:"class", deprecated:"false" },
+ { id:573, label:"com.google.android.gms.location.places.PlacePhotoMetadataBuffer", link:"reference/com/google/android/gms/location/places/PlacePhotoMetadataBuffer.html", type:"class", deprecated:"false" },
+ { id:574, label:"com.google.android.gms.location.places.PlacePhotoMetadataResult", link:"reference/com/google/android/gms/location/places/PlacePhotoMetadataResult.html", type:"class", deprecated:"false" },
+ { id:575, label:"com.google.android.gms.location.places.PlacePhotoResult", link:"reference/com/google/android/gms/location/places/PlacePhotoResult.html", type:"class", deprecated:"false" },
+ { id:576, label:"com.google.android.gms.location.places.PlaceReport", link:"reference/com/google/android/gms/location/places/PlaceReport.html", type:"class", deprecated:"false" },
+ { id:577, label:"com.google.android.gms.location.places.PlaceTypes", link:"reference/com/google/android/gms/location/places/PlaceTypes.html", type:"class", deprecated:"false" },
+ { id:578, label:"com.google.android.gms.location.places.Places", link:"reference/com/google/android/gms/location/places/Places.html", type:"class", deprecated:"false" },
+ { id:579, label:"com.google.android.gms.location.places.PlacesOptions", link:"reference/com/google/android/gms/location/places/PlacesOptions.html", type:"class", deprecated:"false" },
+ { id:580, label:"com.google.android.gms.location.places.PlacesOptions.Builder", link:"reference/com/google/android/gms/location/places/PlacesOptions.Builder.html", type:"class", deprecated:"false" },
+ { id:581, label:"com.google.android.gms.location.places.PlacesStatusCodes", link:"reference/com/google/android/gms/location/places/PlacesStatusCodes.html", type:"class", deprecated:"false" },
+ { id:582, label:"com.google.android.gms.location.places.ui", link:"reference/com/google/android/gms/location/places/ui/package-summary.html", type:"package", deprecated:"false" },
+ { id:583, label:"com.google.android.gms.location.places.ui.PlacePicker", link:"reference/com/google/android/gms/location/places/ui/PlacePicker.html", type:"class", deprecated:"false" },
+ { id:584, label:"com.google.android.gms.location.places.ui.PlacePicker.IntentBuilder", link:"reference/com/google/android/gms/location/places/ui/PlacePicker.IntentBuilder.html", type:"class", deprecated:"false" },
+ { id:585, label:"com.google.android.gms.maps", link:"reference/com/google/android/gms/maps/package-summary.html", type:"package", deprecated:"false" },
+ { id:586, label:"com.google.android.gms.maps.CameraUpdate", link:"reference/com/google/android/gms/maps/CameraUpdate.html", type:"class", deprecated:"false" },
+ { id:587, label:"com.google.android.gms.maps.CameraUpdateFactory", link:"reference/com/google/android/gms/maps/CameraUpdateFactory.html", type:"class", deprecated:"false" },
+ { id:588, label:"com.google.android.gms.maps.GoogleMap", link:"reference/com/google/android/gms/maps/GoogleMap.html", type:"class", deprecated:"false" },
+ { id:589, label:"com.google.android.gms.maps.GoogleMap.CancelableCallback", link:"reference/com/google/android/gms/maps/GoogleMap.CancelableCallback.html", type:"class", deprecated:"false" },
+ { id:590, label:"com.google.android.gms.maps.GoogleMap.InfoWindowAdapter", link:"reference/com/google/android/gms/maps/GoogleMap.InfoWindowAdapter.html", type:"class", deprecated:"false" },
+ { id:591, label:"com.google.android.gms.maps.GoogleMap.OnCameraChangeListener", link:"reference/com/google/android/gms/maps/GoogleMap.OnCameraChangeListener.html", type:"class", deprecated:"false" },
+ { id:592, label:"com.google.android.gms.maps.GoogleMap.OnIndoorStateChangeListener", link:"reference/com/google/android/gms/maps/GoogleMap.OnIndoorStateChangeListener.html", type:"class", deprecated:"false" },
+ { id:593, label:"com.google.android.gms.maps.GoogleMap.OnInfoWindowClickListener", link:"reference/com/google/android/gms/maps/GoogleMap.OnInfoWindowClickListener.html", type:"class", deprecated:"false" },
+ { id:594, label:"com.google.android.gms.maps.GoogleMap.OnMapClickListener", link:"reference/com/google/android/gms/maps/GoogleMap.OnMapClickListener.html", type:"class", deprecated:"false" },
+ { id:595, label:"com.google.android.gms.maps.GoogleMap.OnMapLoadedCallback", link:"reference/com/google/android/gms/maps/GoogleMap.OnMapLoadedCallback.html", type:"class", deprecated:"false" },
+ { id:596, label:"com.google.android.gms.maps.GoogleMap.OnMapLongClickListener", link:"reference/com/google/android/gms/maps/GoogleMap.OnMapLongClickListener.html", type:"class", deprecated:"false" },
+ { id:597, label:"com.google.android.gms.maps.GoogleMap.OnMarkerClickListener", link:"reference/com/google/android/gms/maps/GoogleMap.OnMarkerClickListener.html", type:"class", deprecated:"false" },
+ { id:598, label:"com.google.android.gms.maps.GoogleMap.OnMarkerDragListener", link:"reference/com/google/android/gms/maps/GoogleMap.OnMarkerDragListener.html", type:"class", deprecated:"false" },
+ { id:599, label:"com.google.android.gms.maps.GoogleMap.OnMyLocationButtonClickListener", link:"reference/com/google/android/gms/maps/GoogleMap.OnMyLocationButtonClickListener.html", type:"class", deprecated:"false" },
+ { id:600, label:"com.google.android.gms.maps.GoogleMap.OnMyLocationChangeListener", link:"reference/com/google/android/gms/maps/GoogleMap.OnMyLocationChangeListener.html", type:"class", deprecated:"true" },
+ { id:601, label:"com.google.android.gms.maps.GoogleMap.SnapshotReadyCallback", link:"reference/com/google/android/gms/maps/GoogleMap.SnapshotReadyCallback.html", type:"class", deprecated:"false" },
+ { id:602, label:"com.google.android.gms.maps.GoogleMapOptions", link:"reference/com/google/android/gms/maps/GoogleMapOptions.html", type:"class", deprecated:"false" },
+ { id:603, label:"com.google.android.gms.maps.LocationSource", link:"reference/com/google/android/gms/maps/LocationSource.html", type:"class", deprecated:"false" },
+ { id:604, label:"com.google.android.gms.maps.LocationSource.OnLocationChangedListener", link:"reference/com/google/android/gms/maps/LocationSource.OnLocationChangedListener.html", type:"class", deprecated:"false" },
+ { id:605, label:"com.google.android.gms.maps.MapFragment", link:"reference/com/google/android/gms/maps/MapFragment.html", type:"class", deprecated:"false" },
+ { id:606, label:"com.google.android.gms.maps.MapView", link:"reference/com/google/android/gms/maps/MapView.html", type:"class", deprecated:"false" },
+ { id:607, label:"com.google.android.gms.maps.MapsInitializer", link:"reference/com/google/android/gms/maps/MapsInitializer.html", type:"class", deprecated:"false" },
+ { id:608, label:"com.google.android.gms.maps.OnMapReadyCallback", link:"reference/com/google/android/gms/maps/OnMapReadyCallback.html", type:"class", deprecated:"false" },
+ { id:609, label:"com.google.android.gms.maps.OnStreetViewPanoramaReadyCallback", link:"reference/com/google/android/gms/maps/OnStreetViewPanoramaReadyCallback.html", type:"class", deprecated:"false" },
+ { id:610, label:"com.google.android.gms.maps.Projection", link:"reference/com/google/android/gms/maps/Projection.html", type:"class", deprecated:"false" },
+ { id:611, label:"com.google.android.gms.maps.StreetViewPanorama", link:"reference/com/google/android/gms/maps/StreetViewPanorama.html", type:"class", deprecated:"false" },
+ { id:612, label:"com.google.android.gms.maps.StreetViewPanorama.OnStreetViewPanoramaCameraChangeListener", link:"reference/com/google/android/gms/maps/StreetViewPanorama.OnStreetViewPanoramaCameraChangeListener.html", type:"class", deprecated:"false" },
+ { id:613, label:"com.google.android.gms.maps.StreetViewPanorama.OnStreetViewPanoramaChangeListener", link:"reference/com/google/android/gms/maps/StreetViewPanorama.OnStreetViewPanoramaChangeListener.html", type:"class", deprecated:"false" },
+ { id:614, label:"com.google.android.gms.maps.StreetViewPanorama.OnStreetViewPanoramaClickListener", link:"reference/com/google/android/gms/maps/StreetViewPanorama.OnStreetViewPanoramaClickListener.html", type:"class", deprecated:"false" },
+ { id:615, label:"com.google.android.gms.maps.StreetViewPanorama.OnStreetViewPanoramaLongClickListener", link:"reference/com/google/android/gms/maps/StreetViewPanorama.OnStreetViewPanoramaLongClickListener.html", type:"class", deprecated:"false" },
+ { id:616, label:"com.google.android.gms.maps.StreetViewPanoramaFragment", link:"reference/com/google/android/gms/maps/StreetViewPanoramaFragment.html", type:"class", deprecated:"false" },
+ { id:617, label:"com.google.android.gms.maps.StreetViewPanoramaOptions", link:"reference/com/google/android/gms/maps/StreetViewPanoramaOptions.html", type:"class", deprecated:"false" },
+ { id:618, label:"com.google.android.gms.maps.StreetViewPanoramaView", link:"reference/com/google/android/gms/maps/StreetViewPanoramaView.html", type:"class", deprecated:"false" },
+ { id:619, label:"com.google.android.gms.maps.SupportMapFragment", link:"reference/com/google/android/gms/maps/SupportMapFragment.html", type:"class", deprecated:"false" },
+ { id:620, label:"com.google.android.gms.maps.SupportStreetViewPanoramaFragment", link:"reference/com/google/android/gms/maps/SupportStreetViewPanoramaFragment.html", type:"class", deprecated:"false" },
+ { id:621, label:"com.google.android.gms.maps.UiSettings", link:"reference/com/google/android/gms/maps/UiSettings.html", type:"class", deprecated:"false" },
+ { id:622, label:"com.google.android.gms.maps.model", link:"reference/com/google/android/gms/maps/model/package-summary.html", type:"package", deprecated:"false" },
+ { id:623, label:"com.google.android.gms.maps.model.BitmapDescriptor", link:"reference/com/google/android/gms/maps/model/BitmapDescriptor.html", type:"class", deprecated:"false" },
+ { id:624, label:"com.google.android.gms.maps.model.BitmapDescriptorFactory", link:"reference/com/google/android/gms/maps/model/BitmapDescriptorFactory.html", type:"class", deprecated:"false" },
+ { id:625, label:"com.google.android.gms.maps.model.CameraPosition", link:"reference/com/google/android/gms/maps/model/CameraPosition.html", type:"class", deprecated:"false" },
+ { id:626, label:"com.google.android.gms.maps.model.CameraPosition.Builder", link:"reference/com/google/android/gms/maps/model/CameraPosition.Builder.html", type:"class", deprecated:"false" },
+ { id:627, label:"com.google.android.gms.maps.model.Circle", link:"reference/com/google/android/gms/maps/model/Circle.html", type:"class", deprecated:"false" },
+ { id:628, label:"com.google.android.gms.maps.model.CircleOptions", link:"reference/com/google/android/gms/maps/model/CircleOptions.html", type:"class", deprecated:"false" },
+ { id:629, label:"com.google.android.gms.maps.model.GroundOverlay", link:"reference/com/google/android/gms/maps/model/GroundOverlay.html", type:"class", deprecated:"false" },
+ { id:630, label:"com.google.android.gms.maps.model.GroundOverlayOptions", link:"reference/com/google/android/gms/maps/model/GroundOverlayOptions.html", type:"class", deprecated:"false" },
+ { id:631, label:"com.google.android.gms.maps.model.IndoorBuilding", link:"reference/com/google/android/gms/maps/model/IndoorBuilding.html", type:"class", deprecated:"false" },
+ { id:632, label:"com.google.android.gms.maps.model.IndoorLevel", link:"reference/com/google/android/gms/maps/model/IndoorLevel.html", type:"class", deprecated:"false" },
+ { id:633, label:"com.google.android.gms.maps.model.LatLng", link:"reference/com/google/android/gms/maps/model/LatLng.html", type:"class", deprecated:"false" },
+ { id:634, label:"com.google.android.gms.maps.model.LatLngBounds", link:"reference/com/google/android/gms/maps/model/LatLngBounds.html", type:"class", deprecated:"false" },
+ { id:635, label:"com.google.android.gms.maps.model.LatLngBounds.Builder", link:"reference/com/google/android/gms/maps/model/LatLngBounds.Builder.html", type:"class", deprecated:"false" },
+ { id:636, label:"com.google.android.gms.maps.model.Marker", link:"reference/com/google/android/gms/maps/model/Marker.html", type:"class", deprecated:"false" },
+ { id:637, label:"com.google.android.gms.maps.model.MarkerOptions", link:"reference/com/google/android/gms/maps/model/MarkerOptions.html", type:"class", deprecated:"false" },
+ { id:638, label:"com.google.android.gms.maps.model.Polygon", link:"reference/com/google/android/gms/maps/model/Polygon.html", type:"class", deprecated:"false" },
+ { id:639, label:"com.google.android.gms.maps.model.PolygonOptions", link:"reference/com/google/android/gms/maps/model/PolygonOptions.html", type:"class", deprecated:"false" },
+ { id:640, label:"com.google.android.gms.maps.model.Polyline", link:"reference/com/google/android/gms/maps/model/Polyline.html", type:"class", deprecated:"false" },
+ { id:641, label:"com.google.android.gms.maps.model.PolylineOptions", link:"reference/com/google/android/gms/maps/model/PolylineOptions.html", type:"class", deprecated:"false" },
+ { id:642, label:"com.google.android.gms.maps.model.RuntimeRemoteException", link:"reference/com/google/android/gms/maps/model/RuntimeRemoteException.html", type:"class", deprecated:"false" },
+ { id:643, label:"com.google.android.gms.maps.model.StreetViewPanoramaCamera", link:"reference/com/google/android/gms/maps/model/StreetViewPanoramaCamera.html", type:"class", deprecated:"false" },
+ { id:644, label:"com.google.android.gms.maps.model.StreetViewPanoramaCamera.Builder", link:"reference/com/google/android/gms/maps/model/StreetViewPanoramaCamera.Builder.html", type:"class", deprecated:"false" },
+ { id:645, label:"com.google.android.gms.maps.model.StreetViewPanoramaLink", link:"reference/com/google/android/gms/maps/model/StreetViewPanoramaLink.html", type:"class", deprecated:"false" },
+ { id:646, label:"com.google.android.gms.maps.model.StreetViewPanoramaLocation", link:"reference/com/google/android/gms/maps/model/StreetViewPanoramaLocation.html", type:"class", deprecated:"false" },
+ { id:647, label:"com.google.android.gms.maps.model.StreetViewPanoramaOrientation", link:"reference/com/google/android/gms/maps/model/StreetViewPanoramaOrientation.html", type:"class", deprecated:"false" },
+ { id:648, label:"com.google.android.gms.maps.model.StreetViewPanoramaOrientation.Builder", link:"reference/com/google/android/gms/maps/model/StreetViewPanoramaOrientation.Builder.html", type:"class", deprecated:"false" },
+ { id:649, label:"com.google.android.gms.maps.model.Tile", link:"reference/com/google/android/gms/maps/model/Tile.html", type:"class", deprecated:"false" },
+ { id:650, label:"com.google.android.gms.maps.model.TileOverlay", link:"reference/com/google/android/gms/maps/model/TileOverlay.html", type:"class", deprecated:"false" },
+ { id:651, label:"com.google.android.gms.maps.model.TileOverlayOptions", link:"reference/com/google/android/gms/maps/model/TileOverlayOptions.html", type:"class", deprecated:"false" },
+ { id:652, label:"com.google.android.gms.maps.model.TileProvider", link:"reference/com/google/android/gms/maps/model/TileProvider.html", type:"class", deprecated:"false" },
+ { id:653, label:"com.google.android.gms.maps.model.UrlTileProvider", link:"reference/com/google/android/gms/maps/model/UrlTileProvider.html", type:"class", deprecated:"false" },
+ { id:654, label:"com.google.android.gms.maps.model.VisibleRegion", link:"reference/com/google/android/gms/maps/model/VisibleRegion.html", type:"class", deprecated:"false" },
+ { id:655, label:"com.google.android.gms.nearby", link:"reference/com/google/android/gms/nearby/package-summary.html", type:"package", deprecated:"false" },
+ { id:656, label:"com.google.android.gms.nearby.Nearby", link:"reference/com/google/android/gms/nearby/Nearby.html", type:"class", deprecated:"false" },
+ { id:657, label:"com.google.android.gms.nearby.connection", link:"reference/com/google/android/gms/nearby/connection/package-summary.html", type:"package", deprecated:"false" },
+ { id:658, label:"com.google.android.gms.nearby.connection.AppIdentifier", link:"reference/com/google/android/gms/nearby/connection/AppIdentifier.html", type:"class", deprecated:"false" },
+ { id:659, label:"com.google.android.gms.nearby.connection.AppMetadata", link:"reference/com/google/android/gms/nearby/connection/AppMetadata.html", type:"class", deprecated:"false" },
+ { id:660, label:"com.google.android.gms.nearby.connection.Connections", link:"reference/com/google/android/gms/nearby/connection/Connections.html", type:"class", deprecated:"false" },
+ { id:661, label:"com.google.android.gms.nearby.connection.Connections.ConnectionRequestListener", link:"reference/com/google/android/gms/nearby/connection/Connections.ConnectionRequestListener.html", type:"class", deprecated:"false" },
+ { id:662, label:"com.google.android.gms.nearby.connection.Connections.ConnectionResponseCallback", link:"reference/com/google/android/gms/nearby/connection/Connections.ConnectionResponseCallback.html", type:"class", deprecated:"false" },
+ { id:663, label:"com.google.android.gms.nearby.connection.Connections.EndpointDiscoveryListener", link:"reference/com/google/android/gms/nearby/connection/Connections.EndpointDiscoveryListener.html", type:"class", deprecated:"false" },
+ { id:664, label:"com.google.android.gms.nearby.connection.Connections.MessageListener", link:"reference/com/google/android/gms/nearby/connection/Connections.MessageListener.html", type:"class", deprecated:"false" },
+ { id:665, label:"com.google.android.gms.nearby.connection.Connections.StartAdvertisingResult", link:"reference/com/google/android/gms/nearby/connection/Connections.StartAdvertisingResult.html", type:"class", deprecated:"false" },
+ { id:666, label:"com.google.android.gms.nearby.connection.ConnectionsStatusCodes", link:"reference/com/google/android/gms/nearby/connection/ConnectionsStatusCodes.html", type:"class", deprecated:"false" },
+ { id:667, label:"com.google.android.gms.nearby.messages", link:"reference/com/google/android/gms/nearby/messages/package-summary.html", type:"package", deprecated:"false" },
+ { id:668, label:"com.google.android.gms.nearby.messages.Message", link:"reference/com/google/android/gms/nearby/messages/Message.html", type:"class", deprecated:"false" },
+ { id:669, label:"com.google.android.gms.nearby.messages.MessageFilter", link:"reference/com/google/android/gms/nearby/messages/MessageFilter.html", type:"class", deprecated:"false" },
+ { id:670, label:"com.google.android.gms.nearby.messages.MessageFilter.Builder", link:"reference/com/google/android/gms/nearby/messages/MessageFilter.Builder.html", type:"class", deprecated:"false" },
+ { id:671, label:"com.google.android.gms.nearby.messages.MessageListener", link:"reference/com/google/android/gms/nearby/messages/MessageListener.html", type:"class", deprecated:"false" },
+ { id:672, label:"com.google.android.gms.nearby.messages.Messages", link:"reference/com/google/android/gms/nearby/messages/Messages.html", type:"class", deprecated:"false" },
+ { id:673, label:"com.google.android.gms.nearby.messages.MessagesOptions", link:"reference/com/google/android/gms/nearby/messages/MessagesOptions.html", type:"class", deprecated:"false" },
+ { id:674, label:"com.google.android.gms.nearby.messages.NearbyMessagesStatusCodes", link:"reference/com/google/android/gms/nearby/messages/NearbyMessagesStatusCodes.html", type:"class", deprecated:"false" },
+ { id:675, label:"com.google.android.gms.nearby.messages.Strategy", link:"reference/com/google/android/gms/nearby/messages/Strategy.html", type:"class", deprecated:"false" },
+ { id:676, label:"com.google.android.gms.nearby.messages.Strategy.Builder", link:"reference/com/google/android/gms/nearby/messages/Strategy.Builder.html", type:"class", deprecated:"false" },
+ { id:677, label:"com.google.android.gms.panorama", link:"reference/com/google/android/gms/panorama/package-summary.html", type:"package", deprecated:"false" },
+ { id:678, label:"com.google.android.gms.panorama.Panorama", link:"reference/com/google/android/gms/panorama/Panorama.html", type:"class", deprecated:"false" },
+ { id:679, label:"com.google.android.gms.panorama.PanoramaApi", link:"reference/com/google/android/gms/panorama/PanoramaApi.html", type:"class", deprecated:"false" },
+ { id:680, label:"com.google.android.gms.panorama.PanoramaApi.PanoramaResult", link:"reference/com/google/android/gms/panorama/PanoramaApi.PanoramaResult.html", type:"class", deprecated:"false" },
+ { id:681, label:"com.google.android.gms.plus", link:"reference/com/google/android/gms/plus/package-summary.html", type:"package", deprecated:"false" },
+ { id:682, label:"com.google.android.gms.plus.Account", link:"reference/com/google/android/gms/plus/Account.html", type:"class", deprecated:"false" },
+ { id:683, label:"com.google.android.gms.plus.Moments", link:"reference/com/google/android/gms/plus/Moments.html", type:"class", deprecated:"false" },
+ { id:684, label:"com.google.android.gms.plus.Moments.LoadMomentsResult", link:"reference/com/google/android/gms/plus/Moments.LoadMomentsResult.html", type:"class", deprecated:"false" },
+ { id:685, label:"com.google.android.gms.plus.People", link:"reference/com/google/android/gms/plus/People.html", type:"class", deprecated:"false" },
+ { id:686, label:"com.google.android.gms.plus.People.LoadPeopleResult", link:"reference/com/google/android/gms/plus/People.LoadPeopleResult.html", type:"class", deprecated:"false" },
+ { id:687, label:"com.google.android.gms.plus.People.OrderBy", link:"reference/com/google/android/gms/plus/People.OrderBy.html", type:"class", deprecated:"false" },
+ { id:688, label:"com.google.android.gms.plus.Plus", link:"reference/com/google/android/gms/plus/Plus.html", type:"class", deprecated:"false" },
+ { id:689, label:"com.google.android.gms.plus.Plus.PlusOptions", link:"reference/com/google/android/gms/plus/Plus.PlusOptions.html", type:"class", deprecated:"false" },
+ { id:690, label:"com.google.android.gms.plus.Plus.PlusOptions.Builder", link:"reference/com/google/android/gms/plus/Plus.PlusOptions.Builder.html", type:"class", deprecated:"false" },
+ { id:691, label:"com.google.android.gms.plus.PlusOneButton", link:"reference/com/google/android/gms/plus/PlusOneButton.html", type:"class", deprecated:"false" },
+ { id:692, label:"com.google.android.gms.plus.PlusOneButton.DefaultOnPlusOneClickListener", link:"reference/com/google/android/gms/plus/PlusOneButton.DefaultOnPlusOneClickListener.html", type:"class", deprecated:"false" },
+ { id:693, label:"com.google.android.gms.plus.PlusOneButton.OnPlusOneClickListener", link:"reference/com/google/android/gms/plus/PlusOneButton.OnPlusOneClickListener.html", type:"class", deprecated:"false" },
+ { id:694, label:"com.google.android.gms.plus.PlusOneDummyView", link:"reference/com/google/android/gms/plus/PlusOneDummyView.html", type:"class", deprecated:"false" },
+ { id:695, label:"com.google.android.gms.plus.PlusShare", link:"reference/com/google/android/gms/plus/PlusShare.html", type:"class", deprecated:"false" },
+ { id:696, label:"com.google.android.gms.plus.PlusShare.Builder", link:"reference/com/google/android/gms/plus/PlusShare.Builder.html", type:"class", deprecated:"false" },
+ { id:697, label:"com.google.android.gms.plus.model.moments", link:"reference/com/google/android/gms/plus/model/moments/package-summary.html", type:"package", deprecated:"false" },
+ { id:698, label:"com.google.android.gms.plus.model.moments.ItemScope", link:"reference/com/google/android/gms/plus/model/moments/ItemScope.html", type:"class", deprecated:"false" },
+ { id:699, label:"com.google.android.gms.plus.model.moments.ItemScope.Builder", link:"reference/com/google/android/gms/plus/model/moments/ItemScope.Builder.html", type:"class", deprecated:"false" },
+ { id:700, label:"com.google.android.gms.plus.model.moments.Moment", link:"reference/com/google/android/gms/plus/model/moments/Moment.html", type:"class", deprecated:"false" },
+ { id:701, label:"com.google.android.gms.plus.model.moments.Moment.Builder", link:"reference/com/google/android/gms/plus/model/moments/Moment.Builder.html", type:"class", deprecated:"false" },
+ { id:702, label:"com.google.android.gms.plus.model.moments.MomentBuffer", link:"reference/com/google/android/gms/plus/model/moments/MomentBuffer.html", type:"class", deprecated:"false" },
+ { id:703, label:"com.google.android.gms.plus.model.people", link:"reference/com/google/android/gms/plus/model/people/package-summary.html", type:"package", deprecated:"false" },
+ { id:704, label:"com.google.android.gms.plus.model.people.Person", link:"reference/com/google/android/gms/plus/model/people/Person.html", type:"class", deprecated:"false" },
+ { id:705, label:"com.google.android.gms.plus.model.people.Person.AgeRange", link:"reference/com/google/android/gms/plus/model/people/Person.AgeRange.html", type:"class", deprecated:"false" },
+ { id:706, label:"com.google.android.gms.plus.model.people.Person.Cover", link:"reference/com/google/android/gms/plus/model/people/Person.Cover.html", type:"class", deprecated:"false" },
+ { id:707, label:"com.google.android.gms.plus.model.people.Person.Cover.CoverInfo", link:"reference/com/google/android/gms/plus/model/people/Person.Cover.CoverInfo.html", type:"class", deprecated:"false" },
+ { id:708, label:"com.google.android.gms.plus.model.people.Person.Cover.CoverPhoto", link:"reference/com/google/android/gms/plus/model/people/Person.Cover.CoverPhoto.html", type:"class", deprecated:"false" },
+ { id:709, label:"com.google.android.gms.plus.model.people.Person.Cover.Layout", link:"reference/com/google/android/gms/plus/model/people/Person.Cover.Layout.html", type:"class", deprecated:"false" },
+ { id:710, label:"com.google.android.gms.plus.model.people.Person.Gender", link:"reference/com/google/android/gms/plus/model/people/Person.Gender.html", type:"class", deprecated:"false" },
+ { id:711, label:"com.google.android.gms.plus.model.people.Person.Image", link:"reference/com/google/android/gms/plus/model/people/Person.Image.html", type:"class", deprecated:"false" },
+ { id:712, label:"com.google.android.gms.plus.model.people.Person.Name", link:"reference/com/google/android/gms/plus/model/people/Person.Name.html", type:"class", deprecated:"false" },
+ { id:713, label:"com.google.android.gms.plus.model.people.Person.ObjectType", link:"reference/com/google/android/gms/plus/model/people/Person.ObjectType.html", type:"class", deprecated:"false" },
+ { id:714, label:"com.google.android.gms.plus.model.people.Person.Organizations", link:"reference/com/google/android/gms/plus/model/people/Person.Organizations.html", type:"class", deprecated:"false" },
+ { id:715, label:"com.google.android.gms.plus.model.people.Person.Organizations.Type", link:"reference/com/google/android/gms/plus/model/people/Person.Organizations.Type.html", type:"class", deprecated:"false" },
+ { id:716, label:"com.google.android.gms.plus.model.people.Person.PlacesLived", link:"reference/com/google/android/gms/plus/model/people/Person.PlacesLived.html", type:"class", deprecated:"false" },
+ { id:717, label:"com.google.android.gms.plus.model.people.Person.RelationshipStatus", link:"reference/com/google/android/gms/plus/model/people/Person.RelationshipStatus.html", type:"class", deprecated:"false" },
+ { id:718, label:"com.google.android.gms.plus.model.people.Person.Urls", link:"reference/com/google/android/gms/plus/model/people/Person.Urls.html", type:"class", deprecated:"false" },
+ { id:719, label:"com.google.android.gms.plus.model.people.Person.Urls.Type", link:"reference/com/google/android/gms/plus/model/people/Person.Urls.Type.html", type:"class", deprecated:"false" },
+ { id:720, label:"com.google.android.gms.plus.model.people.PersonBuffer", link:"reference/com/google/android/gms/plus/model/people/PersonBuffer.html", type:"class", deprecated:"false" },
+ { id:721, label:"com.google.android.gms.safetynet", link:"reference/com/google/android/gms/safetynet/package-summary.html", type:"package", deprecated:"false" },
+ { id:722, label:"com.google.android.gms.safetynet.SafetyNet", link:"reference/com/google/android/gms/safetynet/SafetyNet.html", type:"class", deprecated:"false" },
+ { id:723, label:"com.google.android.gms.safetynet.SafetyNetApi", link:"reference/com/google/android/gms/safetynet/SafetyNetApi.html", type:"class", deprecated:"false" },
+ { id:724, label:"com.google.android.gms.safetynet.SafetyNetApi.AttestationResult", link:"reference/com/google/android/gms/safetynet/SafetyNetApi.AttestationResult.html", type:"class", deprecated:"false" },
+ { id:725, label:"com.google.android.gms.search", link:"reference/com/google/android/gms/search/package-summary.html", type:"package", deprecated:"false" },
+ { id:726, label:"com.google.android.gms.search.GoogleNowAuthState", link:"reference/com/google/android/gms/search/GoogleNowAuthState.html", type:"class", deprecated:"false" },
+ { id:727, label:"com.google.android.gms.search.SearchAuth", link:"reference/com/google/android/gms/search/SearchAuth.html", type:"class", deprecated:"false" },
+ { id:728, label:"com.google.android.gms.search.SearchAuth.StatusCodes", link:"reference/com/google/android/gms/search/SearchAuth.StatusCodes.html", type:"class", deprecated:"false" },
+ { id:729, label:"com.google.android.gms.search.SearchAuthApi", link:"reference/com/google/android/gms/search/SearchAuthApi.html", type:"class", deprecated:"false" },
+ { id:730, label:"com.google.android.gms.search.SearchAuthApi.GoogleNowAuthResult", link:"reference/com/google/android/gms/search/SearchAuthApi.GoogleNowAuthResult.html", type:"class", deprecated:"false" },
+ { id:731, label:"com.google.android.gms.security", link:"reference/com/google/android/gms/security/package-summary.html", type:"package", deprecated:"false" },
+ { id:732, label:"com.google.android.gms.security.ProviderInstaller", link:"reference/com/google/android/gms/security/ProviderInstaller.html", type:"class", deprecated:"false" },
+ { id:733, label:"com.google.android.gms.security.ProviderInstaller.ProviderInstallListener", link:"reference/com/google/android/gms/security/ProviderInstaller.ProviderInstallListener.html", type:"class", deprecated:"false" },
+ { id:734, label:"com.google.android.gms.tagmanager", link:"reference/com/google/android/gms/tagmanager/package-summary.html", type:"package", deprecated:"false" },
+ { id:735, label:"com.google.android.gms.tagmanager.Container", link:"reference/com/google/android/gms/tagmanager/Container.html", type:"class", deprecated:"false" },
+ { id:736, label:"com.google.android.gms.tagmanager.Container.FunctionCallMacroCallback", link:"reference/com/google/android/gms/tagmanager/Container.FunctionCallMacroCallback.html", type:"class", deprecated:"false" },
+ { id:737, label:"com.google.android.gms.tagmanager.Container.FunctionCallTagCallback", link:"reference/com/google/android/gms/tagmanager/Container.FunctionCallTagCallback.html", type:"class", deprecated:"false" },
+ { id:738, label:"com.google.android.gms.tagmanager.ContainerHolder", link:"reference/com/google/android/gms/tagmanager/ContainerHolder.html", type:"class", deprecated:"false" },
+ { id:739, label:"com.google.android.gms.tagmanager.ContainerHolder.ContainerAvailableListener", link:"reference/com/google/android/gms/tagmanager/ContainerHolder.ContainerAvailableListener.html", type:"class", deprecated:"false" },
+ { id:740, label:"com.google.android.gms.tagmanager.DataLayer", link:"reference/com/google/android/gms/tagmanager/DataLayer.html", type:"class", deprecated:"false" },
+ { id:741, label:"com.google.android.gms.tagmanager.InstallReferrerReceiver", link:"reference/com/google/android/gms/tagmanager/InstallReferrerReceiver.html", type:"class", deprecated:"false" },
+ { id:742, label:"com.google.android.gms.tagmanager.InstallReferrerService", link:"reference/com/google/android/gms/tagmanager/InstallReferrerService.html", type:"class", deprecated:"false" },
+ { id:743, label:"com.google.android.gms.tagmanager.PreviewActivity", link:"reference/com/google/android/gms/tagmanager/PreviewActivity.html", type:"class", deprecated:"false" },
+ { id:744, label:"com.google.android.gms.tagmanager.TagManager", link:"reference/com/google/android/gms/tagmanager/TagManager.html", type:"class", deprecated:"false" },
+ { id:745, label:"com.google.android.gms.vision", link:"reference/com/google/android/gms/vision/package-summary.html", type:"package", deprecated:"false" },
+ { id:746, label:"com.google.android.gms.vision.CameraSource", link:"reference/com/google/android/gms/vision/CameraSource.html", type:"class", deprecated:"false" },
+ { id:747, label:"com.google.android.gms.vision.CameraSource.Builder", link:"reference/com/google/android/gms/vision/CameraSource.Builder.html", type:"class", deprecated:"false" },
+ { id:748, label:"com.google.android.gms.vision.CameraSource.PictureCallback", link:"reference/com/google/android/gms/vision/CameraSource.PictureCallback.html", type:"class", deprecated:"false" },
+ { id:749, label:"com.google.android.gms.vision.CameraSource.ShutterCallback", link:"reference/com/google/android/gms/vision/CameraSource.ShutterCallback.html", type:"class", deprecated:"false" },
+ { id:750, label:"com.google.android.gms.vision.Detector", link:"reference/com/google/android/gms/vision/Detector.html", type:"class", deprecated:"false" },
+ { id:751, label:"com.google.android.gms.vision.Detector.Detections", link:"reference/com/google/android/gms/vision/Detector.Detections.html", type:"class", deprecated:"false" },
+ { id:752, label:"com.google.android.gms.vision.Detector.Processor", link:"reference/com/google/android/gms/vision/Detector.Processor.html", type:"class", deprecated:"false" },
+ { id:753, label:"com.google.android.gms.vision.FocusingProcessor", link:"reference/com/google/android/gms/vision/FocusingProcessor.html", type:"class", deprecated:"false" },
+ { id:754, label:"com.google.android.gms.vision.Frame", link:"reference/com/google/android/gms/vision/Frame.html", type:"class", deprecated:"false" },
+ { id:755, label:"com.google.android.gms.vision.Frame.Builder", link:"reference/com/google/android/gms/vision/Frame.Builder.html", type:"class", deprecated:"false" },
+ { id:756, label:"com.google.android.gms.vision.Frame.Metadata", link:"reference/com/google/android/gms/vision/Frame.Metadata.html", type:"class", deprecated:"false" },
+ { id:757, label:"com.google.android.gms.vision.MultiDetector", link:"reference/com/google/android/gms/vision/MultiDetector.html", type:"class", deprecated:"false" },
+ { id:758, label:"com.google.android.gms.vision.MultiDetector.Builder", link:"reference/com/google/android/gms/vision/MultiDetector.Builder.html", type:"class", deprecated:"false" },
+ { id:759, label:"com.google.android.gms.vision.MultiProcessor", link:"reference/com/google/android/gms/vision/MultiProcessor.html", type:"class", deprecated:"false" },
+ { id:760, label:"com.google.android.gms.vision.MultiProcessor.Builder", link:"reference/com/google/android/gms/vision/MultiProcessor.Builder.html", type:"class", deprecated:"false" },
+ { id:761, label:"com.google.android.gms.vision.MultiProcessor.Factory", link:"reference/com/google/android/gms/vision/MultiProcessor.Factory.html", type:"class", deprecated:"false" },
+ { id:762, label:"com.google.android.gms.vision.Tracker", link:"reference/com/google/android/gms/vision/Tracker.html", type:"class", deprecated:"false" },
+ { id:763, label:"com.google.android.gms.vision.barcode", link:"reference/com/google/android/gms/vision/barcode/package-summary.html", type:"package", deprecated:"false" },
+ { id:764, label:"com.google.android.gms.vision.barcode.Barcode", link:"reference/com/google/android/gms/vision/barcode/Barcode.html", type:"class", deprecated:"false" },
+ { id:765, label:"com.google.android.gms.vision.barcode.Barcode.Address", link:"reference/com/google/android/gms/vision/barcode/Barcode.Address.html", type:"class", deprecated:"false" },
+ { id:766, label:"com.google.android.gms.vision.barcode.Barcode.CalendarDateTime", link:"reference/com/google/android/gms/vision/barcode/Barcode.CalendarDateTime.html", type:"class", deprecated:"false" },
+ { id:767, label:"com.google.android.gms.vision.barcode.Barcode.CalendarEvent", link:"reference/com/google/android/gms/vision/barcode/Barcode.CalendarEvent.html", type:"class", deprecated:"false" },
+ { id:768, label:"com.google.android.gms.vision.barcode.Barcode.ContactInfo", link:"reference/com/google/android/gms/vision/barcode/Barcode.ContactInfo.html", type:"class", deprecated:"false" },
+ { id:769, label:"com.google.android.gms.vision.barcode.Barcode.DriverLicense", link:"reference/com/google/android/gms/vision/barcode/Barcode.DriverLicense.html", type:"class", deprecated:"false" },
+ { id:770, label:"com.google.android.gms.vision.barcode.Barcode.Email", link:"reference/com/google/android/gms/vision/barcode/Barcode.Email.html", type:"class", deprecated:"false" },
+ { id:771, label:"com.google.android.gms.vision.barcode.Barcode.GeoPoint", link:"reference/com/google/android/gms/vision/barcode/Barcode.GeoPoint.html", type:"class", deprecated:"false" },
+ { id:772, label:"com.google.android.gms.vision.barcode.Barcode.PersonName", link:"reference/com/google/android/gms/vision/barcode/Barcode.PersonName.html", type:"class", deprecated:"false" },
+ { id:773, label:"com.google.android.gms.vision.barcode.Barcode.Phone", link:"reference/com/google/android/gms/vision/barcode/Barcode.Phone.html", type:"class", deprecated:"false" },
+ { id:774, label:"com.google.android.gms.vision.barcode.Barcode.Sms", link:"reference/com/google/android/gms/vision/barcode/Barcode.Sms.html", type:"class", deprecated:"false" },
+ { id:775, label:"com.google.android.gms.vision.barcode.Barcode.UrlBookmark", link:"reference/com/google/android/gms/vision/barcode/Barcode.UrlBookmark.html", type:"class", deprecated:"false" },
+ { id:776, label:"com.google.android.gms.vision.barcode.Barcode.WiFi", link:"reference/com/google/android/gms/vision/barcode/Barcode.WiFi.html", type:"class", deprecated:"false" },
+ { id:777, label:"com.google.android.gms.vision.barcode.BarcodeDetector", link:"reference/com/google/android/gms/vision/barcode/BarcodeDetector.html", type:"class", deprecated:"false" },
+ { id:778, label:"com.google.android.gms.vision.barcode.BarcodeDetector.Builder", link:"reference/com/google/android/gms/vision/barcode/BarcodeDetector.Builder.html", type:"class", deprecated:"false" },
+ { id:779, label:"com.google.android.gms.vision.face", link:"reference/com/google/android/gms/vision/face/package-summary.html", type:"package", deprecated:"false" },
+ { id:780, label:"com.google.android.gms.vision.face.Face", link:"reference/com/google/android/gms/vision/face/Face.html", type:"class", deprecated:"false" },
+ { id:781, label:"com.google.android.gms.vision.face.FaceDetector", link:"reference/com/google/android/gms/vision/face/FaceDetector.html", type:"class", deprecated:"false" },
+ { id:782, label:"com.google.android.gms.vision.face.FaceDetector.Builder", link:"reference/com/google/android/gms/vision/face/FaceDetector.Builder.html", type:"class", deprecated:"false" },
+ { id:783, label:"com.google.android.gms.vision.face.Landmark", link:"reference/com/google/android/gms/vision/face/Landmark.html", type:"class", deprecated:"false" },
+ { id:784, label:"com.google.android.gms.vision.face.LargestFaceFocusingProcessor", link:"reference/com/google/android/gms/vision/face/LargestFaceFocusingProcessor.html", type:"class", deprecated:"false" },
+ { id:785, label:"com.google.android.gms.wallet", link:"reference/com/google/android/gms/wallet/package-summary.html", type:"package", deprecated:"false" },
+ { id:786, label:"com.google.android.gms.wallet.Address", link:"reference/com/google/android/gms/wallet/Address.html", type:"class", deprecated:"true" },
+ { id:787, label:"com.google.android.gms.wallet.Cart", link:"reference/com/google/android/gms/wallet/Cart.html", type:"class", deprecated:"false" },
+ { id:788, label:"com.google.android.gms.wallet.Cart.Builder", link:"reference/com/google/android/gms/wallet/Cart.Builder.html", type:"class", deprecated:"false" },
+ { id:789, label:"com.google.android.gms.wallet.CountrySpecification", link:"reference/com/google/android/gms/wallet/CountrySpecification.html", type:"class", deprecated:"true" },
+ { id:790, label:"com.google.android.gms.wallet.EnableWalletOptimizationReceiver", link:"reference/com/google/android/gms/wallet/EnableWalletOptimizationReceiver.html", type:"class", deprecated:"false" },
+ { id:791, label:"com.google.android.gms.wallet.FullWallet", link:"reference/com/google/android/gms/wallet/FullWallet.html", type:"class", deprecated:"false" },
+ { id:792, label:"com.google.android.gms.wallet.FullWalletRequest", link:"reference/com/google/android/gms/wallet/FullWalletRequest.html", type:"class", deprecated:"false" },
+ { id:793, label:"com.google.android.gms.wallet.FullWalletRequest.Builder", link:"reference/com/google/android/gms/wallet/FullWalletRequest.Builder.html", type:"class", deprecated:"false" },
+ { id:794, label:"com.google.android.gms.wallet.GiftCardWalletObject", link:"reference/com/google/android/gms/wallet/GiftCardWalletObject.html", type:"class", deprecated:"false" },
+ { id:795, label:"com.google.android.gms.wallet.InstrumentInfo", link:"reference/com/google/android/gms/wallet/InstrumentInfo.html", type:"class", deprecated:"false" },
+ { id:796, label:"com.google.android.gms.wallet.LineItem", link:"reference/com/google/android/gms/wallet/LineItem.html", type:"class", deprecated:"false" },
+ { id:797, label:"com.google.android.gms.wallet.LineItem.Builder", link:"reference/com/google/android/gms/wallet/LineItem.Builder.html", type:"class", deprecated:"false" },
+ { id:798, label:"com.google.android.gms.wallet.LineItem.Role", link:"reference/com/google/android/gms/wallet/LineItem.Role.html", type:"class", deprecated:"false" },
+ { id:799, label:"com.google.android.gms.wallet.LoyaltyWalletObject", link:"reference/com/google/android/gms/wallet/LoyaltyWalletObject.html", type:"class", deprecated:"false" },
+ { id:800, label:"com.google.android.gms.wallet.MaskedWallet", link:"reference/com/google/android/gms/wallet/MaskedWallet.html", type:"class", deprecated:"false" },
+ { id:801, label:"com.google.android.gms.wallet.MaskedWallet.Builder", link:"reference/com/google/android/gms/wallet/MaskedWallet.Builder.html", type:"class", deprecated:"false" },
+ { id:802, label:"com.google.android.gms.wallet.MaskedWalletRequest", link:"reference/com/google/android/gms/wallet/MaskedWalletRequest.html", type:"class", deprecated:"false" },
+ { id:803, label:"com.google.android.gms.wallet.MaskedWalletRequest.Builder", link:"reference/com/google/android/gms/wallet/MaskedWalletRequest.Builder.html", type:"class", deprecated:"false" },
+ { id:804, label:"com.google.android.gms.wallet.NotifyTransactionStatusRequest", link:"reference/com/google/android/gms/wallet/NotifyTransactionStatusRequest.html", type:"class", deprecated:"false" },
+ { id:805, label:"com.google.android.gms.wallet.NotifyTransactionStatusRequest.Builder", link:"reference/com/google/android/gms/wallet/NotifyTransactionStatusRequest.Builder.html", type:"class", deprecated:"false" },
+ { id:806, label:"com.google.android.gms.wallet.NotifyTransactionStatusRequest.Status", link:"reference/com/google/android/gms/wallet/NotifyTransactionStatusRequest.Status.html", type:"class", deprecated:"false" },
+ { id:807, label:"com.google.android.gms.wallet.NotifyTransactionStatusRequest.Status.Error", link:"reference/com/google/android/gms/wallet/NotifyTransactionStatusRequest.Status.Error.html", type:"class", deprecated:"false" },
+ { id:808, label:"com.google.android.gms.wallet.OfferWalletObject", link:"reference/com/google/android/gms/wallet/OfferWalletObject.html", type:"class", deprecated:"false" },
+ { id:809, label:"com.google.android.gms.wallet.PaymentInstrumentType", link:"reference/com/google/android/gms/wallet/PaymentInstrumentType.html", type:"class", deprecated:"false" },
+ { id:810, label:"com.google.android.gms.wallet.PaymentMethodToken", link:"reference/com/google/android/gms/wallet/PaymentMethodToken.html", type:"class", deprecated:"false" },
+ { id:811, label:"com.google.android.gms.wallet.PaymentMethodTokenizationParameters", link:"reference/com/google/android/gms/wallet/PaymentMethodTokenizationParameters.html", type:"class", deprecated:"false" },
+ { id:812, label:"com.google.android.gms.wallet.PaymentMethodTokenizationParameters.Builder", link:"reference/com/google/android/gms/wallet/PaymentMethodTokenizationParameters.Builder.html", type:"class", deprecated:"false" },
+ { id:813, label:"com.google.android.gms.wallet.PaymentMethodTokenizationType", link:"reference/com/google/android/gms/wallet/PaymentMethodTokenizationType.html", type:"class", deprecated:"false" },
+ { id:814, label:"com.google.android.gms.wallet.Payments", link:"reference/com/google/android/gms/wallet/Payments.html", type:"class", deprecated:"false" },
+ { id:815, label:"com.google.android.gms.wallet.ProxyCard", link:"reference/com/google/android/gms/wallet/ProxyCard.html", type:"class", deprecated:"false" },
+ { id:816, label:"com.google.android.gms.wallet.Wallet", link:"reference/com/google/android/gms/wallet/Wallet.html", type:"class", deprecated:"false" },
+ { id:817, label:"com.google.android.gms.wallet.Wallet.WalletOptions", link:"reference/com/google/android/gms/wallet/Wallet.WalletOptions.html", type:"class", deprecated:"false" },
+ { id:818, label:"com.google.android.gms.wallet.Wallet.WalletOptions.Builder", link:"reference/com/google/android/gms/wallet/Wallet.WalletOptions.Builder.html", type:"class", deprecated:"false" },
+ { id:819, label:"com.google.android.gms.wallet.WalletConstants", link:"reference/com/google/android/gms/wallet/WalletConstants.html", type:"class", deprecated:"false" },
+ { id:820, label:"com.google.android.gms.wallet.WalletConstants.CardNetwork", link:"reference/com/google/android/gms/wallet/WalletConstants.CardNetwork.html", type:"class", deprecated:"false" },
+ { id:821, label:"com.google.android.gms.wallet.fragment", link:"reference/com/google/android/gms/wallet/fragment/package-summary.html", type:"package", deprecated:"false" },
+ { id:822, label:"com.google.android.gms.wallet.fragment.BuyButtonAppearance", link:"reference/com/google/android/gms/wallet/fragment/BuyButtonAppearance.html", type:"class", deprecated:"true" },
+ { id:823, label:"com.google.android.gms.wallet.fragment.BuyButtonText", link:"reference/com/google/android/gms/wallet/fragment/BuyButtonText.html", type:"class", deprecated:"true" },
+ { id:824, label:"com.google.android.gms.wallet.fragment.Dimension", link:"reference/com/google/android/gms/wallet/fragment/Dimension.html", type:"class", deprecated:"true" },
+ { id:825, label:"com.google.android.gms.wallet.fragment.SupportWalletFragment", link:"reference/com/google/android/gms/wallet/fragment/SupportWalletFragment.html", type:"class", deprecated:"false" },
+ { id:826, label:"com.google.android.gms.wallet.fragment.SupportWalletFragment.OnStateChangedListener", link:"reference/com/google/android/gms/wallet/fragment/SupportWalletFragment.OnStateChangedListener.html", type:"class", deprecated:"false" },
+ { id:827, label:"com.google.android.gms.wallet.fragment.WalletFragment", link:"reference/com/google/android/gms/wallet/fragment/WalletFragment.html", type:"class", deprecated:"false" },
+ { id:828, label:"com.google.android.gms.wallet.fragment.WalletFragment.OnStateChangedListener", link:"reference/com/google/android/gms/wallet/fragment/WalletFragment.OnStateChangedListener.html", type:"class", deprecated:"false" },
+ { id:829, label:"com.google.android.gms.wallet.fragment.WalletFragmentInitParams", link:"reference/com/google/android/gms/wallet/fragment/WalletFragmentInitParams.html", type:"class", deprecated:"false" },
+ { id:830, label:"com.google.android.gms.wallet.fragment.WalletFragmentInitParams.Builder", link:"reference/com/google/android/gms/wallet/fragment/WalletFragmentInitParams.Builder.html", type:"class", deprecated:"false" },
+ { id:831, label:"com.google.android.gms.wallet.fragment.WalletFragmentMode", link:"reference/com/google/android/gms/wallet/fragment/WalletFragmentMode.html", type:"class", deprecated:"false" },
+ { id:832, label:"com.google.android.gms.wallet.fragment.WalletFragmentOptions", link:"reference/com/google/android/gms/wallet/fragment/WalletFragmentOptions.html", type:"class", deprecated:"false" },
+ { id:833, label:"com.google.android.gms.wallet.fragment.WalletFragmentOptions.Builder", link:"reference/com/google/android/gms/wallet/fragment/WalletFragmentOptions.Builder.html", type:"class", deprecated:"false" },
+ { id:834, label:"com.google.android.gms.wallet.fragment.WalletFragmentState", link:"reference/com/google/android/gms/wallet/fragment/WalletFragmentState.html", type:"class", deprecated:"false" },
+ { id:835, label:"com.google.android.gms.wallet.fragment.WalletFragmentStyle", link:"reference/com/google/android/gms/wallet/fragment/WalletFragmentStyle.html", type:"class", deprecated:"false" },
+ { id:836, label:"com.google.android.gms.wallet.fragment.WalletFragmentStyle.BuyButtonAppearance", link:"reference/com/google/android/gms/wallet/fragment/WalletFragmentStyle.BuyButtonAppearance.html", type:"class", deprecated:"false" },
+ { id:837, label:"com.google.android.gms.wallet.fragment.WalletFragmentStyle.BuyButtonText", link:"reference/com/google/android/gms/wallet/fragment/WalletFragmentStyle.BuyButtonText.html", type:"class", deprecated:"false" },
+ { id:838, label:"com.google.android.gms.wallet.fragment.WalletFragmentStyle.Dimension", link:"reference/com/google/android/gms/wallet/fragment/WalletFragmentStyle.Dimension.html", type:"class", deprecated:"false" },
+ { id:839, label:"com.google.android.gms.wallet.fragment.WalletFragmentStyle.LogoImageType", link:"reference/com/google/android/gms/wallet/fragment/WalletFragmentStyle.LogoImageType.html", type:"class", deprecated:"false" },
+ { id:840, label:"com.google.android.gms.wallet.fragment.WalletLogoImageType", link:"reference/com/google/android/gms/wallet/fragment/WalletLogoImageType.html", type:"class", deprecated:"true" },
+ { id:841, label:"com.google.android.gms.wearable", link:"reference/com/google/android/gms/wearable/package-summary.html", type:"package", deprecated:"false" },
+ { id:842, label:"com.google.android.gms.wearable.Asset", link:"reference/com/google/android/gms/wearable/Asset.html", type:"class", deprecated:"false" },
+ { id:843, label:"com.google.android.gms.wearable.CapabilityApi", link:"reference/com/google/android/gms/wearable/CapabilityApi.html", type:"class", deprecated:"false" },
+ { id:844, label:"com.google.android.gms.wearable.CapabilityApi.AddLocalCapabilityResult", link:"reference/com/google/android/gms/wearable/CapabilityApi.AddLocalCapabilityResult.html", type:"class", deprecated:"false" },
+ { id:845, label:"com.google.android.gms.wearable.CapabilityApi.CapabilityListener", link:"reference/com/google/android/gms/wearable/CapabilityApi.CapabilityListener.html", type:"class", deprecated:"false" },
+ { id:846, label:"com.google.android.gms.wearable.CapabilityApi.GetAllCapabilitiesResult", link:"reference/com/google/android/gms/wearable/CapabilityApi.GetAllCapabilitiesResult.html", type:"class", deprecated:"false" },
+ { id:847, label:"com.google.android.gms.wearable.CapabilityApi.GetCapabilityResult", link:"reference/com/google/android/gms/wearable/CapabilityApi.GetCapabilityResult.html", type:"class", deprecated:"false" },
+ { id:848, label:"com.google.android.gms.wearable.CapabilityApi.RemoveLocalCapabilityResult", link:"reference/com/google/android/gms/wearable/CapabilityApi.RemoveLocalCapabilityResult.html", type:"class", deprecated:"false" },
+ { id:849, label:"com.google.android.gms.wearable.CapabilityInfo", link:"reference/com/google/android/gms/wearable/CapabilityInfo.html", type:"class", deprecated:"false" },
+ { id:850, label:"com.google.android.gms.wearable.Channel", link:"reference/com/google/android/gms/wearable/Channel.html", type:"class", deprecated:"false" },
+ { id:851, label:"com.google.android.gms.wearable.Channel.GetInputStreamResult", link:"reference/com/google/android/gms/wearable/Channel.GetInputStreamResult.html", type:"class", deprecated:"false" },
+ { id:852, label:"com.google.android.gms.wearable.Channel.GetOutputStreamResult", link:"reference/com/google/android/gms/wearable/Channel.GetOutputStreamResult.html", type:"class", deprecated:"false" },
+ { id:853, label:"com.google.android.gms.wearable.ChannelApi", link:"reference/com/google/android/gms/wearable/ChannelApi.html", type:"class", deprecated:"false" },
+ { id:854, label:"com.google.android.gms.wearable.ChannelApi.ChannelListener", link:"reference/com/google/android/gms/wearable/ChannelApi.ChannelListener.html", type:"class", deprecated:"false" },
+ { id:855, label:"com.google.android.gms.wearable.ChannelApi.CloseReason", link:"reference/com/google/android/gms/wearable/ChannelApi.CloseReason.html", type:"class", deprecated:"false" },
+ { id:856, label:"com.google.android.gms.wearable.ChannelApi.OpenChannelResult", link:"reference/com/google/android/gms/wearable/ChannelApi.OpenChannelResult.html", type:"class", deprecated:"false" },
+ { id:857, label:"com.google.android.gms.wearable.ChannelIOException", link:"reference/com/google/android/gms/wearable/ChannelIOException.html", type:"class", deprecated:"false" },
+ { id:858, label:"com.google.android.gms.wearable.DataApi", link:"reference/com/google/android/gms/wearable/DataApi.html", type:"class", deprecated:"false" },
+ { id:859, label:"com.google.android.gms.wearable.DataApi.DataItemResult", link:"reference/com/google/android/gms/wearable/DataApi.DataItemResult.html", type:"class", deprecated:"false" },
+ { id:860, label:"com.google.android.gms.wearable.DataApi.DataListener", link:"reference/com/google/android/gms/wearable/DataApi.DataListener.html", type:"class", deprecated:"false" },
+ { id:861, label:"com.google.android.gms.wearable.DataApi.DeleteDataItemsResult", link:"reference/com/google/android/gms/wearable/DataApi.DeleteDataItemsResult.html", type:"class", deprecated:"false" },
+ { id:862, label:"com.google.android.gms.wearable.DataApi.GetFdForAssetResult", link:"reference/com/google/android/gms/wearable/DataApi.GetFdForAssetResult.html", type:"class", deprecated:"false" },
+ { id:863, label:"com.google.android.gms.wearable.DataEvent", link:"reference/com/google/android/gms/wearable/DataEvent.html", type:"class", deprecated:"false" },
+ { id:864, label:"com.google.android.gms.wearable.DataEventBuffer", link:"reference/com/google/android/gms/wearable/DataEventBuffer.html", type:"class", deprecated:"false" },
+ { id:865, label:"com.google.android.gms.wearable.DataItem", link:"reference/com/google/android/gms/wearable/DataItem.html", type:"class", deprecated:"false" },
+ { id:866, label:"com.google.android.gms.wearable.DataItemAsset", link:"reference/com/google/android/gms/wearable/DataItemAsset.html", type:"class", deprecated:"false" },
+ { id:867, label:"com.google.android.gms.wearable.DataItemBuffer", link:"reference/com/google/android/gms/wearable/DataItemBuffer.html", type:"class", deprecated:"false" },
+ { id:868, label:"com.google.android.gms.wearable.DataMap", link:"reference/com/google/android/gms/wearable/DataMap.html", type:"class", deprecated:"false" },
+ { id:869, label:"com.google.android.gms.wearable.DataMapItem", link:"reference/com/google/android/gms/wearable/DataMapItem.html", type:"class", deprecated:"false" },
+ { id:870, label:"com.google.android.gms.wearable.MessageApi", link:"reference/com/google/android/gms/wearable/MessageApi.html", type:"class", deprecated:"false" },
+ { id:871, label:"com.google.android.gms.wearable.MessageApi.MessageListener", link:"reference/com/google/android/gms/wearable/MessageApi.MessageListener.html", type:"class", deprecated:"false" },
+ { id:872, label:"com.google.android.gms.wearable.MessageApi.SendMessageResult", link:"reference/com/google/android/gms/wearable/MessageApi.SendMessageResult.html", type:"class", deprecated:"false" },
+ { id:873, label:"com.google.android.gms.wearable.MessageEvent", link:"reference/com/google/android/gms/wearable/MessageEvent.html", type:"class", deprecated:"false" },
+ { id:874, label:"com.google.android.gms.wearable.Node", link:"reference/com/google/android/gms/wearable/Node.html", type:"class", deprecated:"false" },
+ { id:875, label:"com.google.android.gms.wearable.NodeApi", link:"reference/com/google/android/gms/wearable/NodeApi.html", type:"class", deprecated:"false" },
+ { id:876, label:"com.google.android.gms.wearable.NodeApi.GetConnectedNodesResult", link:"reference/com/google/android/gms/wearable/NodeApi.GetConnectedNodesResult.html", type:"class", deprecated:"false" },
+ { id:877, label:"com.google.android.gms.wearable.NodeApi.GetLocalNodeResult", link:"reference/com/google/android/gms/wearable/NodeApi.GetLocalNodeResult.html", type:"class", deprecated:"false" },
+ { id:878, label:"com.google.android.gms.wearable.NodeApi.NodeListener", link:"reference/com/google/android/gms/wearable/NodeApi.NodeListener.html", type:"class", deprecated:"false" },
+ { id:879, label:"com.google.android.gms.wearable.PutDataMapRequest", link:"reference/com/google/android/gms/wearable/PutDataMapRequest.html", type:"class", deprecated:"false" },
+ { id:880, label:"com.google.android.gms.wearable.PutDataRequest", link:"reference/com/google/android/gms/wearable/PutDataRequest.html", type:"class", deprecated:"false" },
+ { id:881, label:"com.google.android.gms.wearable.Wearable", link:"reference/com/google/android/gms/wearable/Wearable.html", type:"class", deprecated:"false" },
+ { id:882, label:"com.google.android.gms.wearable.Wearable.WearableOptions", link:"reference/com/google/android/gms/wearable/Wearable.WearableOptions.html", type:"class", deprecated:"false" },
+ { id:883, label:"com.google.android.gms.wearable.Wearable.WearableOptions.Builder", link:"reference/com/google/android/gms/wearable/Wearable.WearableOptions.Builder.html", type:"class", deprecated:"false" },
+ { id:884, label:"com.google.android.gms.wearable.WearableListenerService", link:"reference/com/google/android/gms/wearable/WearableListenerService.html", type:"class", deprecated:"false" },
+ { id:885, label:"com.google.android.gms.wearable.WearableStatusCodes", link:"reference/com/google/android/gms/wearable/WearableStatusCodes.html", type:"class", deprecated:"false" }
+
+ ];
diff --git a/docs/html/sdk/installing/adding-packages.jd b/docs/html/sdk/installing/adding-packages.jd
index 58a806504b4f..88619bd4084c 100644
--- a/docs/html/sdk/installing/adding-packages.jd
+++ b/docs/html/sdk/installing/adding-packages.jd
@@ -64,10 +64,10 @@ So before you can start, there are a few packages you should add to your Android
<p>To start adding packages, launch the Android SDK Manager in one of the following ways:</p>
<ul>
- <li>In Eclipse or Android Studio, click <strong>SDK Manager</strong>
+ <li>In Android Studio, click <strong>SDK Manager</strong>
<img src="{@docRoot}images/tools/sdk-manager-studio.png"
style="vertical-align:bottom;margin:0;height:17px" /> in the toolbar.</li>
- <li>If you're not using Eclipse or Android Studio:
+ <li>If you're not using Android Studio:
<ul>
<li>Windows: Double-click the <code>SDK Manager.exe</code> file at the root of the Android
SDK directory.</li>
@@ -77,7 +77,7 @@ style="vertical-align:bottom;margin:0;height:17px" /> in the toolbar.</li>
</li>
</ul>
-<p>When you open the SDK Manager for the first time, several packages will be selected by
+<p>When you open the SDK Manager for the first time, several packages are selected by
default. Leave these selected, but be sure you have everything you need
to get started by following these steps:</p>
diff --git a/docs/html/sdk/installing/index.jd b/docs/html/sdk/installing/index.jd
index 45d189059706..dc258db963c1 100644
--- a/docs/html/sdk/installing/index.jd
+++ b/docs/html/sdk/installing/index.jd
@@ -87,7 +87,7 @@ where they are installed. For example:</p>
<p><b>To set up Android Studio on Mac OSX:</b></p>
<ol>
- <li>Unzip the downloaded zip file, {@code android-studio-ide-&lt;version&gt;-mac.zip}.</li>
+ <li>Launch the {@code .dmg} file you just downloaded.</li>
<li>Drag and drop Android Studio into the Applications folder.
<li>Open Android Studio and follow the setup wizard to install any necessary SDK tools.
<p>
@@ -97,13 +97,11 @@ where they are installed. For example:</p>
<strong>Allow applications downloaded from</strong>, select <strong>Anywhere</strong>.
Then open Android Studio again.</p>
</li>
- <li>Follow the links to install the SDK outside of the Android Studio directories.</li>
</ol>
-<p>The individual tools and other SDK packages are saved outside the Android Studio application
-directory. If you need access the tools directly, use a terminal to navigate into the location
-where they are installed. For example:</p>
-<p><code>/Applications/sdk/</code></p>
+<p>If you need use the Android SDK tools from a command line,
+you can access them at:</p>
+<p><code>/Users/&lt;user>/Library/Android/sdk/</code></p>
</div><!-- end mac -->
@@ -114,7 +112,7 @@ where they are installed. For example:</p>
<p><b>To set up Android Studio on Linux:</b></p>
<ol>
- <li>Unpack the downloaded Tar file, {@code android-studio-ide-&lt;version&gt;-linux.zip}, into an
+ <li>Unpack the downloaded ZIP file into an
appropriate location for your applications.
<li>To launch Android Studio, navigate to the {@code android-studio/bin/} directory
in a terminal and execute {@code studio.sh}.
diff --git a/docs/html/tools/building/buidling-cmdline-ant.jd b/docs/html/tools/building/buidling-cmdline-ant.jd
deleted file mode 100644
index 51158de8afa0..000000000000
--- a/docs/html/tools/building/buidling-cmdline-ant.jd
+++ /dev/null
@@ -1,381 +0,0 @@
-page.title=Building and Running from the Command Line
-parent.title=Building and Running
-parent.link=index.html
-@jd:body
-
- <div id="qv-wrapper">
- <div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#DebugMode">Building in Debug Mode</a></li>
- <li><a href="#ReleaseMode">Building in Release Mode</a>
- <ol>
- <li><a href="#ManualReleaseMode">Build unsigned</a></li>
- <li><a href="#AutoReleaseMode">Build signed and aligned</a></li>
- <li><a href="#OnceBuilt">Once built and signed in release mode</a></li>
- </ol>
- </li>
- <li><a href="#RunningOnEmulator">Running on the Emulator</a></li>
- <li><a href="#RunningOnDevice">Running on a Device</a></li>
- <li><a href="#Signing">Application Signing</a></li>
- <li><a href="#AntReference">Ant Command Reference</a></li>
- </ol>
- <h2>See also</h2>
- <ol>
- <li><a href="{@docRoot}tools/devices/managing-avds-cmdline.html">Managing AVDs from
-the Command Line</a></li>
- <li><a href="{@docRoot}tools/devices/emulator.html">Using the Android
-Emulator</a></li>
- <li><a href="{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a></li>
- </ol>
- </div>
- </div>
-
- <p>There are two ways to build your application using the Ant build script: one for
- testing/debugging your application &mdash; <em>debug mode</em> &mdash; and one for building your
- final package for release &mdash; <em>release mode</em>. Regardless of which way you build your application,
- it must be signed before it can install on an emulator or device&mdash;with a debug key when building
- in debug mode and with your own private key when building in release mode.</p>
-
- <p>Whether you're building in debug mode or release mode, you need to use the Ant tool to compile
- and build your project. This will create the .apk file that you can install on an emulator or device.
- When you build in debug mode, the .apk file is automatically signed by the SDK tools with
- a debug key, so it's instantly ready for installation onto an emulator or attached
- development device. You cannot distribute an application that is signed with a debug key.
- When you build in release mode, the .apk file is <em>unsigned</em>, so you
- must manually sign it with your own private key, using Keytool and Jarsigner.</p>
-
- <p>It's important that you read and understand <a href=
- "{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a>, particularly once
- you're ready to release your application and share it with end-users. That document describes the
- procedure for generating a private key and then using it to sign your .apk file. If you're just
- getting started, however, you can quickly run your applications on an emulator or your own
- development device by building in debug mode.</p>
-
- <p>If you don't have Ant, you can obtain it from the <a href="http://ant.apache.org/">Apache Ant
- home page</a>. Install it and make sure it is in your executable PATH. Before calling Ant, you
- need to declare the JAVA_HOME environment variable to specify the path to where the JDK is
- installed.</p>
-
- <p class="note"><strong>Note:</strong> When installing JDK on Windows, the default is to install
- in the "Program Files" directory. This location will cause <code>ant</code> to fail, because of
- the space. To fix the problem, you can specify the JAVA_HOME variable like this:
- <pre>set JAVA_HOME=c:\Progra~1\Java\&lt;jdkdir&gt;</pre>
-
- <p>The easiest solution, however, is to install JDK in a non-space directory, for example:</p>
-
- <pre>c:\java\jdk1.7</pre>
-
- <h2 id="DebugMode">Building in Debug Mode</h2>
-
- <p>For immediate application testing and debugging, you can build your application in debug mode
- and immediately install it on an emulator. In debug mode, the build tools automatically sign your
- application with a debug key and optimize the package with {@code zipalign}.</p>
-
- <p>To build in debug mode:</p>
-
- <ol>
- <li>Open a command-line and navigate to the root of your project directory.</li>
- <li>Use Ant to compile your project in debug mode:
- <pre>
-ant debug
-</pre>
-
- <p>This creates your debug <code>.apk</code> file inside the project <code>bin/</code> directory, named
- <code>&lt;your_project_name&gt;-debug.apk</code>. The file is already signed with
- the debug key and has been aligned with
- <a href="{@docRoot}tools/help/zipalign.html"><code>zipalign</code></a>.
- </p>
- </li>
- </ol>
-
- <p>Each time you change a source file or resource, you must run Ant again in order to package up
- the latest version of the application.</p>
-
- <p>To install and run your application on an emulator, see the following section about <a href=
- "#RunningOnEmulator">Running on the Emulator</a>.</p>
-
- <h2 id="ReleaseMode">Building in Release Mode</h2>
-
- <p>When you're ready to release and distribute your application to end-users, you must build your
- application in release mode. Once you have built in release mode, it's a good idea to perform
- additional testing and debugging with the final .apk.</p>
-
- <p>Before you start building your application in release mode, be aware that you must sign the
- resulting application package with your private key, and should then align it using the {@code
- zipalign} tool. There are two approaches to building in release mode: build an unsigned package
- in release mode and then manually sign and align the package, or allow the build script to sign
- and align the package for you.</p>
-
- <h3 id="ManualReleaseMode">Build unsigned</h3>
-
- <p>If you build your application <em>unsigned</em>, then you will need to manually sign and align
- the package.</p>
-
- <p>To build an <em>unsigned</em> .apk in release mode:</p>
-
- <ol>
- <li>Open a command-line and navigate to the root of your project directory.</li>
-
- <li>Use Ant to compile your project in release mode:
- <pre>
-ant release
-</pre>
- </li>
- </ol>
-
- <p>This creates your Android application .apk file inside the project <code>bin/</code>
- directory, named <code><em>&lt;your_project_name&gt;</em>-unsigned.apk</code>.</p>
-
- <p class="note"><strong>Note:</strong> The .apk file is <em>unsigned</em> at this point and can't
- be installed until signed with your private key.</p>
-
- <p>Once you have created the unsigned .apk, your next step is to sign the .apk with your private
- key and then align it with {@code zipalign}. To complete this procedure, read <a href=
- "{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a>.</p>
-
- <p>When your <code>.apk</code> has been signed and aligned, it's ready to be distributed to end-users.
- You should test the final build on different devices or AVDs to ensure that it
- runs properly on different platforms.</p>
-
- <h3 id="AutoReleaseMode">Build signed and aligned</h3>
-
- <p>If you would like, you can configure the Android build script to automatically sign and align
- your application package. To do so, you must provide the path to your keystore and the name of
- your key alias in your project's {@code ant.properties} file. With this information provided,
- the build script will prompt you for your keystore and alias password when you build in release
- mode and produce your final application package, which will be ready for distribution.</p>
-
- <p class="caution"><strong>Caution:</strong> Due to the way Ant handles input, the password that
- you enter during the build process <strong>will be visible</strong>. If you are concerned about
- your keystore and alias password being visible on screen, then you may prefer to perform the
- application signing manually, via Jarsigner (or a similar tool). To instead perform the signing
- procedure manually, <a href="#ManualReleaseMode">build unsigned</a> and then continue with
- <a href="{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a>.</p>
-
- <p>To specify your keystore and alias, open the project {@code ant.properties} file (found in
- the root of the project directory) and add entries for {@code key.store} and {@code key.alias}.
- For example:</p>
- <pre>
-key.store=path/to/my.keystore
-key.alias=mykeystore
-</pre>
-
- <p>Save your changes. Now you can build a <em>signed</em> .apk in release mode:</p>
-
- <ol>
- <li>Open a command-line and navigate to the root of your project directory.</li>
-
- <li>Use Ant to compile your project in release mode:
- <pre>
-ant release
-</pre>
- </li>
-
- <li>When prompted, enter you keystore and alias passwords.
-
- <p class="caution"><strong>Caution:</strong> As described above, your password will be
- visible on the screen.</p>
- </li>
- </ol>
-
- <p>This creates your Android application .apk file inside the project <code>bin/</code>
- directory, named <code><em>&lt;your_project_name&gt;</em>-release.apk</code>. This .apk file has
- been signed with the private key specified in {@code ant.properties} and aligned with {@code
- zipalign}. It's ready for installation and distribution.</p>
-
- <h3 id="OnceBuilt">Once built and signed in release mode</h3>
-
- <p>Once you have signed your application with a private key, you can install and run it on an
- <a href="#RunningOnEmulator">emulator</a> or <a href="#RunningOnDevice">device</a>. You can
- also try installing it onto a device from a web server. Simply upload the signed .apk to a web
- site, then load the .apk URL in your Android web browser to download the application and begin
- installation. (On your device, be sure you have enabled
- <em>Settings &gt; Applications &gt; Unknown sources</em>.)</p>
-
- <h2 id="RunningOnEmulator">Running on the Emulator</h2>
-
- <p>Before you can run your application on the Android Emulator, you must <a href=
- "{@docRoot}tools/devices/managing-avds.html">create an AVD</a>.</p>
-
- <p>To run your application:</p>
-
- <ol>
- <li>
- <strong>Open the AVD Manager and launch a virtual device</strong>
-
- <p>From your SDK's <code>platform-tools/</code> directory, execute the {@code android} tool
-with the <code>avd</code> options:</p>
- <pre>
-android avd
-</pre>
-
- <p>In the <em>Virtual Devices</em> view, select an AVD and click <strong>Start</strong>.</p>
- </li>
-
- <li>
- <strong>Install your application</strong>
-
- <p>From your SDK's <code>tools/</code> directory, install the {@code .apk} on the
- emulator:</p>
- <pre>
-adb install <em>&lt;path_to_your_bin&gt;</em>.apk
-</pre>
-
- <p>Your .apk file (signed with either a release or debug key) is in your project {@code bin/}
- directory after you build your application.</p>
-
- <p>If there is more than one emulator running, you must specify the emulator upon which to
- install the application, by its serial number, with the <code>-s</code> option. For
- example:</p>
- <pre>
-adb -s emulator-5554 install <em>path/to/your/app</em>.apk
-</pre>
-
- <p>To see a list of available device serial numbers, execute {@code adb devices}.</p>
- </li>
- </ol>
-
- <p>If you don't see your application on the emulator, try closing the emulator and launching the
- virtual device again from the AVD Manager. Sometimes when you install an application for the
- first time, it won't show up in the application launcher or be accessible by other applications.
- This is because the package manager usually examines manifests completely only on emulator
- startup.</p>
-
- <p>Be certain to create multiple AVDs upon which to test your application. You should have one
- AVD for each platform and screen type with which your application is compatible. For instance, if
- your application compiles against the Android 4.0 (API Level 14) platform, you should create an
- AVD for each platform equal to and greater than 4.0 and an AVD for each <a href=
- "{@docRoot}guide/practices/screens_support.html">screen type</a> you support, then test your
- application on each one.</p>
-
- <p class="note"><strong>Tip:</strong> If you have <em>only one</em> emulator running, you can
- build your application and install it on the emulator in one simple step. Navigate to the root of
- your project directory and use Ant to compile the project with <em>install mode</em>: <code>ant
- install</code>. This will build your application, sign it with the debug key, and install it on
- the currently running emulator.</p>
-
- <h2 id="RunningOnDevice">Running on a Device</h2>
-
- <p>Before you can run your application on a device, you must perform some basic setup for your
- device:</p>
-
- <ul>
- <li>Enable <strong>USB debugging</strong> on your device.
- <ul>
- <li>On most devices running Android 3.2 or older, you can find the option under
- <strong>Settings > Applications > Development</strong>.</li>
- <li>On Android 4.0 and newer, it's in <strong>Settings > Developer options</strong>.
- <p class="note"><strong>Note:</strong> On Android 4.2 and newer, <strong>Developer
- options</strong> is hidden by default. To make it available, go
- to <strong>Settings > About phone</strong> and tap <strong>Build number</strong>
- seven times. Return to the previous screen to find <strong>Developer options</strong>.</p>
- </li>
- </ul>
- </li>
-
- <li>Ensure that your development computer can detect your device when connected via USB</li>
- </ul>
-
- <p>Read <a href="{@docRoot}tools/device.html#setting-up">Setting up a Device for
- Development</a> for more information.</p>
-
- <p>Once your device is set up and connected via USB, navigate to your SDK's <code>platform-tools/</code>
- directory and install the <code>.apk</code> on the device:</p>
- <pre>
-adb -d install <em>path/to/your/app</em>.apk
-</pre>
-
- <p>The {@code -d} flag specifies that you want to use the attached device (in case you also have
- an emulator running).</p>
-
- <p>For more information on the tools used above, please see the following documents:</p>
-
- <ul>
- <li><a href="{@docRoot}tools/help/android.html">android Tool</a></li>
-
- <li><a href="{@docRoot}tools/devices/emulator.html">Android Emulator</a></li>
-
- <li><a href="{@docRoot}tools/help/adb.html">Android Debug Bridge</a> (ADB)</li>
- </ul>
-
- <h2 id="Signing">Application Signing</h2>
-
- <p>As you begin developing Android applications, understand that all Android applications must be
- digitally signed before the system will install them on an emulator or device. There are two ways
- to do this: with a <em>debug key</em> (for immediate testing on an emulator or development
- device) or with a <em>private key</em> (for application distribution).</p>
-
- <p>The Android build tools help you get started by automatically signing your .apk files with a
- debug key at build time. This means that you can compile your application and install it on the
- emulator without having to generate your own private key. However, please note that if you intend
- to publish your application, you <strong>must</strong> sign the application with your own private
- key, rather than the debug key generated by the SDK tools.</p>
-
- <p>The ADT plugin helps you get started quickly by signing your .apk files with a debug key,
- prior to installing them on an emulator or development device. This means that you can quickly
- run your application from Eclipse without having to generate your own private key. No specific
- action on your part is needed, provided ADT has access to Keytool. However, please note that if
- you intend to publish your application, you <strong>must</strong> sign the application with your
- own private key, rather than the debug key generated by the SDK tools.</p>
-
- <p>Please read <a href="{@docRoot}tools/publishing/app-signing.html">Signing Your
- Applications</a>, which provides a thorough guide to application signing on Android and what it
- means to you as an Android application developer. The document also includes a guide to exporting
- and signing your application with the ADT's Export Wizard.</p>
-
- <h2 id="AntReference">Ant Command Reference</h2>
- <dt><code>ant clean</code></dt>
- <dd>Cleans the project. If you include the <code>all</code> target before <code>clean</code>
-(<code>ant all clean</code>), other projects are also cleaned. For instance if you clean a
-test project, the tested project is also cleaned.</dd>
-
- <dt><code>ant debug</code></dt>
- <dd>Builds a debug package. Works on application, library, and test projects and compiles
- dependencies as needed.</dd>
-
- <dt id="emma"><code>ant emma debug</code></dt>
- <dd>Builds a test project while building the tested project with instrumentation turned on.
- This is used to run tests with code coverage enabled.</dd>
-
- <dt><code>ant release</code></dt>
- <dd>Builds a release package.</dd>
-
- <dt><code>ant instrument</code>
- </dt>
- <dd>Builds an instrumented debug package. This is generally called automatically when building a
- test project with code coverage enabled (with the <code>emma</code>
- target)</dd>
-
- <dt><code>ant &lt;build_target&gt; install</code></dt>
- <dd>Builds and installs a package. Using <code>install</code> by itself fails.</dd>
-
- <dt><code>ant installd</code></dt>
- <dd>Installs an already compiled debug package. This fails if the <code>.apk</code> is not
- already built.</dd>
-
- <dt><code>ant installr</code></dt>
- <dd>Installs an already compiled release package. This fails if the <code>.apk</code> is not
- already built.</dd>
-
- <dt><code>ant installt</code></dt>
- <dd>Installs an already compiled test package. Also installs the <code>.apk</code> of the
- tested application. This fails if the <code>.apk</code> is not already built.</dd>
-
- <dt><code>ant installi</code></dt>
- <dd>Installs an already compiled instrumented package. This is generally not used manually as
- it's called when installing a test package. This fails if the <code>.apk</code> is not already
- built.</dd>
-
- <dt><code>ant test</code></dt>
- <dd>Runs the tests (for test projects). The tested and test <code>.apk</code> files must be
- previously installed.</dd>
-
- <dt><code>ant debug installt test</code></dt>
- <dd>Builds a test project and the tested project, installs both <code>.apk</code> files, and
- runs the tests.</dd>
-
- <dt><code>ant emma debug install test</code></dt>
- <dd>Builds a test project and the tested project, installs both <code>.apk</code> files, and
- runs the tests with code coverage enabled.</dd>
-
diff --git a/docs/html/tools/building/building-eclipse.jd b/docs/html/tools/building/building-eclipse.jd
index 79ef3dedd1f1..89c3e166c99e 100644
--- a/docs/html/tools/building/building-eclipse.jd
+++ b/docs/html/tools/building/building-eclipse.jd
@@ -34,12 +34,12 @@ parent.link=index.html
<p>This document shows you how to run your application on an emulator or a real device
from Eclipse&mdash;all of which is done using the debug version of your application.
For more information about how to sign your application with a private key for release, see <a href=
- "{@docRoot}tools/workflow/publishing/app-signing.html#ExportWizard">Signing Your Applications</a></p>
+ "{@docRoot}tools/publishing/app-signing.html#ExportWizard">Signing Your Applications</a></p>
<h2 id="RunningOnEmulatorEclipse">Running on the emulator</h2>
<p>Before you can run your application on the Android Emulator, you must <a href=
- "{@docRoot}tools/workflow/devices/managing-avds.html">create an AVD</a>.</p>
+ "{@docRoot}tools/devices/managing-avds.html">create an AVD</a>.</p>
<p>To run (or debug) your application, select <strong>Run</strong> &gt; <strong>Run</strong> (or
<strong>Run</strong> &gt; <strong>Debug</strong>) from the Eclipse menu bar. The ADT plugin will
@@ -100,7 +100,7 @@ parent.link=index.html
<li>Ensure that your development computer can detect your device when connected via USB</li>
</ul>
- <p>Read <a href="{@docRoot}tools/workflow/devices/device.html">Using Hardware Devices</a>
+ <p>Read <a href="{@docRoot}tools/device.html">Using Hardware Devices</a>
for more information.</p>
<p>Once set up and your device is connected via USB, install your application on the device by
diff --git a/docs/html/tools/building/plugin-for-gradle.jd b/docs/html/tools/building/plugin-for-gradle.jd
index c1ec4259749b..513153dd1df4 100644
--- a/docs/html/tools/building/plugin-for-gradle.jd
+++ b/docs/html/tools/building/plugin-for-gradle.jd
@@ -112,7 +112,7 @@ several kinds of modules:</p>
configuration options common to all application modules in the project. Each application module
also has its own build.gradle file for build settings specific to that module.</p>
-<h3>Project Build File</h3>
+<h3 id="projectBuildFile">Project Build File</h3>
<p>By default, the project-level Gradle file uses <em>buildscript</em> to define the Gradle
<em>repositories</em> and <em>dependencies</em>. This allows different projects to use different
Gradle versions. Supported repositories include JCenter, Maven Central, or Ivy. This example
@@ -144,7 +144,7 @@ allprojects {
the <em>local.properties</em> file in the <code>sdk.dir<sdk location></code> setting or through an
<code>ANDROID_HOME</code> environment variable.</p>
-<h3>Module Build File</h3>
+<h3 id="moduleBuildFile">Module Build File</h3>
<p>The application module Gradle build file allows you to configure module build settings,
including overriding the <code>src/main</code> manifest settings and setting custom packaging
options. </p>
@@ -378,7 +378,7 @@ and two <em>dimensions</em> of product flavors, one for app type (demo or full)
CPU/ABI (x86, ARM, or MIPS). </p>
-<h3>Source directories</h3>
+<h3 id="sourceDirectories">Source directories</h3>
<p>To build each version of your app, the build system combines source code and
resources from:</p>
diff --git a/docs/html/tools/support-library/features.jd b/docs/html/tools/support-library/features.jd
index abe1c084e076..b3af7a27d9cb 100644
--- a/docs/html/tools/support-library/features.jd
+++ b/docs/html/tools/support-library/features.jd
@@ -17,13 +17,19 @@ page.title=Support Library Features
<li><a href="#v7-mediarouter">v7 mediarouter library</a></li>
<li><a href="#v7-palette">v7 palette library</a></li>
<li><a href="#v7-recyclerview">v7 recyclerview library</a></li>
+ <li><a href="#v7-preference">v7 preference library</a></li>
</ol>
</li>
<li><a href="#v8">v8 Support Library</a></li>
<li><a href="#v13">v13 Support Library</a></li>
+ <li><a href="#v14-preference">v14 Preference Support Library</a></li>
<li><a href="#v17-leanback">v17 Leanback Library</a></li>
+ <li><a href="#v17-preference">v17 Preference Library for TV</a></li>
<li><a href="#annotations">Annotations Support Library</a></li>
<li><a href="#design">Design Support Library</a></li>
+ <li><a href="#custom-tabs">Custom Tabs Support Library</a></li>
+ <li><a href="#percent">Percent Support Library</a></li>
+ <li><a href="#recommendation">Recommendation Support Library for TV</a></li>
</ol>
<h2>See also</h2>
@@ -344,7 +350,7 @@ com.android.support:palette-v7:21.0.0
<p>The recyclerview library adds the {@link android.support.v7.widget.RecyclerView}
class. This class provides support for the
-<a href="{@docRoot}training/material/lists-cards.jd#RecyclerView">RecyclerView
+<a href="{@docRoot}training/material/lists-cards#RecyclerView">RecyclerView
widget</a>, a view for efficiently displaying large data sets by providing a
limited window of data items.</p>
@@ -361,6 +367,40 @@ com.android.support:recyclerview-v7:21.0.0
</pre>
+<h3 id="v7-preference">v7 Preference Support Library</h3>
+
+<p>The
+<a href="{@docRoot}reference/android/support/v7/preference/package-summary.html">preference</a>
+package provides APIs to support adding preference objects, such as
+{@link android.support.v7.preference.CheckBoxPreference} and
+{@link android.support.v7.preference.ListPreference}, for
+users to modify UI settings. </p>
+
+<p>The v7 Preference library adds support for interfaces, such as
+{@link android.support.v7.preference.Preference.OnPreferenceChangeListener} and
+{@link android.support.v7.preference.Preference.OnPreferenceClickListener}, and classes,
+such as {@link android.support.v7.preference.CheckBoxPreference} and
+{@link android.support.v7.preference.ListPreference}. </p>
+
+
+<p>After you download the Android Support Libraries, this library is located in the
+{@code &lt;sdk&gt;/extras/android/support/v7/preference} directory. For more information
+on how to set up your project, follow the instructions in <a
+href="{@docRoot}tools/support-library/setup.html#libs-with-res">Adding libraries
+with resources</a>. </p>
+
+<p>The Gradle build script dependency identifier for this library is as follows:</p>
+
+<pre>
+com.android.support:preference-v7:23.0.0
+</pre>
+
+
+
+
+
+
+
<h2 id="v8">v8 Support Library</h2>
@@ -382,7 +422,7 @@ com.android.support:recyclerview-v7:21.0.0
<p class="note">
<strong>Note:</strong> Use of RenderScript with the support library is supported with Android
Studio and Gradle-based builds, as well as the Eclipse plugin and Ant build tools. The
- renderscript library is located in the <code>build-tools/$VERSION/renderscript/</code> folder.
+ renderscript library is located in the <code>build-tools/$VERSION/renderscript/</code> folder.
</p>
<p>The following example shows the Gradle build script properties for this library:</p>
@@ -421,6 +461,69 @@ com.android.support:support-v13:18.0.0
+
+
+<h2 id="v14-preference">v14 Preference Support Library</h2>
+
+
+<p>The {@link android.support.v14.preference} package provides APIs to add support
+for preference interfaces such as
+{@link android.support.v14.preference.PreferenceFragment.OnPreferenceStartFragmentCallback}
+ and
+{@link android.support.v14.preference.PreferenceFragment.OnPreferenceStartScreenCallback},
+ along with classes, such as
+{@link android.support.v14.preference.MultiSelectListPreference} and
+{@link android.support.v14.preference.PreferenceFragment}. For detailed
+ information about the v14 Preference Support Library APIs, see the
+ <a href="{@docRoot}reference/android/support/v14/preference/package-summary.html">preference</a>
+ package in the API reference.
+</p>
+
+<p>After you download the Android Support Libraries, this library is located in the
+{@code &lt;sdk&gt;/extras/android/support/v14/} directory. The library does not contain user
+interface resources. To include it in your application project, follow the instructions for
+<a href="{@docRoot}tools/support-library/setup.html#libs-without-res">Adding libraries without
+resources</a>.</p>
+
+<p>The Gradle build script dependency identifier for this library is as follows:</p>
+
+<pre>
+com.android.support:preference-v14:23.0.0
+</pre>
+
+
+
+
+<h2 id="v17-preference">v17 Preference Support Library for TV</h2>
+
+
+<p>The {@link android.support.v17.preference} package provides APIs for providing preference
+ interfaces on TV devices, including support for the
+{@link android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener}
+interface and classes, such as
+{@link android.support.v17.preference.BaseLeanbackPreferenceFragment} and
+{@link android.support.v17.preference.LeanbackPreferenceFragment}. For detailed
+ information about the v17 Preference Support Library APIs, see the
+ <a href="{@docRoot}reference/android/support/v17/preference/package-summary.html">preference</a>
+ package in the API reference.
+</p>
+
+<p>After you download the Android Support Libraries, this library is located in the
+{@code &lt;sdk&gt;/extras/android/support/v17/} directory. The library does not contain user
+interface resources. To include it in your application project, follow the instructions for
+<a href="{@docRoot}tools/support-library/setup.html#libs-without-res">Adding libraries without
+resources</a>.</p>
+
+<p>The Gradle build script dependency identifier for this library is as follows:</p>
+
+<pre>
+com.android.support:preference-v17:23.0.0
+</pre>
+
+
+
+
+
<h2 id="v17-leanback">v17 Leanback Library</h2>
<p>The {@link android.support.v17.leanback} package provides APIs to support
@@ -506,3 +609,90 @@ com.android.support:design:22.2.0
</pre>
+
+<h2 id="custom-tabs">Custom Tabs Support Library</h2>
+
+<p>The
+<a href="{@docRoot}reference/android/support/customtabs/package-summary.html">Custom Tabs</a>
+package provides APIs to support adding and managing custom tabs in your apps. </p>
+
+<p>The Custom Tabs Support library adds support for various classes, such as
+<a href="{@docRoot}reference/android/support/customtabs/CustomTabsService.html">Custom Tabs
+Service</a>
+and
+<a href="{@docRoot}reference/android/support/customtabs/CustomTabsSCallback.html">Custom Tabs
+Callback</a>. </p>
+
+
+<p>After you download the Android Support Libraries, this library is located in the
+{@code &lt;sdk&gt;/extras/android/support/customtabs} directory. For more information
+on how to set up your project, follow the instructions in <a
+href="{@docRoot}tools/support-library/setup.html#libs-with-res">Adding libraries
+with resources</a>. </p>
+
+<p>The Gradle build script dependency identifier for this library is as follows:</p>
+
+<pre>
+com.android.support:customtabs:23.0.0
+</pre>
+
+
+
+
+<h2 id="percent">Percent Support Library</h2>
+
+<p>The
+<a href="{@docRoot}reference/android/support/percent/package-summary.html">Percent</a>
+package provides APIs to support adding and managing percentage based dimensions in your app. </p>
+
+<p>The Percent Support library adds support for the
+<a href="{@docRoot}reference/android/support/percent/PercentLayoutHelper.PercentLayoutParams.html">
+PercentLayoutHelper.PercentLayoutParams</a> interface
+and various classes, such as
+<a href="{@docRoot}reference/android/support/percent/PercentFrameLayout.html">PercentFrameLayout</a>
+and
+<a href="{@docRoot}reference/android/support/percent/PercentRelativeLayout.html">
+PercentRelativeLayout</a>. </p>
+
+
+<p>After you download the Android Support Libraries, this library is located in the
+{@code &lt;sdk&gt;/extras/android/support/customtabs} directory. For more information
+on how to set up your project, follow the instructions in <a
+href="{@docRoot}tools/support-library/setup.html#libs-with-res">Adding libraries
+with resources</a>. </p>
+
+<p>The Gradle build script dependency identifier for this library is as follows:</p>
+
+<pre>
+com.android.support:percent:23.0.0
+</pre>
+
+
+
+<h2 id="recommendation">App Recommendation Support Library for TV</h2>
+
+<p>The
+<a href="{@docRoot}reference/android/support/app/recommendation/package-summary.html">App
+Recommendation</a>
+package provides APIs to support adding content recommendations in your app running on TV devices. </p>
+
+<p>The App library adds support for annotations, such as
+<a href="{@docRoot}reference/android/support/app/recommendation/ContentRecommendation.ContentMaturity.html">
+ContentRecommendation.ContentMaturity</a> and various classes, such as
+<a href="{@docRoot}reference/android/support/app/recommendation/ContentRecommendation.html">ContentRecommendation</a>
+and
+<a href="{@docRoot}reference/android/support/app/recommendation/RecommendationExtender.html">
+RecommendationExtender</a>. </p>
+
+
+<p>After you download the Android Support Libraries, this library is located in the
+{@code &lt;sdk&gt;/extras/android/support/customtabs} directory. For more information
+on how to set up your project, follow the instructions in <a
+href="{@docRoot}tools/support-library/setup.html#libs-with-res">Adding libraries
+with resources</a>. </p>
+
+<p>The Gradle build script dependency identifier for this library is as follows:</p>
+
+<pre>
+com.android.support:app.recommendation-app:23.0.0
+</pre>
diff --git a/docs/html/tools/support-library/index.jd b/docs/html/tools/support-library/index.jd
index 9bd9178759fd..9dc0ed154208 100644
--- a/docs/html/tools/support-library/index.jd
+++ b/docs/html/tools/support-library/index.jd
@@ -63,6 +63,36 @@ page.title=Support Library
<div class="toggle-content opened">
<p id="rev21"><a href="#" onclick="return toggleContent(this)">
<img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 23</a> <em>(August 2015)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Added new support libraries:</a></dt>
+ <dd>
+ <ul>
+ <li><a href="features.html#custom-tabs">Custom Tabs Support library</a></li>
+ <li><a href="features.html#percent">Percent Support library</a></li>
+ <li><a href="features.html#recommendation">App Recommendation Support library for TV</a></li>
+ <li><a href="features.html#v7-preference">v7 Preference Support library</a></li>
+ <li><a href="features.html#v14-preference">v14 Preference Support library</a></li>
+ <li><a href="features.html#v17-preference">v17 Preference Support library for TV</a></li>
+ </ul>
+ </dd>
+
+ </dl>
+
+ <p>For a complete list of the Support Library changes, see the
+ <a href="{@docRoot}sdk/support_api_diff/23/changes.html">Support
+ Library API Differences Report</a>. </p>
+
+ </div>
+</div> <!-- end of collapsible section -->
+
+
+
+<div class="toggle-content closed">
+ <p id="rev21"><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" alt=""
/>Android Support Library, revision 22.2.1</a> <em>(July 2015)</em>
</p>
<div class="toggle-content-toggleme">
@@ -95,8 +125,6 @@ page.title=Support Library
<a href="{@docRoot}sdk/support_api_diff/22.2.0/changes.html">Support
Library API Differences Report</a>. </p>
-
-
</div>
</div> <!-- end of collapsible section -->
@@ -684,7 +712,7 @@ page.title=Support Library
<dt>Added <a href="{@docRoot}tools/support-library/features.html#multidex">
multidex support library</a> to support multiple
<a href="https://source.android.com/devices/tech/dalvik/">Dalvik</a> Executable (DEX) files
- for multi-dex file support prior to Android 5.0. </li>
+ for multi-dex file support prior to Android 5.0.
</dt>
</dl>
</div>
diff --git a/docs/html/training/basics/firstapp/creating-project.jd b/docs/html/training/basics/firstapp/creating-project.jd
index 79268a00eba3..4bd92ee75145 100644
--- a/docs/html/training/basics/firstapp/creating-project.jd
+++ b/docs/html/training/basics/firstapp/creating-project.jd
@@ -24,8 +24,6 @@ next.link=running-app.html
<h2>You should also read</h2>
<ul>
- <li><a href="{@docRoot}sdk/installing/index.html">Installing the
-SDK</a></li>
<li><a href="{@docRoot}tools/projects/index.html">Managing Projects</a></li>
</ul>
@@ -34,8 +32,7 @@ SDK</a></li>
</div>
<p>An Android project contains all the files that comprise the source code for your Android
-app. The Android SDK tools make it easy to start a new Android project with a set of
-default project directories and files.</p>
+app.</p>
<p>This lesson
shows how to create a new project either using Android Studio or using the
diff --git a/docs/html/training/basics/firstapp/index.jd b/docs/html/training/basics/firstapp/index.jd
index 1b6e00f39c22..4e3689a3e7b6 100644
--- a/docs/html/training/basics/firstapp/index.jd
+++ b/docs/html/training/basics/firstapp/index.jd
@@ -12,7 +12,7 @@ helpoutsWidget=true
<div id="tb-wrapper">
<div id="tb">
-<h2>Dependencies and prerequisites</h2>
+<h2>Dependencies</h2>
<ul>
<li><a href="{@docRoot}sdk/index.html">Android Studio</a></li>
@@ -37,14 +37,11 @@ to:</p>
<a href="{@docRoot}tools/help/sdk-manager.html">SDK Manager</a>.</li>
</ol>
-<p class="note"><strong>Note:</strong> Make sure you install the most recent versions of Android
-Studio and the Android SDK before you start this class. The procedures described in this class may
-not apply to earlier versions.</p>
+<p class="note"><strong>Note:</strong> Although most of this training class
+expects that you're using Android Studio, some procedures include alternative
+instructions for using
+the SDK tools from the command line instead.</p>
-<p>If you haven't already done these tasks, start by downloading the
- <a href="{@docRoot}sdk/index.html">Android SDK</a> and following the install steps.
- Once you've finished the setup, you're ready to begin this class.</p>
-
-<p>This class uses a tutorial format that incrementally builds a small Android app that teaches
+<p>This class uses a tutorial format to create a small Android app that teaches
you some fundamental concepts about Android development, so it's important that you follow each
step.</p>
diff --git a/docs/html/training/basics/firstapp/running-app.jd b/docs/html/training/basics/firstapp/running-app.jd
index fdf0d1f59a53..6e4605f00375 100644
--- a/docs/html/training/basics/firstapp/running-app.jd
+++ b/docs/html/training/basics/firstapp/running-app.jd
@@ -25,7 +25,7 @@ helpoutsWidget=true
<ul>
<li><a href="{@docRoot}tools/device.html">Using Hardware Devices</a></li>
- <li><a href="{@docRoot}tools/devices/index.html">Managing Virtual Devices</a></li>
+ <li><a href="{@docRoot}tools/devices/managing-avds.html">Managing AVDs with AVD Manager</a></li>
<li><a href="{@docRoot}tools/projects/index.html">Managing Projects</a></li>
</ul>
@@ -128,10 +128,6 @@ to first create an <a href="{@docRoot}tools/devices/index.html">Android Virtual
AVD is a device configuration for the Android emulator that allows you to model a specific
device.</p>
-<div class="figure" style="width:457px">
- <img src="{@docRoot}images/screens_support/as-mac-avds-config.png" />
- <p class="img-caption"><strong>Figure 1.</strong> The AVD Manager showing a virtual device.</p>
-</div>
<h3>Create an AVD</h3>
<ol>
@@ -161,19 +157,11 @@ device.</p>
</li>
<li>Verify the configuration settings, then click <strong>Finish</strong>.
</li>
- <li>In the <strong>Android Virtual Device Manager</strong> window, click <strong>Create</strong>.</li>
- <li>Enter an <strong>AVD Name</strong>.</li>
- <li>Select a <strong>Device</strong> type.
- <p>When you select a device type, most of the fields auto-populate.</p>
- <li>For <strong>Skin</strong> select <strong>HVGA</strong>.</li>
- <li>For <strong>SD Card</strong>, enter something small, like 10 MiB.
- <p>It really doesn't matter what you enter here since you're not using any storage. But if you
- reuse this AVD, you might have to adjust this setting.</p></li>
- <li>Ignore the <strong>Emulation Options</strong> and click <strong>OK</strong>.</li>
- <li>In the <strong>Result</strong> screen, click <strong>OK</strong>.</li>
- <li>Close the <strong>Android Virtual Device Manager</strong> window.</li>
</ol>
+<p>For more information about using AVDs, see
+<a href="{@docRoot}tools/devices/managing-avds.html">Managing AVDs with AVD Manager</a>.</p>
+
<h3>Run the app from Android Studio</h3>
<ol>
<li>In <strong>Android Studio</strong>, select your project and click <strong>Run</strong>
diff --git a/include/android_runtime/AndroidRuntime.h b/include/android_runtime/AndroidRuntime.h
index fc33b7e67e34..9a3b990c45bc 100644
--- a/include/android_runtime/AndroidRuntime.h
+++ b/include/android_runtime/AndroidRuntime.h
@@ -64,7 +64,7 @@ public:
*/
static jclass findClass(JNIEnv* env, const char* className);
- void start(const char *classname, const Vector<String8>& options);
+ void start(const char *classname, const Vector<String8>& options, bool zygote);
void exit(int code);
@@ -131,7 +131,7 @@ private:
const char* runtimeArg,
const char* quotingArg);
void parseExtraOpts(char* extraOptsBuf, const char* quotingArg);
- int startVm(JavaVM** pJavaVM, JNIEnv** pEnv);
+ int startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote);
Vector<JavaVMOption> mOptions;
bool mExitWithoutCleanup;
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 113b1f4a2b1c..c7adc986565f 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -548,7 +548,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
- @Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (DEBUG) Log.d(TAG, "received broadcast " + action);
@@ -600,7 +599,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
private final BroadcastReceiver mBroadcastAllReceiver = new BroadcastReceiver() {
- @Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED.equals(action)) {
@@ -715,7 +713,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
return new SimData(state, slotId, subId);
}
- @Override
public String toString() {
return "SimData{state=" + simState + ",slotId=" + slotId + ",subId=" + subId + "}";
}
@@ -898,9 +895,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
}
private boolean shouldListenForFingerprint() {
- return mKeyguardIsVisible && !mSwitchingUser &&
- mTrustManager.hasUserAuthenticatedSinceBoot(
- ActivityManager.getCurrentUser());
+ return mKeyguardIsVisible && !mSwitchingUser;
}
private void startListeningForFingerprint() {
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java
index 83b953ebf179..8d9c965847b1 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerService.java
@@ -7848,8 +7848,12 @@ if (MORE_DEBUG) Slog.v(TAG, " + got " + nRead + "; now wanting " + (size - soF
// If we get this far, the callback or timeout will schedule the
// next restore state, so we're done
} catch (Exception e) {
- Slog.e(TAG, "Unable to finalize restore of " + mCurrentPackage.packageName);
- executeNextState(UnifiedRestoreState.FINAL);
+ final String packageName = mCurrentPackage.packageName;
+ Slog.e(TAG, "Unable to finalize restore of " + packageName);
+ EventLog.writeEvent(EventLogTags.RESTORE_AGENT_FAILURE,
+ packageName, e.toString());
+ keyValueAgentErrorCleanup();
+ executeNextState(UnifiedRestoreState.RUNNING_QUEUE);
}
}
diff --git a/services/core/java/com/android/server/AnyMotionDetector.java b/services/core/java/com/android/server/AnyMotionDetector.java
index 6390bcd21022..6a673164b1b4 100644
--- a/services/core/java/com/android/server/AnyMotionDetector.java
+++ b/services/core/java/com/android/server/AnyMotionDetector.java
@@ -16,9 +16,6 @@
package com.android.server;
-import android.app.AlarmManager;
-import android.content.BroadcastReceiver;
-import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
@@ -85,17 +82,12 @@ public class AnyMotionDetector {
/** The accelerometer sampling interval. */
private static final int SAMPLING_INTERVAL_MILLIS = 40;
- private AlarmManager mAlarmManager;
private final Handler mHandler;
- private Intent mAlarmIntent;
private final Object mLock = new Object();
private Sensor mAccelSensor;
private SensorManager mSensorManager;
private PowerManager.WakeLock mWakeLock;
- /** The time when detection was last performed. */
- private long mDetectionStartTime;
-
/** The minimum number of samples required to detect AnyMotion. */
private int mNumSufficientSamples;
@@ -113,11 +105,11 @@ public class AnyMotionDetector {
private DeviceIdleCallback mCallback = null;
- public AnyMotionDetector(AlarmManager am, PowerManager pm, Handler handler, SensorManager sm,
+ public AnyMotionDetector(PowerManager pm, Handler handler, SensorManager sm,
DeviceIdleCallback callback) {
if (DEBUG) Slog.d(TAG, "AnyMotionDetector instantiated.");
- mAlarmManager = am;
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
+ mWakeLock.setReferenceCounted(false);
mHandler = handler;
mSensorManager = sm;
mAccelSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
@@ -144,6 +136,22 @@ public class AnyMotionDetector {
}
}
+ public void stop() {
+ if (mState == STATE_ACTIVE) {
+ mState = STATE_INACTIVE;
+ if (DEBUG) Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE.");
+ if (mMeasurementInProgress) {
+ mMeasurementInProgress = false;
+ mSensorManager.unregisterListener(mListener);
+ }
+ mHandler.removeCallbacks(mMeasurementTimeout);
+ mHandler.removeCallbacks(mSensorRestart);
+ mWakeLock.release();
+ mCurrentGravityVector = null;
+ mPreviousGravityVector = null;
+ }
+ }
+
private void startOrientationMeasurement() {
if (DEBUG) Slog.d(TAG, "startOrientationMeasurement: mMeasurementInProgress=" +
mMeasurementInProgress + ", (mAccelSensor != null)=" + (mAccelSensor != null));
@@ -153,7 +161,6 @@ public class AnyMotionDetector {
SAMPLING_INTERVAL_MILLIS * 1000)) {
mWakeLock.acquire();
mMeasurementInProgress = true;
- mDetectionStartTime = SystemClock.elapsedRealtime();
mRunningStats.reset();
}
@@ -170,9 +177,7 @@ public class AnyMotionDetector {
if (mMeasurementInProgress) {
mSensorManager.unregisterListener(mListener);
mHandler.removeCallbacks(mMeasurementTimeout);
- if (mWakeLock.isHeld()) {
- mWakeLock.release();
- }
+ mWakeLock.release();
long detectionEndTime = SystemClock.elapsedRealtime();
mMeasurementInProgress = false;
mPreviousGravityVector = mCurrentGravityVector;
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 6e0c37fb80d4..4919bed4cf11 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -1585,7 +1585,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
NetworkCapabilities.TRANSPORT_CELLULAR)) {
timeout = Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.DATA_ACTIVITY_TIMEOUT_MOBILE,
- 5);
+ 10);
type = ConnectivityManager.TYPE_MOBILE;
} else if (networkAgent.networkCapabilities.hasTransport(
NetworkCapabilities.TRANSPORT_WIFI)) {
diff --git a/services/core/java/com/android/server/DeviceIdleController.java b/services/core/java/com/android/server/DeviceIdleController.java
index e678bbc8b40e..80fd4419a821 100644
--- a/services/core/java/com/android/server/DeviceIdleController.java
+++ b/services/core/java/com/android/server/DeviceIdleController.java
@@ -34,10 +34,15 @@ import android.hardware.SensorManager;
import android.hardware.TriggerEvent;
import android.hardware.TriggerEventListener;
import android.hardware.display.DisplayManager;
+import android.location.LocationRequest;
+import android.location.Location;
+import android.location.LocationListener;
+import android.location.LocationManager;
import android.net.INetworkPolicyManager;
import android.net.Uri;
import android.os.BatteryStats;
import android.os.Binder;
+import android.os.Bundle;
import android.os.Environment;
import android.os.FileUtils;
import android.os.Handler;
@@ -107,6 +112,8 @@ public class DeviceIdleController extends SystemService
private DisplayManager mDisplayManager;
private SensorManager mSensorManager;
private Sensor mSigMotionSensor;
+ private LocationManager mLocationManager;
+ private LocationRequest mLocationRequest;
private PendingIntent mSensingAlarmIntent;
private PendingIntent mAlarmIntent;
private Intent mIdleIntent;
@@ -117,6 +124,13 @@ public class DeviceIdleController extends SystemService
private boolean mScreenOn;
private boolean mCharging;
private boolean mSigMotionActive;
+ private boolean mSensing;
+ private boolean mNotMoving;
+ private boolean mLocating;
+ private boolean mLocated;
+ private boolean mHaveGps;
+ private Location mLastGenericLocation;
+ private Location mLastGpsLocation;
/** Device is currently active. */
private static final int STATE_ACTIVE = 0;
@@ -126,16 +140,19 @@ public class DeviceIdleController extends SystemService
private static final int STATE_IDLE_PENDING = 2;
/** Device is currently sensing motion. */
private static final int STATE_SENSING = 3;
+ /** Device is currently finding location (and may still be sensing). */
+ private static final int STATE_LOCATING = 4;
/** Device is in the idle state, trying to stay asleep as much as possible. */
- private static final int STATE_IDLE = 4;
+ private static final int STATE_IDLE = 5;
/** Device is in the idle state, but temporarily out of idle to do regular maintenance. */
- private static final int STATE_IDLE_MAINTENANCE = 5;
+ private static final int STATE_IDLE_MAINTENANCE = 6;
private static String stateToString(int state) {
switch (state) {
case STATE_ACTIVE: return "ACTIVE";
case STATE_INACTIVE: return "INACTIVE";
case STATE_IDLE_PENDING: return "IDLE_PENDING";
case STATE_SENSING: return "SENSING";
+ case STATE_LOCATING: return "LOCATING";
case STATE_IDLE: return "IDLE";
case STATE_IDLE_MAINTENANCE: return "IDLE_MAINTENANCE";
default: return Integer.toString(state);
@@ -258,6 +275,48 @@ public class DeviceIdleController extends SystemService
}
};
+ private final LocationListener mGenericLocationListener = new LocationListener() {
+ @Override
+ public void onLocationChanged(Location location) {
+ synchronized (DeviceIdleController.this) {
+ receivedGenericLocationLocked(location);
+ }
+ }
+
+ @Override
+ public void onStatusChanged(String provider, int status, Bundle extras) {
+ }
+
+ @Override
+ public void onProviderEnabled(String provider) {
+ }
+
+ @Override
+ public void onProviderDisabled(String provider) {
+ }
+ };
+
+ private final LocationListener mGpsLocationListener = new LocationListener() {
+ @Override
+ public void onLocationChanged(Location location) {
+ synchronized (DeviceIdleController.this) {
+ receivedGpsLocationLocked(location);
+ }
+ }
+
+ @Override
+ public void onStatusChanged(String provider, int status, Bundle extras) {
+ }
+
+ @Override
+ public void onProviderEnabled(String provider) {
+ }
+
+ @Override
+ public void onProviderDisabled(String provider) {
+ }
+ };
+
/**
* All times are in milliseconds. These constants are kept synchronized with the system
* global Settings. Any access to this class or its fields should be done while
@@ -267,6 +326,8 @@ public class DeviceIdleController extends SystemService
// Key names stored in the settings value.
private static final String KEY_INACTIVE_TIMEOUT = "inactive_to";
private static final String KEY_SENSING_TIMEOUT = "sensing_to";
+ private static final String KEY_LOCATING_TIMEOUT = "locating_to";
+ private static final String KEY_LOCATION_ACCURACY = "location_accuracy";
private static final String KEY_MOTION_INACTIVE_TIMEOUT = "motion_inactive_to";
private static final String KEY_IDLE_AFTER_INACTIVE_TIMEOUT = "idle_after_inactive_to";
private static final String KEY_IDLE_PENDING_TIMEOUT = "idle_pending_to";
@@ -294,7 +355,8 @@ public class DeviceIdleController extends SystemService
public long INACTIVE_TIMEOUT;
/**
- * If we don't receive a callback from AnyMotion in this amount of time, we will change from
+ * If we don't receive a callback from AnyMotion in this amount of time +
+ * {@link #LOCATING_TIMEOUT}, we will change from
* STATE_SENSING to STATE_INACTIVE, and any AnyMotion callbacks while not in STATE_SENSING
* will be ignored.
* @see Settings.Global#DEVICE_IDLE_CONSTANTS
@@ -303,6 +365,23 @@ public class DeviceIdleController extends SystemService
public long SENSING_TIMEOUT;
/**
+ * This is how long we will wait to try to get a good location fix before going in to
+ * idle mode.
+ * @see Settings.Global#DEVICE_IDLE_CONSTANTS
+ * @see #KEY_LOCATING_TIMEOUT
+ */
+ public long LOCATING_TIMEOUT;
+
+ /**
+ * The desired maximum accuracy (in meters) we consider the location to be good enough to go
+ * on to idle. We will be trying to get an accuracy fix at least this good or until
+ * {@link #LOCATING_TIMEOUT} expires.
+ * @see Settings.Global#DEVICE_IDLE_CONSTANTS
+ * @see #KEY_LOCATION_ACCURACY
+ */
+ public float LOCATION_ACCURACY;
+
+ /**
* This is the time, after seeing motion, that we wait after becoming inactive from
* that until we start looking for motion again.
* @see Settings.Global#DEVICE_IDLE_CONSTANTS
@@ -423,7 +502,10 @@ public class DeviceIdleController extends SystemService
INACTIVE_TIMEOUT = mParser.getLong(KEY_INACTIVE_TIMEOUT,
!COMPRESS_TIME ? 30 * 60 * 1000L : 3 * 60 * 1000L);
SENSING_TIMEOUT = mParser.getLong(KEY_SENSING_TIMEOUT,
- !DEBUG ? 5 * 60 * 1000L : 60 * 1000L);
+ !DEBUG ? 4 * 60 * 1000L : 60 * 1000L);
+ LOCATING_TIMEOUT = mParser.getLong(KEY_LOCATING_TIMEOUT,
+ !DEBUG ? 30 * 1000L : 15 * 1000L);
+ LOCATION_ACCURACY = mParser.getFloat(KEY_LOCATION_ACCURACY, 20);
MOTION_INACTIVE_TIMEOUT = mParser.getLong(KEY_MOTION_INACTIVE_TIMEOUT,
!COMPRESS_TIME ? 10 * 60 * 1000L : 60 * 1000L);
IDLE_AFTER_INACTIVE_TIMEOUT = mParser.getLong(KEY_IDLE_AFTER_INACTIVE_TIMEOUT,
@@ -462,6 +544,14 @@ public class DeviceIdleController extends SystemService
TimeUtils.formatDuration(SENSING_TIMEOUT, pw);
pw.println();
+ pw.print(" "); pw.print(KEY_LOCATING_TIMEOUT); pw.print("=");
+ TimeUtils.formatDuration(LOCATING_TIMEOUT, pw);
+ pw.println();
+
+ pw.print(" "); pw.print(KEY_LOCATION_ACCURACY); pw.print("=");
+ pw.print(LOCATION_ACCURACY); pw.print("m");
+ pw.println();
+
pw.print(" "); pw.print(KEY_MOTION_INACTIVE_TIMEOUT); pw.print("=");
TimeUtils.formatDuration(MOTION_INACTIVE_TIMEOUT, pw);
pw.println();
@@ -515,17 +605,27 @@ public class DeviceIdleController extends SystemService
@Override
public void onAnyMotionResult(int result) {
if (DEBUG) Slog.d(TAG, "onAnyMotionResult(" + result + ")");
- if (mState == STATE_SENSING) {
- if (result == AnyMotionDetector.RESULT_STATIONARY) {
- if (DEBUG) Slog.d(TAG, "RESULT_STATIONARY received.");
+ if (result == AnyMotionDetector.RESULT_MOVED) {
+ if (DEBUG) Slog.d(TAG, "RESULT_MOVED received.");
+ synchronized (this) {
+ handleMotionDetectedLocked(mConstants.INACTIVE_TIMEOUT, "sense_motion");
+ }
+ } else if (result == AnyMotionDetector.RESULT_STATIONARY) {
+ if (DEBUG) Slog.d(TAG, "RESULT_STATIONARY received.");
+ if (mState == STATE_SENSING) {
+ // If we are currently sensing, it is time to move to locating.
synchronized (this) {
+ mNotMoving = true;
stepIdleStateLocked();
}
- } else if (result == AnyMotionDetector.RESULT_MOVED) {
- if (DEBUG) Slog.d(TAG, "RESULT_MOVED received.");
+ } else if (mState == STATE_LOCATING) {
+ // If we are currently locating, note that we are not moving and step
+ // if we have located the position.
synchronized (this) {
- EventLogTags.writeDeviceIdle(mState, "sense_moved");
- enterInactiveStateLocked();
+ mNotMoving = true;
+ if (mLocated) {
+ stepIdleStateLocked();
+ }
}
}
}
@@ -778,13 +878,19 @@ public class DeviceIdleController extends SystemService
mBatteryStats = BatteryStatsService.getService();
mLocalPowerManager = getLocalService(PowerManagerInternal.class);
mNetworkPolicyManager = INetworkPolicyManager.Stub.asInterface(
- ServiceManager.getService(Context.NETWORK_POLICY_SERVICE));
+ ServiceManager.getService(Context.NETWORK_POLICY_SERVICE));
mDisplayManager = (DisplayManager) getContext().getSystemService(
Context.DISPLAY_SERVICE);
mSensorManager = (SensorManager) getContext().getSystemService(Context.SENSOR_SERVICE);
mSigMotionSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION);
+ mLocationManager = (LocationManager) getContext().getSystemService(
+ Context.LOCATION_SERVICE);
+ mLocationRequest = new LocationRequest()
+ .setQuality(LocationRequest.ACCURACY_FINE)
+ .setInterval(0)
+ .setFastestInterval(0)
+ .setNumUpdates(1);
mAnyMotionDetector = new AnyMotionDetector(
- mAlarmManager,
(PowerManager) getContext().getSystemService(Context.POWER_SERVICE),
mHandler, mSensorManager, this);
@@ -1049,7 +1155,7 @@ public class DeviceIdleController extends SystemService
// We consider any situation where the display is showing something to be it on,
// because if there is anything shown we are going to be updating it at some
// frequency so can't be allowed to go into deep sleeps.
- boolean screenOn = mCurDisplay.getState() != Display.STATE_OFF;;
+ boolean screenOn = mCurDisplay.getState() == Display.STATE_ON;
if (DEBUG) Slog.d(TAG, "updateDisplayLocked: screenOn=" + screenOn);
if (!screenOn && mScreenOn) {
mScreenOn = false;
@@ -1092,10 +1198,7 @@ public class DeviceIdleController extends SystemService
scheduleReportActiveLocked(activeReason, activeUid);
mState = STATE_ACTIVE;
mInactiveTimeout = mConstants.INACTIVE_TIMEOUT;
- mNextIdlePendingDelay = 0;
- mNextIdleDelay = 0;
- cancelAlarmLocked();
- stopMonitoringSignificantMotion();
+ resetIdleManagementLocked();
}
}
@@ -1106,20 +1209,20 @@ public class DeviceIdleController extends SystemService
// waiting to see if we will ultimately go idle.
mState = STATE_INACTIVE;
if (DEBUG) Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE");
- mNextIdlePendingDelay = 0;
- mNextIdleDelay = 0;
+ resetIdleManagementLocked();
scheduleAlarmLocked(mInactiveTimeout, false);
EventLogTags.writeDeviceIdle(mState, "no activity");
}
}
- /**
- * This is called when we've failed to receive a callback from AnyMotionDetector
- * within the DEFAULT_SENSING_TIMEOUT, to return to STATE_INACTIVE.
- */
- void enterInactiveStateLocked() {
- mInactiveTimeout = mConstants.INACTIVE_TIMEOUT;
- becomeInactiveIfAppropriateLocked();
+ void resetIdleManagementLocked() {
+ mNextIdlePendingDelay = 0;
+ mNextIdleDelay = 0;
+ cancelAlarmLocked();
+ cancelSensingAlarmLocked();
+ cancelLocatingLocked();
+ stopMonitoringSignificantMotion();
+ mAnyMotionDetector.stop();
}
void exitForceIdleLocked() {
@@ -1160,11 +1263,37 @@ public class DeviceIdleController extends SystemService
case STATE_IDLE_PENDING:
mState = STATE_SENSING;
if (DEBUG) Slog.d(TAG, "Moved from STATE_IDLE_PENDING to STATE_SENSING.");
+ EventLogTags.writeDeviceIdle(mState, "step");
scheduleSensingAlarmLocked(mConstants.SENSING_TIMEOUT);
+ cancelSensingAlarmLocked();
+ cancelLocatingLocked();
mAnyMotionDetector.checkForAnyMotion();
+ mNotMoving = false;
+ mLocated = false;
+ mLastGenericLocation = null;
+ mLastGpsLocation = null;
break;
case STATE_SENSING:
+ mState = STATE_LOCATING;
+ if (DEBUG) Slog.d(TAG, "Moved from STATE_SENSING to STATE_LOCATING.");
+ EventLogTags.writeDeviceIdle(mState, "step");
+ cancelSensingAlarmLocked();
+ scheduleSensingAlarmLocked(mConstants.LOCATING_TIMEOUT);
+ mLocating = true;
+ mLocationManager.requestLocationUpdates(mLocationRequest, mGenericLocationListener,
+ mHandler.getLooper());
+ if (mLocationManager.getProvider(LocationManager.GPS_PROVIDER) != null) {
+ mHaveGps = true;
+ mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 5,
+ mGpsLocationListener, mHandler.getLooper());
+ } else {
+ mHaveGps = false;
+ }
+ break;
+ case STATE_LOCATING:
cancelSensingAlarmLocked();
+ cancelLocatingLocked();
+ mAnyMotionDetector.stop();
case STATE_IDLE_MAINTENANCE:
scheduleAlarmLocked(mNextIdleDelay, true);
if (DEBUG) Slog.d(TAG, "Moved to STATE_IDLE. Next alarm in " + mNextIdleDelay +
@@ -1173,6 +1302,7 @@ public class DeviceIdleController extends SystemService
if (DEBUG) Slog.d(TAG, "Setting mNextIdleDelay = " + mNextIdleDelay);
mNextIdleDelay = Math.min(mNextIdleDelay, mConstants.MAX_IDLE_TIMEOUT);
mState = STATE_IDLE;
+ EventLogTags.writeDeviceIdle(mState, "step");
mHandler.sendEmptyMessage(MSG_REPORT_IDLE_ON);
break;
case STATE_IDLE:
@@ -1193,18 +1323,54 @@ public class DeviceIdleController extends SystemService
if (DEBUG) Slog.d(TAG, "significantMotionLocked()");
// When the sensor goes off, its trigger is automatically removed.
mSigMotionActive = false;
+ handleMotionDetectedLocked(mConstants.MOTION_INACTIVE_TIMEOUT, "motion");
+ }
+
+ void handleMotionDetectedLocked(long timeout, String type) {
// The device is not yet active, so we want to go back to the pending idle
// state to wait again for no motion. Note that we only monitor for significant
// motion after moving out of the inactive state, so no need to worry about that.
if (mState != STATE_ACTIVE) {
- scheduleReportActiveLocked("motion", Process.myUid());
+ scheduleReportActiveLocked(type, Process.myUid());
mState = STATE_ACTIVE;
- mInactiveTimeout = mConstants.MOTION_INACTIVE_TIMEOUT;
- EventLogTags.writeDeviceIdle(mState, "motion");
+ mInactiveTimeout = timeout;
+ EventLogTags.writeDeviceIdle(mState, type);
becomeInactiveIfAppropriateLocked();
}
}
+ void receivedGenericLocationLocked(Location location) {
+ if (mState != STATE_LOCATING) {
+ cancelLocatingLocked();
+ return;
+ }
+ if (DEBUG) Slog.d(TAG, "Generic location: " + location);
+ mLastGenericLocation = new Location(location);
+ if (location.getAccuracy() > mConstants.LOCATION_ACCURACY && mHaveGps) {
+ return;
+ }
+ mLocated = true;
+ if (mNotMoving) {
+ stepIdleStateLocked();
+ }
+ }
+
+ void receivedGpsLocationLocked(Location location) {
+ if (mState != STATE_LOCATING) {
+ cancelLocatingLocked();
+ return;
+ }
+ if (DEBUG) Slog.d(TAG, "GPS location: " + location);
+ mLastGpsLocation = new Location(location);
+ if (location.getAccuracy() > mConstants.LOCATION_ACCURACY) {
+ return;
+ }
+ mLocated = true;
+ if (mNotMoving) {
+ stepIdleStateLocked();
+ }
+ }
+
void startMonitoringSignificantMotion() {
if (DEBUG) Slog.d(TAG, "startMonitoringSignificantMotion()");
if (mSigMotionSensor != null && !mSigMotionActive) {
@@ -1229,8 +1395,19 @@ public class DeviceIdleController extends SystemService
}
void cancelSensingAlarmLocked() {
- if (DEBUG) Slog.d(TAG, "cancelSensingAlarmLocked()");
- mAlarmManager.cancel(mSensingAlarmIntent);
+ if (mSensing) {
+ if (DEBUG) Slog.d(TAG, "cancelSensingAlarmLocked()");
+ mAlarmManager.cancel(mSensingAlarmIntent);
+ mSensing = false;
+ }
+ }
+
+ void cancelLocatingLocked() {
+ if (mLocating) {
+ mLocationManager.removeUpdates(mGenericLocationListener);
+ mLocationManager.removeUpdates(mGpsLocationListener);
+ mLocating = false;
+ }
}
void scheduleAlarmLocked(long delay, boolean idleUntil) {
@@ -1253,10 +1430,12 @@ public class DeviceIdleController extends SystemService
}
void scheduleSensingAlarmLocked(long delay) {
- if (DEBUG) Slog.d(TAG, "scheduleSensingAlarmLocked(" + delay + ")");
- mNextAlarmTime = SystemClock.elapsedRealtime() + delay;
- mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
- mNextAlarmTime, mSensingAlarmIntent);
+ if (DEBUG) Slog.d(TAG, "scheduleSensingAlarmLocked(" + delay + ")");
+ cancelSensingAlarmLocked();
+ mNextAlarmTime = SystemClock.elapsedRealtime() + delay;
+ mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
+ mNextAlarmTime, mSensingAlarmIntent);
+ mSensing = true;
}
private static int[] buildAppIdArray(ArrayMap<String, Integer> systemApps,
@@ -1721,6 +1900,16 @@ public class DeviceIdleController extends SystemService
pw.print(" mScreenOn="); pw.println(mScreenOn);
pw.print(" mCharging="); pw.println(mCharging);
pw.print(" mSigMotionActive="); pw.println(mSigMotionActive);
+ pw.print(" mSensing="); pw.print(mSensing); pw.print(" mNotMoving=");
+ pw.println(mNotMoving);
+ pw.print(" mLocating="); pw.print(mLocating); pw.print(" mHaveGps=");
+ pw.print(mHaveGps); pw.print(" mLocated="); pw.println(mLocated);
+ if (mLastGenericLocation != null) {
+ pw.print(" mLastGenericLocation="); pw.println(mLastGenericLocation);
+ }
+ if (mLastGpsLocation != null) {
+ pw.print(" mLastGpsLocation="); pw.println(mLastGpsLocation);
+ }
pw.print(" mState="); pw.println(stateToString(mState));
pw.print(" mInactiveTimeout="); TimeUtils.formatDuration(mInactiveTimeout, pw);
pw.println();
diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java
index 174bf16bbbe6..15da8290ae40 100644
--- a/services/core/java/com/android/server/trust/TrustManagerService.java
+++ b/services/core/java/com/android/server/trust/TrustManagerService.java
@@ -579,14 +579,8 @@ public class TrustManagerService extends SystemService {
private void clearUserHasAuthenticated(int userId) {
if (userId == UserHandle.USER_ALL) {
mUserHasAuthenticated.clear();
- synchronized (mUserHasAuthenticatedSinceBoot) {
- mUserHasAuthenticatedSinceBoot.clear();
- }
} else {
mUserHasAuthenticated.put(userId, false);
- synchronized (mUserHasAuthenticatedSinceBoot) {
- mUserHasAuthenticatedSinceBoot.put(userId, false);
- }
}
}
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index 3ac6bba8df3c..ab56d5e42ac5 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -40,7 +40,6 @@ import android.graphics.RectF;
import android.graphics.Region;
import android.os.Debug;
import android.os.RemoteException;
-import android.os.UserHandle;
import android.util.Slog;
import android.view.Display;
import android.view.DisplayInfo;
@@ -837,6 +836,8 @@ class WindowStateAnimator {
mSurfaceX = 0;
mSurfaceY = 0;
w.mLastSystemDecorRect.set(0, 0, 0, 0);
+ mHasClipRect = false;
+ mClipRect.set(0, 0, 0, 0);
mLastClipRect.set(0, 0, 0, 0);
// Set up surface control with initial size.
diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java
index 85f0665010f1..4146c1c0111d 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsService.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsService.java
@@ -848,6 +848,9 @@ public class UsageStatsService extends SystemService implements
try {
ParceledListSlice<ApplicationInfo> slice
= AppGlobals.getPackageManager().getInstalledApplications(0, userId);
+ if (slice == null) {
+ return new int[0];
+ }
apps = slice.getList();
} catch (RemoteException e) {
return new int[0];